/********************************************************************
* 文件名 : 数码管显示.c
* 描述 : 该程序为单位数码管静态显示程序。
程序实现了单个数码管的显示。每隔0.5秒依次显示:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f.
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
P2 = 7; //最后一位数码管被点亮
while(1)
{
P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示
i++;
Delay(50); //延时0.5秒后显示下一个数
}
}
/********************************************************************
* 文件名 : 数码管显示.c
* 描述 : 该程序为数码管静态显示程序。
两位数码管进行自加显示
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uint i = 0,j;
while(1)
{
for(j=0;j<100;j++)
{
P0 = 0; //消隐
P2 = 6; //第6位数码管显示
P0 = table[(i / 10)%10]; //在这里取 i 的个位数
Delay_1ms(3); //延时3毫秒后显示下一个数
P0 = 0; //消隐
P2 = 7; //第7位数码管显示
P0 = table[i % 10]; //在这里取 i 的个位数
Delay_1ms(3); //延时3毫秒后显示下一个数
}
i++;
}
}
/********************************************************************
* 文件名 : 数码管显示.c
* 描述 : 该程序为数码管静态显示程序。
三位数码管进行自加显示。0--999
* 杜邦线接法:用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。
用单排针P2.0接J13的8端,P2.1接J13的7端。P2.2接J13的6端。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uint i = 0,j;
while(1)
{
for(j=0;j<10;j++)
{
P0 = 0; //消隐
P2 = 5; //第6位数码管显示
P0 = table[(i / 100)%10]; //在这里取 i 的百位数
Delay_1ms(3); //延时0.5秒后显示下一个数
P0 = 0; //消隐
P2 = 6; //第7位数码管显示
P0 = table[(i / 10)%10]; //在这里取 i 的十位数
Delay_1ms(3); //延时0.5秒后显示下一个数
P0 = 0; //消隐
P2 = 7; //第8位数码管显示
P0 = table[i % 10]; //在这里取 i 的个位数
Delay_1ms(3); //延时0.5秒后显示下一个数
}
i++;
}
}
/********************************************************************
* 文件名 : 数码管字符显示.c
* 描述 : 这个代码可以实现数码管的字符显示。
这个是数码管的一个扩展实验,可以让数码管显示一些简单的字符。
这里实验中,我们在数码管的右边5位,现实了“HELLO
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//uchar code table[8] = {0x00,0x00,0x00,0x00,0x73,0x77,0x6d,0x6d}; //显示PASS编码
uchar code table[8] = {0x00,0x00,0x00,0x76,0x79,0x38,0x38,0x3f}; //显示HELL0编码
uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0 = 0; //消隐
P2 = i; //点亮某一位数码管
P0 = table[i]; //数码管段值
Delay(2);
}
}
}
/********************************************************************
* 文件名 : 动态显示.c
* 描述 : 在数码管上的每位每个0.3秒,显示7,6,5,4,3,2,1,0.
如果按下S19不放(独立按键左边的那个),这时,数码管段选被锁存,
这个时候,虽然代码在改变段选的值,但是,我们看到数码管上的值是不变的。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit KEY1 = P3^2;
sbit LOCKDuan = P3^7;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
//每位数码管依次闪烁
P2 = i; //选择哪一位数码管点亮
P0 = table[i]; //赋值段码给P0口
Delay(300); //延时0.3秒
if(KEY1 == 0) //按下S19,这时数码管段选锁存
{
LOCKDuan = 0; //给74HC573段选芯片锁存端口赋值低电平
}
else
{
LOCKDuan = 1;
}
}
}
}
/********************************************************************
* 文件名 : 数码管显示.c
* 描述 : 在最右端的三位数码管显示倒计时。
到计时到0时,三个数码管一起闪烁。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i=200;
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//带点数码管的段码编码
uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : DisLED(void)
* 功能 : 三位数码管显示,一共消耗了9毫秒
* 输入 : 无
* 输出 : 无
***********************************************************************/
void DisLED(void)
{
P0 = 0; //消隐
P2 = 5; //第6位数码管显示
P0 = table[(i / 100)%10]; //在这里取 i 的百位数
Delay(3); //延时0.5秒后显示下一个数
P0 = 0; //消隐
P2 = 6; //第7位数码管显示
P0 = table_d[(i / 10)%10]; //在这里取 i 的十位数
Delay(3); //延时0.5秒后显示下一个数
P0 = 0; //消隐
P2 = 7; //第8位数码管显示
P0 = table[i % 10]; //在这里取 i 的个位数
Delay(4); //延时0.5秒后显示下一个数
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar j;
while(1)
{
if(i != 0) //i不等于0,那么 进行数码管的显示,10* 10=100毫秒
{
for(j=0;j<10;j++)
{
DisLED(); //调用数码管显示代码
}
i--;
}
else
{
for(j=0;j<8;j++)
{
DisLED(); //数码管显示
}
P0 = 0x00; //数码管不显示
Delay(200);
}
}
}