开发工具:
文件大小: 41kb
下载次数: 0
上传时间: 2012-02-05
详细说明:
/*********************************************************** 实验名称:可调电子钟(数码管显示)示例程序 程序说明:按键S1切换时分秒,按下S6加一,按下S3减一 ***********************************************************/ #include unsigned char code SEG7[11]={0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xbf,/*-*/ }; unsigned short int tcount; struct time { unsigned char second; unsigned char minute; unsigned char hour; }time1; /***************************************/ /* 延时子程序 */ /***************************************/ void delay(k) unsigned int k; { unsigned char j; while((k--)!=0) for(j=0;j<125;j++); } /***************************************/ /* 时钟调整子程序 */ /***************************************/ TimeUpDown(n,x,y) unsigned char n,x,y; { if(P3_2==0) { delay(50); if(P3_2==0) { n++; if(n==x) n=0; while(P3_2==0); } } if(P3_3==0) { delay(50); if(P3_3==0) { if(n==0) n=y; else n--; while(P3_3==0); } } return n; } /***************************************/ /* 显示子程序 */ /***************************************/ void display(DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL) unsigned char DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL; { P0=SEG7[DisSecondH]; //显示秒钟的十位 P2=0xfe; delay(2); P0=SEG7[DisSecondL]; //显示分钟的个位 P2=0xfd; delay(2); P0=0xbf; //显示- P2=0xfb; delay(2); P0=SEG7[DisMinutH]; //显示秒钟的十位 P2=0xf7; delay(2); P0=SEG7[DisMinutL]; //显示分钟的个位 P2=0xef; delay(2); P0=0xbf; //显示- P2=0xdf; delay(2); P0=SEG7[DisHourH]; //显示小时的个位 P2=0xbf; delay(2); P0=SEG7[DisHourL]; //显示小时的十位 P2=0x7f; delay(2); } /***************************************/ /* 主程序 */ /***************************************/ main() { unsigned char Flag; TMOD = 0x01; TH0 = (65536-63000)/256; TL0 = (65536-60000)%6; ET0 = 1; EA = 1; while(1) { if(P3_4 == 0) //设置标志位 Flag { delay(50); if(P3_4 == 0) { TR0 = 0; Flag++; if(Flag > 3) Flag = 0; } while(P3_4== 0); } switch(Flag) { case 0: TR0=1; display(time1.second,time1.second/10,time1.minute,time1.minute/10,time1.hour,time1.hour/10); break; case 1: //时钟小时调整 TR0=0; time1.hour=TimeUpDown(time1.hour,24,23); display(10,10,10,10,time1.hour,time1.hour/10); break; case 2: //时钟分钟调整 time1.minute=TimeUpDown(time1.minute,60,59); display(10,10,time1.minute,time1.minute/10,10,10); break; case 3: //时钟秒调整 time1.second=TimeUpDown(time1.second,60,59); display(time1.second,time1.second/10,10,10,10,10); break; default: break; } } } /***************************************/ /* 中断子程序 */ /***************************************/ void t0(void) interrupt 1 using 0 { tcount++; if(tcount==10) { tcount=0; time1.second++; } if (time1.second>=60) { time1.second=0; time1.minute++; } if (time1.minute>=60) { time1.minute=0; time1.hour++; } if(time1.hour>=24) time1.hour=0; TH0=(65536-63000)/256; TL0=(65536-60000)%6; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.