首页 > 编程知识 正文

单片机四位数码管倒计时程序,四位数码管时钟程序

时间:2023-05-06 07:18:19 阅读:111190 作者:3125

定时器/计数器中断和动态8段制作秒表目录,定时器/计数器中断和动态8段制作秒表1 .考虑定时器数码管2 .主要代码说明3 .参考所有代码。 (代码写得不好,等待您的建议。 )

学习一下,简单地将计时器中断和数码管的动态显示结合起来吧。

1 .考虑使用计时器计数,在数码管上显示秒数的变化。

计时器

数字代码

2 .主要代码解说void main () ) {u16 a; a=0; Time0Init (; //定时器0中断的初始化操作while(1) if ) I==1000 )//设定一次中断为1ms,1000次为1s ) I=0; //清除计数I,便于下一秒计数1000次的led=~led //,起到提示作用; //累计秒数(elseif(I%==0)每25ms刷新一次) fenbian ) a ); //数码管显示函数}3.所有代码参考(代码写得不好,等待您的建议) includere g51.htypedefunsignedcharu 8; typedef unsigned int u16; sbit led=P2^0; 静态u16 I; 静态u16a; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[]={0x4f、0x3f、0x06、0x5b、0x4f、0x66、0x7d、0x7d、0x07、0x7f、0x6f}; voiddelay(U16I ) {while(I--}; }void Time0Init () ) {TMOD|=0x01; TH0=0xFC; TL0=0x66; TR0=1; ET0=1; EA=1; }voidfenBian(U16a ) {int b; int c; if(a10 ) {LSC=0; LSB=0; LSA=0; 延迟(100; sitch(a ) case) :P0=smgduan[0]; 延迟(100; 布雷克; case(1) :P0=smgduan[1]; 延迟(100; 布雷克; case(2) :P0=smgduan[2]; 延迟(100; 布雷克; case(3) :P0=smgduan[3]; 延迟(100; 布雷克; case(4) :p0=SMGDuan(4); 延迟(100; 布雷克; case(5) :p0=SMGDuan(5); 延迟(100; 布雷克; case(6) :P0=smgduan[6]; 延迟(100; 布雷克; case(7) :p0=SMGDuan(7); 延迟(100; 布雷克; case(8) :p0=SMGDuan(8); 延迟(100; 布雷克; case(9) :p0=SMGDuan(9); 延迟(100; 布雷克; (}P0=0x00; }elseif(a=10a100 ) {LSC=0; LSB=0; LSA=0; b=a/1; switch(b ) case) :P0=smgduan[0]; 延迟(100; 布雷克; case(1) :P0=smgduan[1]; 延迟(100; 布雷克; case(2) :P0=smgduan[2]; 延迟(100; 布雷克; case(3) :P0=smgduan[3]; 延迟(100; 布雷克; case(4) :p0=SMGDuan(4); 延迟(100; 布雷克; case(5) :p0=SMGDuan(5); 延迟(100; 布雷克; case(6) :P0=smgduan[6]; 延迟(100; 布雷克; case(7) :p0=SMGDuan(7); 延迟(100; 布雷克; case(8) :p0=SMGDuan(8); 延迟(100; 布雷克; case(9) :p0=SMGDuan(9); 延迟(100; 布雷克; (}P0=0x00; LSC=0; LSB=0; LSA=1; c=a/10; switch(c ) case) :P0=smgduan[0]; 延迟(100; 布雷克; case(1) :P0=smgduan[1]; 延迟(100; 布雷克; case(2) :P0=smgduan[2]; 延迟(100; 布雷克; case(3) :P0=smgduan[3]; 延迟(100; 布雷克; case(4) :p0=SMGDuan(4); 延迟(100; 布雷克; case(5) :p0=SMGDuan(5); 延迟(100; 布雷克; case(6) :P0=smgduan[6]; 延迟(100; 布雷克; case(7) :p0=SMGDuan(7); 延迟(100; 布雷克; case(8) :p0=SMGDuan(8); 延迟(100; 布雷克; case(9) :p0=SMGDuan(9); 延迟(100; 布雷克; (}P0=0x00; }}void main () {u16 a; a=0; Time0Init (; wile(1) if ) I==1000 ) I=0; led=~led; a; }elseif(I%==0) fenBian ) a; }//中断函数,但计数准确的voidtime0(interrupt1) th0=0xfc; TL0=0x66; I; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。