单片机数码管动态显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//动态显示
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar aa,shi,fen,miao,shi1,shi2,fen1,fen2,miao1,miao2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();//初始化函数
void display(uchar shi1,uchar shi2,uchar fen1,uchar fen2,uchar miao1,uchar miao2);//显示函数void delay(uint z);//延时函数
void main()//主函数
{
init();
while(1)//等待中断,并不停地动态扫描,定时器的时间到了,则中断发生,然后时间数值变化一次,时间不到则不停动态扫描。
{
shi1=shi/10;//数值变化
shi2=shi%10;
fen1=fen/10;
fen2=fen%10;
miao1=miao/10;
miao2=miao%10;
display(shi1,shi2,fen1,fen2,miao1,miao2);//显示函数
}
}
void delay(uint z)//延时子函数
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()//初始化变量,开启中断
{ shi=0;
fen=0;
miao=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(uchar shi1,uchar shi2,uchar fen1,uchar fen2,uchar miao1,uchar miao2)//显示子函数{
P2=0x02;//位选
P0=table[shi1];//段选
delay(1);
P2=0x03;
P0=table[shi2];
delay(1);
P2=0x04;
P0=table[fen1];
delay(1);
P2=0x05;
P0=table[fen2];
delay(1);
P2=0x06;
P0=table[miao1];
delay(1);
P2=0x07;
P0=table[miao2];
delay(1);
}
void T0_time() interrupt 1 //中断服务程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)//一秒钟
{
aa=0;
miao++;
if(miao==60)//秒钟
{
miao=0;
fen++;
if(fen==60)//分钟
{
fen=0;
shi++;
if(shi==24)//时钟
{
shi=0;
}
}
}
}
}