《基于51单片机的简易电子时钟.doc》由会员分享,可在线阅读,更多相关《基于51单片机的简易电子时钟.doc(30页珍藏版)》请在课桌文档上搜索。
1、-基于51单片机的简易电子时钟设计摘要今天,电子时钟是生活中不可或缺的一局部。电子时钟通过数码管显示,具有整点报时等功能,可以使得我们的生活变得更加有序。电子时钟也通过不断地改良,变得功能越来越强大。本次设计的电子时钟利用单片机STC89C51进展控制的,利用单片机自身的定时器功能,采用数码管显示,可对电子时钟进展调整校准。此设计具有相当重要的现实意义和实用价值。基于单片机STC89C51的电子时钟,采用数码管显示时分秒而且可用按键进展调整校准。此次设计与传统的机械表相比,它具有走的更精准,显示更直观等特点,而且单片机的数字时钟具有灵活编程,便于功能扩大等特点。本次所设计主要有三个模块:显示模
2、块,按键模块,闹铃模块。该时钟采用STC89C51单片机自身定时器进展计时,按键模块采用独立式键盘4个按键,闹铃局部由8550三极管和蜂鸣器构成,显示时、分、秒用两个四位共阴极数码管显示,具有可调整时间功能和设定闹钟功能,在设计过程中硬件和软件应同时进展。关键词:电子时钟,单片机,闹钟,蜂鸣器SIMPLE ELECTRONIC CLOCK DESIGN BASED ON 51 MCUABSTRACTToday , the electronic clock is an integral part of life . Through the digital display electronic c
3、lock , with the whole point timekeeping function , can make our life more orderly . The electronic clock also through continuous improvement , has bee more and more powerful .The design of the electronic clock using STC89C51 MCU to control the use of single-chip , self timer function , the use of di
4、gital tube display , can adjust the calibration of the electronic clock . Has very important realistic significance and practical value of this design .The electronic clock based on MCU STC89C51 , using digital tube display when seconds and the button can be used to adjust the calibration . And the
5、design of the traditional mechanical watch , it has to go more accurate , more intuitive display characteristics , and the digital clock has flexible programming , easy to function expansion and so on .This design has three main modules : the display module , keyboard module , alarm module . The clo
6、ck uses STC89C51 microcontroller timer timing , key module with separate keyboard (4 buttons), the alarm is posed of 8550 transistors and a buzzer , when the display is divided by two seconds , four mon cathode digital display , which can adjust the time and set the alarm function , hardware and sof
7、tware in the design process should be carried out at the same time .Key Words : electronic clock , microcontroller , alarm clock , a buzzer. z.-目录第一章绪论21.1 课题背景及意义21.2 课题容21.2.1 题目及要求21.2.2 主要局部2第二章方案22.1 功能要求22.3 数码管显示方案2第三章电子时钟的硬件设计23.1 电子时钟的组成23.2 单片机最小系统图23.3 STC89C51引脚功能23.4 数码管显示模块23.5 闹铃局部23.
8、6 按键模块2第四章电子时钟的软件设计24.1 电子时钟程序流程框图24.2 按键调整流程图24.3 子程序的设计24.3.1 数码管显示模块24.3.2 按键子模块24.3.3 主程序2第五章硬件的制作与测试分析25.1 电子时钟的硬件制作25.2 硬件测试25.3 软件调试25.4 测试结果分析与结论25.4.1 数码管测试结果分析25.4.2 按键测试结论2测试结论2总结与致2参考文献2附录2附录一分组表2附录二程序2附录三电子时钟实物图2. z.-第一章绪论1.1 课题背景及意义二十一世纪的今天,电子时钟已经融入到千千万万户家庭中,它已经成为了人们生活中不可或缺的一局部。电子时钟通过数
9、码管显示,使其直观明了,更能实现整点报时等功能,使其更符合当今人们的生活需求,电子时钟的出现使人们的生活更加的有条不紊。目前市场上的电子时钟很多,为了迎合市场的需要,满足广阔的消费人群,人们通过自己的DIY设计让电子时钟富有创意。电子时钟通过不断地改良,使其更具有市场。本次设计的电子时钟利用单片机STC89C51进展控制的,利用单片机自身的定时器功能,采用数码管显示,可对电子时钟进展调整校准。电子时钟既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。1.2 课题容1.2.1 题目及要
10、求基于51单片机的电子时钟设计与制作。利用单片机的计时、校时等功能,设计并制作出一个以单片机STC89C51为核心组件,采用数码管显示时分秒的电子时钟,要求能正常显示,并可用按键进展调整校准。此次设计与传统的机械表相比,它具有走的更精准,显示更直观等特点,同时具有不同的操作方式,让此次设计更符合现代生活的需求,而且单片机的数字时钟具有编程灵活,便于功能扩大等特点。1.2.2 主要局部本次设计可分为两局部:软件局部、硬件局部。硬件局部包括: STC89C51单片机模块,数码管模块,蜂鸣器模块,按键模块,闹铃模块。通过正确连接电路以及单片机的编程来实现上述要求。软件局部的主程序包括:数码管显示程序
11、,按键控制程序。使其实现时分秒正常显示,并可通过按键进展调试功能。第二章方案2.1 功能要求1、能显示时、分、秒2、通过按键可以对电子时钟进展调整校准3、可实现设定闹钟并报警功能4、上电后,电子钟显示12-59-00,蜂鸣器同时发出声音2.2 数字时钟方案在本次设计中,数字时钟是最主要的局部:采用单片机本身的定时器进展计时,来实现数字时钟功能。原理为:在单片机部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器相应的秒值加1;假设秒值到达60,那么将其清零,并将相应的分字节值加1;假设分值到达60,那么清零分字节,并将时字节值加1;假设时
12、值到达24,那么将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。2.3 数码管显示方案采用动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。第三章电子时钟的硬件设计3.1 电子时钟的组成本次设计制作的电子时钟组成局
13、部为:STC89C51主控制模块,按键模块,复位电路,数码管显示模块,闹铃模块。组成图如图3-1所示。闹铃模块按键模块STC89C51主控制模块数码管显示模块复位电路图3.1 电子时钟系统组成3.2 单片机最小系统图单片机最小系统又称为最小应用系统,即用最少的元器件组成单片机可以工作的系统。一般应包括:电源、单片机、晶振电路、复位电路等。如图3.2所示为单片机最小系统图。图3.2 单片机最小系统图3.3 STC89C51引脚功能图3.3 STC89C51引脚如图3.3所示,STC89C51主要管脚有:XTAL119 脚和XTAL218 脚为振荡器输入输出端口,外接12MHz 晶振。RST/Vp
14、d9 脚为复位输入端口,外接电阻电容组成的复位电路。VCC40 脚和VSS20 脚为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口3239 脚被定义为功能控制端口,分别与其相应功能管脚相连接,13 脚定义为IR输入端。3.4 数码管显示模块图3.4 数码管显示模块如图3.4所示,在这次的设计中,数码管接在单片机的P0和P2口,P0控制段选信号,P2控制位选信号。通过位选信号依次点亮各个数码管,由于人眼有视觉暂留的特性,因此如果第一个数码管灭和第二个数码管亮之间的时间足够短,人眼是感觉不出数码管的变化的。3.5 闹铃局部图3.5
15、 闹铃图闹铃如下列图3.5所示,主要由8550三极管和蜂鸣器构成,可通过手动设置来实现闹铃功能。3.6 按键模块如图3.6所示,本次设计是采用四个独立式按键,分别为时间设置键,闹钟设置键,+键,-键,通过这四个按键来调整电子时钟的时间显示和闹钟响应。时间设置闹钟设置+-图3.6按键图第四章电子时钟的软件设计本次设计主要是对单片机,数码管,按键和闹铃局部进展编写的。4.1 电子时钟程序流程框图开场初始化单片机、数码管、按键等数码管固定显示扫描按键、遥控器扫描,数码管正常显示调用时间,设置子程序刷新正常时间显示图4.1 系统程序流程框图本次的设计主程序是根据每个模块的特性来进展编写,先对各个模块进
16、展初始化,然后再按照各自不同来分模块编写,最后得出总的流程图。4.2 按键调整流程图开场设置键1按下1次,进入时调整等待按键程序加键有效减键有效时加1时减1设置1键按下2次,进入分调整等待按键程序加键有效减键有效分加1分减1设置1键按下3次,进入秒调整等待按键程序加键有效减键有效秒加1秒减1设置2键按下1次,进入闹钟时设置等待按键程序加键有效减键有效时设定加1时设定减1设置2键按下2次,进入闹钟分调整等待按键程序加键有效减键有效分设定加1分设定减1图4.2 按键调整流程图进入程序后,先将单片机,数码管,按键等进展初始化,数码管显示固定数值12-59-00,程序开场等待按键按下,当有按键按下,单
17、片机检测一次,确定按下,单片机调用程序,同时数码管刷新一次,显示当前操作结果。完后,程序返回按键等待,如此循环执行。4.3 子程序的设计4.3.1 数码管显示模块4位独立数码管显示,电路相对简单,主要特点,简单易用,显示清晰,性价比高。数码管显示程序:见附录2.14.3.2 按键子模块本次设计是采用四个独立式按键,分别为设置键,+键,-键,复位键,通过这四个按键来调整电子时钟的时间显示和闹钟响应。按键操作子程序:见附录2.2图4.3按键抖动新号波形当用手按下一个键时,如图4.3所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。
18、抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。此次设计过程中电路的工作原理:数字电子钟是一个将时,分,秒显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。因此,一个根本的数字钟电路主要由显示器时,分,秒和单片机,还有校时电路组成。8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作,将标准秒信号送入秒单元,秒单元采用60进制计数器,
19、每累计60秒发出一个分脉冲信号,该信号将作为分单元的时钟脉冲。分单元也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时单元。时单元采用24进制计时器,可实现对一天24小时的累计。显示电路将时、分、秒通过七段显示器显示出来。校时电路时用来对时、分、秒显示数字进展校对调整,按一下设置键进入时设置,按下+时加一次,按下-键,时减一次,同理,按设置键两次即进展分调整,按下三次进展秒调整。4.3.3 主程序见附录2.3第5章 硬件的制作与测试分析5.1 电子时钟的硬件制作此次的电子时钟是根据所设计的原理图,把每个局部都焊接好,连接起来,然后接入电源,上电,最后将所编写的程序烧入单
20、片机中。5.2 硬件测试电子时钟的硬件相对简单,只用几个模块构成,但在检查电路的时候容易因掉以轻心而出错,主要检查电路连接是否有短路或者短路现象通过万用表检测,元器件的型号和规格是否使用合理。其次,检测电源。检测方法:一种是断开稳压电源的输出端,检查空载时电源工作情况;另一种是拔下电源上的主要集成芯片,检查电源的负载能力用假负载,确保电源无故障并性能符合设计要求。检测完电路,确保其不发生电路故障的前提下才可上电。5.3 软件调试电子时钟虽然看着硬件比拟少,但是写起程序来并非那么简单,在设计阶段,因为我们是刚入手单片机没多久的,所以对挺多的程序并不是很了解,我们查阅了很多资料,研究了很多关于按键
21、,数码管等方面的容,我们通过参考察阅到的资料,根据自己的删改添加终于完成了自己的程序。在电子时钟的程序设计阶段,让数码管显示12-59-00,由于对十六进制不够熟练,所以在实现显示的时候总是出现乱码,后面静下心慢慢算,终于能够正常显示,不过只是实现数码管的静态显示,动态显示才是关键,通过我们在课上讲的数码管累加计时,仿照其原理,通过改良,也实现了动态显示。在按键方面,按键因为是独立的,所以我一个个按键的功能慢慢实现,先做加减后做调整和复位,刚开场做按键的时候因为考虑的不够全面,虽然按键能够实现加减,但是出现按一次跳很屡次的现象,经过查找资料并观看视频,原来按下去的时候会出现所谓的抖动,这时候就
22、需要多添加几句程序来进展消抖,最终数码管才正常加减,同样道理实现选择位跟复位功能,在一步步添加程序的同时也一步步地掌握了按键的使用方法。5.4 测试结果分析与结论5.4.1 数码管测试结果分析数码管主要是分清楚共阴还是共阳,在写程序的时候一定要注意,通过肉眼看数码管是否出现亮度不够判断其电路是否供电异常或者程序占用太多CPU,进展电路调整及程序修改,让数码管正常显示。5.4.2 按键测试结论在对按键进展测试的时候主要出现按键按下去有时候会出现连续加跟连续减的现象,经过查找相关资料,原来按键按下去的时候会出现抖动,所以我们就要在程序中进展删改,做消抖处理。测试结论经过屡次的反复测试,分析跟修改,
23、程序越来越完善,我也对电路的原理跟功能更加熟悉,同时在编程方面也更加的熟练,很多平时教师没有教到的知识我通过自学,也都能根本掌握,可说在编程上得到了很大的提高,以及对所学的知识也得到很大的稳固。调试展示如下5.1图所示:图5.1 调试展示图总结与致在这2016年的年末,经过我们的努力,我们圆满的完成了本学期的课程设计。此次我们的课程设计是微机原理与单片机接口技术课程设计,而我们小组做的是基于51单片机的简易电子时钟设计。电子时钟与我们的生活息息相关,尽管它作为我们的日常用品,但说实话我们对其很不了解。这种很熟悉却又很遥远的感觉激发了我的求知欲望。经过我们认真的查阅资料,我们了解了电子时钟和51
24、单片机的原理以及如何使用51单片机设计电子时钟。然后我们开场设计属于我们自己的电子时钟,我们通过仿真软件设计了原理图,编写了C语言程序。本次课程设计我和另外两位同学主要负责硬件局部,即按照原理图购置和焊接实物电路并烧写单片机和最后调试。这真正做之前我感觉并不难,但是真正上手之后却是错漏百出。比方我们在焊接排阻时,由于不仔细没有注意到它的极性,最后才发现焊反了,还有局部地方存在虚焊等问题。虽然最后在大家的努力下一一得以解决,但是这也说明我们还存在很多问题。类似于对原理不是特别懂,还有就是粗心不仔细,再就是动手能力极差。看的时候感觉很简单,但是自己动手焊接时却发现非常不容易。总而言之,通过这次课程
25、设计我感觉收获颇丰。不仅仅是学习能力的提升,还有动手能力的提升,更重要的是收获了一份钻研精神以及一种不畏困难勇往直前的勇气!参考文献1郭天祥.新概念51单片机C语言教程M.:电子工业,20092靖武,周灵斌.单片机原理、应用与PROTEUS仿真M.:电子工业,20083道德.单片机接口技术M.:中国水利水电,2007附录附录一分组表任务/人设计电路编写程序焊接烧写调试备注焊接烧写焊接烧写焊接烧写总体电路设计总体程序编写数码管显示模块程序设计按键模块程序设计复位模块与电源开关模块数码显示模块和蜂鸣器电路模块晶振电路模块和单片机电路模块附录二程序数码管显示程序:void display(void)
26、P0=ledhour/10; /p0口送数据拆数显示P2=0xFE; /片选delay(); /延时P2=0xFF; /片选关P0=ledhour%10;P2=0xFD;delay();P2=0xFF;P0=0x40;P2=0xFB;delay();P2=0xFF;P0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;P0=0x40;P2=0xDF;delay();P2=0xFF;P0=ledsecond/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond%10;P
27、2=0x7F;delay();P2=0xFF;按键操作子程序:void display(void)P0=ledhour/10; /p0口送数据拆数显示P2=0xFE; /片选delay(); /延时P2=0xFF; /片选关P0=ledhour%10;P2=0xFD;delay();P2=0xFF;P0=0x40;P2=0xFB;delay();P2=0xFF;P0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;P0=0x40;P2=0xDF;delay();P2=0xFF;P0=ledse
28、cond/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond%10;P2=0x7F;delay();P2=0xFF;void Keykonzhi()if(time=0) /键盘时间设定键按下delay();delay();if(time=0)while(!time);timenum1+; /标记+TR1=0;f2=0;if(timenum1=1) /如果timenum1=1 调时dsflg=0;st=0;if(add=0) /加键按下delay();delay();if(add=0)while(!add); /松手检测hour+; /小时+if(dec=0)/减键按
29、下delay();delay();if(dec=0)while(!dec); /松手检测hour-; /小时-if(hour23) /限位hour=0;P0=ledhour/10;/显示小时函数P2=0xFE;delay();P2=0xFF;P0=ledhour%10; /显示小时函数P2=0xFD;delay();P2=0xFF;if(timenum1=2) /如果timenum1=2调分/以下也是和调时一样的方法dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);minit+;if(dec=0)delay();delay()
30、;if(dec=0)while(!dec);minit-;if(minit60)minit=0;P0=ledminit/10;P2=0xF7;delay();P2=0xFF;P0=ledminit%10;P2=0xEF;delay();P2=0xFF;if(timenum1=3)/如果timenum1=3 调秒dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);second+;if(dec=0)delay();delay();if(dec=0)while(!dec);second-;if(second60)second=0;P0
31、=ledsecond/10;P2=0xBF;delay();P2=0xFF;P0=ledsecond%10;P2=0x7F;delay();P2=0xFF;if(timenum1=4) /如果timenum1=4 退出TR1=1;timenum1=0;dsflg=1;f2=1;st=1;void almset()timenum1=0;if(timer=0) /键盘上的闹钟键按下delay();delay();if(timer=0)while(!timer); /松手timenum2+; /标记+f1=0;if(timenum2=1)/如果timenum2=1设定脑钟的小时dsflg=0;st=
32、0;if(add=0) /加键按下delay();delay();if(add=0)while(!add);/松手hour1+;/小时+if(dec=0) /减键按下delay();delay();if(dec=0)while(!dec);/松手hour1-; /小时-if(hour123) /限位hour1=0;P0=ledhour1/10;/小时显示P2=0xFE;delay();P2=0xFF;P0=ledhour1%10;P2=0xFD;delay();P2=0xFF;P0=0x77; /显示一P2=0xBF;delay();P2=0xFF; /显示一P0=0x38;P2=0x7F;d
33、elay();P2=0xFF;if(timenum2=2) /如果timenum2=1设定脑钟的分钟和上面小时一样dsflg=0;st=0;if(add=0)delay();delay();if(add=0)while(!add);minit1+;if(dec=0)delay();delay();if(dec=0)while(!dec);minit1-;if(minit160)minit1=0;P0=ledminit1/10;P2=0xF7;delay();P2=0xFF;P0=ledminit1%10;P2=0xEF;delay();P2=0xFF;P0=0x77;P2=0xBF;delay
34、();P2=0xFF;P0=0x38;P2=0x7F;delay();P2=0xFF;if(timenum2=3)/如果timenum2=3退出timenum2=0;dsflg=1;f1=1;st=1;主程序:void main(void)second=59; /时间初始化为00:00:00minit=59;hour=13;second1=0;/闹钟默认为12:00:00minit1=05;hour1=14;count0=0x00;count1=0x00;timenum1=0;f1=1;f2=1;dsflg=1;m=0;f=0;st=1;P1=0xFF;TMOD=0x11;TL1=tl;TH1
35、=th;EA=1;TR1=1;ET1=1;IT1=1;TH0=0;TL0=0;TR0=1; EX1=1;while(1)if(zhengdian=1) speaker=0;delay1(1);speaker=1;delay1(1);if(f1=1)Keykonzhi ();if(f2=1)almset();almkozi();if(dsflg=1)display();if(st=1)if(add=0)delay();delay();if(add=0)while(!add);second=00; /时间初始化为00:00:00minit=00;hour=00;附录三电子时钟实物图实物图a实物图b. z.