资源描述:
《数码管时分秒动态显示》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数码管时分秒动态显示1、目的:数码管显示时、分、秒,实现计时功能。2、原理:定时器产生中断,一秒钟计数一次,计数值转换成时、分、秒后,数码管动态显示。3、原理图4、函数思路。单片机工作频率是12MHZ,定时器12分频后累加计数,也就是1us计数一次。定时一秒,定时器装入初值50000,则需进入中断20次,才能实现(50000*20=100000=1s)!数码管动态显示,要求控制显示延时时间和消隐。累计计数转换成时、分、秒,转换思路是计数分割。一分等于60,秒,一小时等于60分。计数累加,计数一次,秒加1,;计数60次,分加1,;计数3
2、600次,时加1.计数86400次,24小时满,而后计数清零。5、程序#include#include//加载头文件#defineucharunsignedchar//宏定义无符号字符型#defineuintunsignedlongint//宏定义无符号长整型uintnum;//定义num和cunt为全局变量,全局更改有效ucharcunt;uchartab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数码管段选编码
3、高电平有效ucharcodetab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//数码管位选编码,低电平有效voiddisplay(uintnum);//显示函数函数声明voiddelay();//延时函数声明voidinit()//中断初始化{TMOD=0x01;//设置定时器T0为16位定时模式TH0=(65535-50000)/256;//T0装入初值50000TL0=(65535-50000)%256;///取整,%取余。0xc350(50000),高八位装入th0中,低八位装入
4、tl0中。EA=1;//开总中断ET0=1;//开定时器中断TR0=1;//启动定时器,定时器开始计数cunt=0;//中断函数标志位初始化num=0;//计数初始化}voidmain()//主函数{init();//函数初始化while(1)//大循环{if(cunt==20)//检测1秒{cunt=0;//中断标志清零num++;//计数加1}if(num>86400)//计数86400次后,计数清零。既是计时24小时后,计时清零num=0;display(num);//时、分、秒显示}}voidtimer0()interrupt
5、1//中断函数{TH0=(65535-50000)/256;//T0装初值,TL0=(65535-50000)%256;cunt++;//每进中断服务程序一次,cunt加1}voiddisplay(uintnum)//数码管动态显示子程序(带参数){ucharhou1,hou2,min1,min2,sec1,sec2;//时、分、秒变量定义sec1=num%10;//计数分割sec2=num%60/10;min1=num%600/60%10;min2=num%3600/600%10;hou1=num/3600%10;hou2=num/
6、36000;P0=tab1[sec1];//P0口段选输出,秒输出P2=tab2[7];//P2口位选输出,选择数码管最低位选通delay();//显示延时P2=0xff;//去消隐P0=tab1[sec2];//秒输出P2=tab2[6];//数码管次低位选通delay();P2=0xff;P0=tab1[min1];//分输出P2=tab2[4];//数码管第三位选通delay();P2=0xff;P0=tab1[min2];//分输出P2=tab2[3];//数码管第四位选通delay();P2=0xff;P0=tab1[hou
7、1];//时输出P2=tab2[1];//数码管次高位选通delay();P2=0xff;P0=tab1[hou2];//时输出P2=tab2[0];//数码管最高位选通delay();P2=0xff;}voiddelay()//延时子程序{ucharx,y;//for循环,空语句延时for(x=100;x>0;x--)//延时1msfor(y=10;y>0;y--);}6、结果显示7、作者不贰过qq:1614154666单片机学习群:164238254