首页 51_52单片机(89c52)数码管时钟程序

51_52单片机(89c52)数码管时钟程序

举报
开通vip

51_52单片机(89c52)数码管时钟程序//52单片机程序 /************************************************************/ /* 数码管时钟89c52 */ /************************************************************/ /*程序可调时间,可设闹钟,数码管共阳驱动。*/ /*功能键K1 K2 K3 K4 功能如下*/ /*K1按一下:(显示)显示正常走时间*/ /*K1按两下:(调时)K2按一下再按K3K4调时间时位...

51_52单片机(89c52)数码管时钟程序
//52单片机程序 /************************************************************/ /* 数码管时钟89c52 */ /************************************************************/ /*程序可调时间,可设闹钟,数码管共阳驱动。*/ /*功能键K1 K2 K3 K4 功能如下*/ /*K1按一下:(显示)显示正常走时间*/ /*K1按两下:(调时)K2按一下再按K3K4调时间时位,K2按两下再按*/ /* K3K4调时间分位,K2按三下再按K3K4调时间秒位*/ /*K1按三下:(显示)显示设置的闹钟时间*/ /*K1按四下:(设闹钟)K2按一下再按K3K4设闹钟时间时位,K2按两*/ /* 下再按K3K4设闹钟时间分位K2按三下再按K3K4设闹钟时间秒位*/ /*K3加键*/ /*K4减键*/ /************************************************************/ /*作者:陈朝宝*/ /*学校:寿宁职业技术学校*/ /*日期:2010年12月22日星期三*/ /************************************************************/ #include #define uchar unsigned char #define uint unsigned int uchar code table[10]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; char hh,mm,ss; char nhh,nmm,nss; uchar n,q; uchar hhs,hhg,mms,mmg,sss,ssg; uchar nhhs,nhhg,nmms,nmmg,nsss,nssg; uchar set,set1=1,set2=0; sbit fm=P2^4; sbit wr=P2^5; sbit dula=P2^6; sbit wela=P2^7; sbit k1=P3^4; sbit k2=P3^5; sbit k3=P3^6; sbit k4=P3^7; void jishi(); void baoshi(); void alarm(); void set_alarm(); //设置闹钟 void k_change(); //K1按键扫描 void set_time(); //设置时间 void k_set(); //K2按键扫描 /************************************************************/ //延时函数 void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } /************************************************************/ //位选通 void wx() { wr=0; wela=0; wr=1; wela=1; } /************************************************************/ //段选通 void dx() { wr=0; dula=0; wr=1; dula=1; } /************************************************************/ //显示函数 void display( ) { if(set1==1)//正常走时显示 { P0=0x7f;wx();P0=table[hhs];dx();delay(1);P0=0xff;dx(); P0=0xbf;wx();P0=table[hhg];dx();delay(1);P0=0xff;dx(); P0=0xdf;wx();P0=0xbf;dx();delay(1);P0=0xff;dx();//显示“-” P0=0xef;wx();P0=table[mms];dx();delay(1);P0=0xff;dx(); P0=0xf7;wx();P0=table[mmg];dx();delay(1);P0=0xff;dx(); P0=0xfb;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xfd;wx();P0=table[sss];dx();delay(1);P0=0xff;dx(); P0=0xfe;wx();P0=table[ssg];dx();delay(1);P0=0xff;dx(); } if(set1==2)//设置时间 { P0=0x7f;wx();P0=table[hhs];dx();delay(1);P0=0xff;dx(); P0=0xbf;wx();P0=table[hhg];dx();delay(1);P0=0xff;dx(); P0=0xdf;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xef;wx();P0=table[mms];dx();delay(1);P0=0xff;dx(); P0=0xf7;wx();P0=table[mmg];dx();delay(1);P0=0xff;dx(); P0=0xfb;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xfd;wx();P0=table[sss];dx();delay(1);P0=0xff;dx(); P0=0xfe;wx();P0=table[ssg];dx();delay(1);P0=0xff;dx(); } if(set1==3)//显示闹钟定时 { P0=0x7f;wx();P0=table[nhhs];dx();delay(1);P0=0xff;dx(); P0=0xbf;wx();P0=table[nhhg];dx();delay(1);P0=0xff;dx(); P0=0xdf;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xef;wx();P0=table[nmms];dx();delay(1);P0=0xff;dx(); P0=0xf7;wx();P0=table[nmmg];dx();delay(1);P0=0xff;dx(); P0=0xfb;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xfd;wx();P0=table[nsss];dx();delay(1);P0=0xff;dx(); P0=0xfe;wx();P0=table[nssg];dx();delay(1);P0=0xff;dx(); } if(set1==4)//设置闹钟 { P0=0x7f;wx();P0=table[nhhs];dx();delay(1);P0=0xff;dx(); P0=0xbf;wx();P0=table[nhhg];dx();delay(1);P0=0xff;dx(); P0=0xdf;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xef;wx();P0=table[nmms];dx();delay(1);P0=0xff;dx(); P0=0xf7;wx();P0=table[nmmg];dx();delay(1);P0=0xff;dx(); P0=0xfb;wx();P0=0xbf;dx();delay(1);P0=0xff;dx(); P0=0xfd;wx();P0=table[nsss];dx();delay(1);P0=0xff;dx(); P0=0xfe;wx();P0=table[nssg];dx();delay(1);P0=0xff;dx(); } { baoshi(); alarm(); } } /************************************************************/ //时间中断函数50ms void T0_time()interrupt 1 { TMOD=0x01; TH0=0x3c; TL0=0xb0; n++; } /************************************************************/ //计时函数 void jishi() { if(n==20) { n=0;ss++; if(ss==60) { ss=0;mm++; if(mm==60) { mm=0;hh++; if(hh==24) {hh=0;} } } } } /************************************************************/ //初始化函数 void init() { TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; } /************************************************************/ //k1按键扫描 void k_change() { if(k1==0) { delay(20); if(k1==0) { set1++; while(!k1); if(set1==5) {set1=1;} } } } /************************************************************/ //k2按键扫描 void k_set() { if(k2==0) { delay(20); if(k2==0) { set2++; while(!k2); if(set2==4) {set2=1;} } } } /************************************************************/ //加一函数 uchar incone(uchar n) { if(k3==0) { delay(20); if(k3==0) { n++; while(!k3); } } return(n); } /************************************************************/ //减一函数 uchar decone(uchar q) { if(k4==0) { delay(20); if(k4==0) { q--; while(!k4); if(q<0) { q=0; } } } return(q); } /************************************************************/ //设置时间函数 void set_time() { if(set1==2) { if(set2==1) { hh=incone(hh); if(hh==24) {hh=0;} if(hh==-1) {hh=23;} hh=decone(hh); } if(set2==2) { mm=incone(mm); if(mm==60) {mm=0;} if(mm==-1) {mm=59;} mm=decone(mm); } if(set2==3) { ss=incone(ss); if(ss==60) {ss=0;} if(ss==-1) {ss=59;} ss=decone(ss); } } } /************************************************************/ //整点报时函数 void baoshi() { if(hh>>0&&mm==00&&ss==00) {fm=1;} else {fm=0;} } /************************************************************/ //闹钟函数 void alarm() { uchar x; if(nhh==0&&nmm==0&&nss==0) {goto end;} if(nhh==hh&&nmm==mm&&nss==ss) { for(x=0;x<6;x++) { fm=1;delay(15);fm=0;delay(10); fm=1;delay(15);fm=0;delay(10); fm=1;delay(15);fm=0;delay(10); fm=1;delay(15);fm=0;delay(90); } } end:; } /************************************************************/ //设置闹钟函数 void set_alarm() { if(set1==4) { if(set2==1) { nhh=incone(nhh); if(nhh==24) {nhh=0;} nhh=decone(nhh); if(nhh==-1) {nhh=23;} } if(set2==2) { nmm=incone(nmm); if(nmm==60) {nmm=0;} nmm=decone(nmm); if(nmm==-1) {nmm=59;} } if(set2==3) { nss=incone(nss); if(nss==60) {nss=0;} nss=decone(nss); if(nss==-1) {nss=59;} } } } /************************************************************/ //主函数 void main() { init(); hh=00;mm=59;ss=55; nhh=01;nmm=00;nss=5; while(1) { hhs=hh/10; hhg=hh%10; mms=mm/10; mmg=mm%10; sss=ss/10; ssg=ss%10; nhhs=nhh/10; nhhg=nhh%10; nmms=nmm/10; nmmg=nmm%10; nsss=nss/10; nssg=nss%10; k_change(); k_set(); set_time(); set_alarm(); display(); jishi(); } } /************************************************************/
本文档为【51_52单片机(89c52)数码管时钟程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_633423
暂无简介~
格式:doc
大小:39KB
软件:Word
页数:21
分类:互联网
上传时间:2019-02-17
浏览量:124