资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
.#include#define uint unsigned int#define uchar unsigned char#define LED P0 / 数码管的段选#define LIGHT P1 / 时分秒位的指示灯#define WS P2 / 数码管的位选sbit key1=P30; / 时间暂停/开始sbit key2=P31; / 时间/闹钟设置sbit key3=P32; / 增加sbit key4=P33; / 减少sbit alarm=P36; / 闹铃uchar tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; / 0-9uchar tab_dp10=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; / 0.-9.带小数点uchar data1=0,0,0,0,0,0;uchar data2=0,0,0,0,0,0;uint t,k,kk,k1,flag;uint bbh,bbm,bbs,bbh1,bbm1,bbs1;uint sec,min,hour,sec1,min1,hour1; / 定义 秒,分,时void init();void display();void display_bb();void delay( uint );void keyscan();void main() init(); while(1) keyscan();if(k1=0|k1=1|k1=2|k1=3) / 显示调节时间 display(); if(k1=4|k1=5|k1=6) / 显示调节闹钟 display_bb(); if(bbh=hour)&(bbm=min)&data14=0&data15=5) / 5s报时alarm=alarm;delay(1); if(bbs=sec)&(bbm=min)&(bbh=hour) / 可调报时alarm=alarm;delay(1); void init() WS=LIGHT=flag=0; sec=min=hour=0; / 将0赋给时分秒 TMOD=0x01; / 方式1 P129见课本 TH0=0x3c; / 65536-50000=15536=0x3cb0(50ms) P128见课本 TL0=0xb0; EA=1; / 开总中断 P161见课本 TR0=1; / 定时/计数器0开启 ET0=1; / 定时器/计数器0溢出中断启动 P161见课本void delay( unsigned int t) / 延时函数 unsigned int i; while(t-)for(i=0;i125;i+);void display() / 显示时间函数 if(TF0=1) / 定时器/计数器溢出 P130见课本 TF0=0; / 清中断标志位 t+; if(t=20)/ (50ms*20=1s) t=0; sec+; / 秒加1 if(sec=60) / 秒为60,那么清零,分加1 sec=0; min+; if(min=60) / 分为60,那么清零,时加1 min=0; hour+; if(hour=24)/ 时为24,那么清零 hour=0; data15=sec%10; data14=sec/10; data13=min%10; data12=min/10; data11=hour%10; data10=hour/10; WS=0xdf; / 1101 1111 ,低电平显示 LED=tabdata15; delay(1); WS=0xef; / 1110 1111 LED=tabdata14; delay(1); WS=0xf7; / 1111 0111 LED=tab_dpdata13; delay(1); WS=0xfb; / 1111 1011 LED=tabdata12; delay(1); WS=0xfd; / 1111 1101 LED=tab_dpdata11; delay(1); WS=0xfe;/ 1111 1110 LED=tabdata10; delay(1); void display_bb() / 显示闹钟函数 data25=bbs%10; data24=bbs/10; data23=bbm%10; data22=bbm/10; data21=bbh%10; data20=bbh/10; WS=0xdf; / 1101 1111 ,低电平显示 LED=tabdata25; delay(1); WS=0xef; / 1110 1111 LED=tabdata24; delay(1); WS=0xf7; / 1111 0111 LED=tab_dpdata23; delay(1); WS=0xfb; / 1111 1011 LED=tabdata22; delay(1); WS=0xfd; / 1111 1101 LED=tab_dpdata21; delay(1); WS=0xfe;/ 1111 1110 LED=tabdata20; delay(1); void keyscan() / 键盘扫描 if(key1=0) / 暂停/开始 +kk; while(!key1) display(); if(kk=1) TR0=0; if(k1=0|k1=1|k1=2|k1=3) / 显示调节时间 display(); if(k1=4|k1=5|k1=6) / 显示调节闹钟 display_bb(); if(key2=0)/ 模式选择调节时间/闹钟k1+;while(!key2) if(k1=1) / 第1次按下 sec1=sec; / 保存秒的数值 sec=88; / 显示88,表示可以调节秒的数值了 display(); / 显示88 sec=sec1; / 恢复前一刻秒的数值 if(k1=2) min1=min; min=88; display(); delay(1); min=min1; if(k1=3) hour1=hour; hour=88; display(); delay(1); hour=hour1; if(k1=4) sec1=bbs; / 保存秒的数值 bbs=66; / 显示66,表示可以调节秒的数值了 display_bb(); / 显示66 bbs=sec1; / 恢复前一刻秒的数值 if(k1=5) min1=bbm; bbm=66; display_bb(); delay(10); bbm=min1;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号