资源描述:
《基于单片机的电子时钟课程设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于单片机的电子时钟一、系统设计要求1.1基本功能(1)能够显示时分秒(2)能够调整时分秒1.2扩展功能(1)能够任意设置定时时间(2)定时时间到闹铃能够报警(3)实现了秒表功能二、硬件总体设计方案本次设计时钟电路,使用了STC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、显示屏即可满足设计要求。2.1系统功能实现总体设计思路此设计原理框图如图2-1所示,此电路包括
2、以下四个部分:单片机,键盘,闹铃电路及显示电路。闹铃电路51单片机独立键盘数码管显示11图2-1设计原理框图详细元器件列表:STC89c511片八位共阴极数码管1片100p电容6个22uf电容1个30p电容2个10K电阻6个1K电阻560欧姆电阻8个200欧姆电阻1个100欧姆电阻7个按键7个蜂鸣器1个12MHZ晶振1个STC89C51插座1个USB接头1个2.2各部分功能实现(1)单片机发送的信号通过程序控制最终在数码管上显示出来。(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。(3)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显
3、示的时间。(4)单片机通过控制闹铃电路来完成定时闹钟的功能。2.3系统工作原理设计的电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以及校正电路。详细电路功能图下图所示:11详细电路功能图本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。时、分、秒的计数结果经过数据处理可直接送显示器显示。当计时发生误差的时候可以用校时电路进行校正。设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。2.4电路功能使用说明(1)各个控制键的功能:可对时间进行
4、校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。(2)STC89C51单片机,通过编写程序对数码显示进行控制。(3)八个7段数码管显示时钟和秒表信号。11三、软件总体设计方案控制电路的C语言源程序根据流程图,经过认真分析得出控制电路的源程序如下:#include#defineucharunsignedcha
5、r#defineuintunsignedint#definedelay_time3/*宏定义*/uchark,dat[]={0,0,0,0,0,0,0,0};uinttcount,t,u;uchardat1[]={0,0,0,0,0,0,2,1};uchardat2[]={0,0,0,0,0,0,0,0};ucharalarms[]={0,0,0,0,0,0,0,0};uchardis_bit[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};unsignedcharcodeSEG7[11]={0x3F,/*0*/0x06,/*1*
6、/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x40,/*-*/};/*数字显示数组*/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;s=0;w=0;uchars
7、ec=0;ucharminit=0;structtime{ucharsecond;ucharminute;ucharhour;}time1;ucharn,i;voiddelay(n){while(n--){for(i=120;i>0;i--);}}/*延时子程序*/voidmodify(void){11EA=0;if(thour==0){if(flag==0){dat1[6]++;delay(280);if(dat1[6]>9){dat1[6]=0;dat1[7]++;}elseif((dat1[7]>1)&&(dat1[6]>3)){d