《2022年非常详细单片机数码管LED显示电子钟 .pdf》由会员分享,可在线阅读,更多相关《2022年非常详细单片机数码管LED显示电子钟 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机数码管 LED 显示电子钟(C 语言)转载收藏人:shengshiguanjia2010-11-24|阅:862 转:50|来源|分享单片机 数码管 LED 显示电子钟(C 语言)转载2010-10-22 01:32/*标题:数码管显示电子钟(C 语言)*作者:wentao*日期:2007.3.3*软件:Keil C51 V8.02*芯片:AT89X51*说明:实验板实测通过,数码管为 8 位共阳*声明:自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!*/#include#include#define uchar unsigned char voiddelay_ms(uch
2、arms);/延时毫秒 12M,ms 最大值255 voidkey_scan();/按键扫描voidkey_to();/按键处理ucharcodedis_code11=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,/段码表/0 1 2 3 4 对应内容名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf;/5 6 7 8 9 -uchardatadis8;/dis0为秒个位值,dis1为秒十位值/dis2,dis5为-段码的偏移量/dis3为分个位值,dis4为分十位值/dis6为时个位值,
3、dis7为时十位值uchardatasec=0;/秒计数器(00s-59s)uchardatamin=0;/分计数器(00m-59m)uchardatahou=0;/时计数器)00h-23h)uchardatacou =0;/软计数器,对 10ms时基信号累加到 1s uchardatadis_b;/dis_b为位码选通数码管uchardatadis_r;/dis_r 为取段码时的偏移量uchardatakey_v=0;/存储键值uchardatakey_t=0;/按键扫描中临时存储键值voidmain()P2=0 xff;/关所有数码管P1=0 xff;/p1为准双向口,作输入时先写 1 d
4、is2=10;/-在段码表中偏移量为 10 dis5=10;/-在段码表中偏移量为 10 dis_b=0 x7f;/初始选通 P2.7 口数码管 dis_r=0;/初始化偏移量为0 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -TMOD=0 x11;/定时/计数器 0,1 工作于方式 1 TH0=0 xd8;/预置定时常数55536(d8f0),产生 10ms时基信号TL0=0 xf0;TH1=0 xfc;/预置定时常数64536(fc18),产生 1ms间隔用于动态显示TH1=0 x18;EA=1;/开总中断ET0=1;/定时/计数器 0允许中断ET1=1;/定时/
5、计数器 1允许中断TR0=1;/开闭定时/计数器 0 TR1=1;/启动定时/计数器 1 while(1)key_t=P1;/读入键值if(key_t!=key_v)/键值改变 delay_ms(10);/延时10ms消抖 key_t=P1;/再次读入键值if(key_t!=key_v)/键值仍未改变则不是抖动 key_v=key_t;/保存键值 key_to();/键处理 voidkey_to()/按键处理子程序 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -if(key_v=0 xef)/P1.4口键值 if(min=59)/分计数已加到 59 min=0;/清零
6、之else min+;/否则加 1 else if(key_v=0 xdf)/P1.5口键值 if(hou=23)/时计数已加到 23 hou=0;/清零之else hou+;/否则加 1 voidtiem0(void)interrupt1/T/C0中断服务程序(产生 10ms时基信号)cou+;/软计数器加 1 if(cou=100)/计数值到100(1s)cou=0;/软计数器清零 sec+;/秒计数器加 1(进位 10ms*100=1s)if(sec=60)/秒计数值到 60 sec=0;/秒计数器清零 min+;/名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -
7、/分计数器加 1(进位 60s=1m)if(min=60)/分计数到 60 min=0;/分计数器清零 hou+;/时计数器加 1(进位 60m=1h)if(hou=23)/时计数到 23 hou=0;/时计数器清零 TH0=0 xd8;/重置定时常数TL0=0 xf0;voidtime1(void)interrupt3/T/C1中断服务程序(延时 1ms数码管动态显示)dis0=sec%10;/秒计数器个位赋绐 dis0 dis1=sec/10;/秒计数器十位赋绐 dis1 dis3=min%10;/分计数器个位赋绐 dis3 dis4=min/10;/分计数器十位赋绐 dis4 dis6=hou%10;/时计数器个位赋绐 dis6 dis7=hou/10;/时计数器十位赋绐 dis7 P0=dis_codedisdis_r;/段码送 P0口(dis0.dis7)P2=dis_b;/位码送 P2口 dis_r+;/偏移量加 1,下次中断时显示下个数 dis_r&=0 x07;/dis_r增到 8 时自动清 0(使之在 0 到 7 间循环)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -