资源描述:
《单片机数字时钟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单片机电子时钟设计淮安信息职业技术学院电子工程系15077029李典一.题目:单片机电子时钟时钟二.内容:设计一个数字时钟,显示范围为00:00:00~23:59:59。通过几个开关进行控制,其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关K2用于切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过实验箱音频放出一段乐曲作为闹铃。选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能。三.要求:开关K3进行加1调节时,当加至最大值(时为24,分和秒均为60)时要
2、能正常归零。开关K4进行减1调节时,当减至最小值00时,均能再回到从相应最大值(时为23,分、秒均为59)。闹钟乐曲自定。四.电路及功能说明:电路图如图所示:图A图B图C该数字钟是用一片AT89C51A单片机通过编程去驱动8个数码管实现的。通过6个开关控制,从上到下6个开关KEY1~KEY6的功能分别为:KEY1,切换至秒表;KEY2,调节时间,每调一次时加1;KEY3,调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设置状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:A.通过P2口和P3口去控制数码管的显示如图所
3、示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.B.从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。(图A是时钟运行状态,图B是闹钟运行状态,图C是秒表运行状态)功能说明:1.各个控制键的功能:可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对
4、闹钟清零。2.AT89C51单片机,通过编写程序对数码显示进行控制。3.八个7段数码管显示时钟和秒表信号。四.实验程序流程图:1.主程序流程图:2.中断程序流程图1.秒表中断程序流程图:2.按键程序流程图:第一图为时钟和闹钟的调节.第二图为进入中断和清零四.实验结果分析:此时钟设计是利用protues仿真软件进行仿真。基本上实现了要求的功能,该多功能数字钟实现的时钟显示、闹钟设置和秒表功能,校准时钟时只设计了时加键和分加键以及清零键,没有设置减分减时键。可发通过循环调节得到正确的调节数值。另外,要求有一段乐曲来作为闹钟,可这里只是用了一个二级管的发光来实现这个功能。若用一个扬声器和一个乐
5、曲能够实现。七.程序清单:#include#defineucharunsignedchar#defineuintunsignedint#definedelay_time3uchark,dat[]={0,0,0,0,0,0,0,0};uinttcount,t,u;uchardat1[]={0,0,0,0,0,0,0,0};uchardat2[]={0,0,0,0,0,0,0,0};ucharalarms[]={0,0,0,0,0,0,0,0};uchardis_bit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};unsigned
6、charcodeSEG7[11]={0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/0x80,/*8*/0x90,/*9*/0xBF,/*-*/};sbitmiaobiao1=P1^0;sbittminute=P1^1;sbitthour=P1^2;sbitmiaobiao2=P1^3;sbitalarm=P1^4;sbitP0_0=P0^0;sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;ucharms=0;ucharflag=0;ucha
7、rsec=0;ucharminit=0;structtime{ucharsecond;ucharminute;ucharhour;}time1;ucharn,i;voiddelay(n){while(n--){for(i=120;i>0;i--);}}voidmodify(void){EA=0;if(thour==0){if(flag==0){dat1[6]++;delay(180);if(dat1[6]>9){dat1[6]=0;