51单片机设置的电子闹钟可调时间与闹钟_第1页
51单片机设置的电子闹钟可调时间与闹钟_第2页
51单片机设置的电子闹钟可调时间与闹钟_第3页
51单片机设置的电子闹钟可调时间与闹钟_第4页
51单片机设置的电子闹钟可调时间与闹钟_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.../#include<reg52.h>#defineuintunsignedint#defineucharunsignedchar#defineLEDP0//数码管的段选#defineLIGHTP1//时分秒位的指示灯#defineWSP2//数码管的位选sbitkey1=P3^0;//时间暂停/开始sbitkey2=P3^1;//时间/闹钟设置sbitkey3=P3^2; //增加sbitkey4=P3^3; //减少sbitalarm=P3^6;//闹铃uchartab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9uchartab_dp[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//0.-9.〔带小数点uchardata1[]={0,0,0,0,0,0};uchardata2[]={0,0,0,0,0,0};uintt,k,kk,k1,flag;uintbbh,bbm,bbs,bbh1,bbm1,bbs1;uintsec,min,hour,sec1,min1,hour1;//定义秒,分,时voidinit<>;voiddisplay<>;voiddisplay_bb<>;voiddelay<uint>;voidkeyscan<>;voidmain<>{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>&&data1[4]==0&&data1[5]==5>//5s报时 { alarm=~alarm; delay<1>; } if<<bbs==sec>&&<bbm==min>&&<bbh==hour>>//可调报时 { alarm=~alarm; delay<1>; }}}voidinit<>{ WS=LIGHT=flag=0; sec=min=hour=0;//将0赋给时分秒 TMOD=0x01;//方式1P129〔见课本 TH0=0x3c;//65536-50000=15536=0x3cb0<50ms>P128〔见课本 TL0=0xb0; EA=1;//开总中断P161〔见课本 TR0=1; //定时/计数器0开启 ET0=1; //定时器/计数器0溢出中断启动P161〔见课本}voiddelay<unsignedintt> //延时函数{unsignedinti;while<t--> for<i=0;i<125;i++>;}voiddisplay<> //显示时间函数{ 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; } }} data1[5]=sec%10; data1[4]=sec/10; data1[3]=min%10; data1[2]=min/10; data1[1]=hour%10; data1[0]=hour/10; WS=0xdf;//11011111,低电平显示 LED=tab[data1[5]]; delay<1>; WS=0xef; //11101111 LED=tab[data1[4]]; delay<1>; WS=0xf7; //11110111 LED=tab_dp[data1[3]]; delay<1>; WS=0xfb; //11111011 LED=tab[data1[2]]; delay<1>; WS=0xfd; //11111101 LED=tab_dp[data1[1]]; delay<1>; WS=0xfe; //11111110 LED=tab[data1[0]]; delay<1>;}voiddisplay_bb<> //显示闹钟函数{ data2[5]=bbs%10; data2[4]=bbs/10; data2[3]=bbm%10; data2[2]=bbm/10; data2[1]=bbh%10; data2[0]=bbh/10; WS=0xdf;//11011111,低电平显示 LED=tab[data2[5]]; delay<1>; WS=0xef; //11101111 LED=tab[data2[4]]; delay<1>; WS=0xf7; //11110111 LED=tab_dp[data2[3]]; delay<1>; WS=0xfb; //11111011 LED=tab[data2[2]]; delay<1>; WS=0xfd; //11111101 LED=tab_dp[data2[1]]; delay<1>; WS=0xfe; //11111110 LED=tab[data2[0]]; delay<1>;}voidkeyscan<> //键盘扫描{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; } if<k1==6> { hour1=bbh; bbh=66; display_bb<>; delay<10>; bbh=hour1; } if<k1==7> { k1=0; display<>; } } } if<key3==0>//时间/闹钟增加设置 { while<!key3> { if<k1==1> { sec++;//秒加1 delay<60>; if<sec==60> sec=0; display<>; } if<k1==2> { min++; delay<60>; if<min==60> min=0; display<>; } if<k1==3> { hour++; delay<60>; if<hour==24> hour=0; display<>; } if<k1==4> { bbs++;//秒加1 delay<60>; if<bbs==60> bbs=0; display_bb<>; } if<k1==5> { bbm++; delay<60>; if<bbm==60> bbm=0; display_bb<>; } if<k1==6> { bbh++; delay<60>; if<bbh==24> bbh=0; display_bb<>; } if<k1==7> { k1=0; display<>; } } } if<key4==0> //时间/闹钟减少设置 { while<!key4> { if<k1==1> { sec--;//秒加1 delay<60>; if<sec==0> sec=60; display<>; } if<k1==2> { min--; delay<60>; if<min==0> min=60; display<>; } if<k1==3> { hour--; delay<60>; if<hou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论