1、郑重申明本人呈交的毕业实习报告(设计),是在导师的指导下,独立进行实习和研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本毕业实习报告(设计)的成果不包含别人享有著作权的内容。对本毕业实习报告(设计)所涉及的实习和研究工作做出奉献的其他个人和集体,均已在文中以明确的方式标明。本毕业实习报告(设计)的知识产权归属于作者与培养单位。学生署名日期0000.00摘要该电子时钟是采用STC89C52单片机进行的电子时钟设计,其设计涉及:显示模块,按键模块,闹铃模块,无线接受模块。时钟采用STC89C52单片机自身定期器进行计时,按键模块采用独立式键盘(4个按键),
2、闹铃部分由8550三极管和蜂鸣器构成,无线接受模块采用1838接受窗,显示时、分、秒用8位数码管显示,具有可调整时间功能,在设计过程中硬件和软件应同时进行。关键词:电子时钟 单片机 闹钟 蜂鸣器目录1绪论1.1课题背景及意义51.2课题内容52方案论证2.1功能规定72.2数字时钟方案论证与比较72.3数码管显示方案论证与比较83.电子时钟的硬件设计3.1电子时钟的组成93.2单片机最小系统图93.3 STC89C52引脚功能103.4数码显示模块113.5闹铃部分113.6按键模块124电子时钟的软件设计4.1电子时钟程序流程框图144.2按键调整流程图164.3子程序的设计174.4.1数
3、码管显示模块174.4.2按键子模块184.4.3 主程序345硬件的制作与测试分析5.1电子时钟的硬件制作375.2硬件测试374.3软件调试375.4测试结果分析与结论385.4.1 数码管测试结果分析385.4.2按键测试结论385.4.3测试结论39结论 40参考文献 421论述 1.1课题背景及意义二十一世纪的今天,电子时钟已经融入到千千万万户家庭中,它已经成为了人们生活中不可或缺的一部分。电子时钟通过数码管显示,使其直观明了,更能实现整点报时,遥控控制等功能,使其更符合当今人们的生活需求,电子时钟的出现使人们的生活更加的有条不紊。目前市场上的电子时钟很多,为了迎合市场的需要,满足广
4、大的消费人群,人们通过自己的DIY设计让电子时钟富有创意。电子时钟通过不断地改善,使其更具有市场。本次设计的电子时钟运用单片机STC89C52进行控制的,运用单片机自身的定期器功能,外加遥控器进行控制,采用数码管显示,可对电子时钟进行调整校准。电子时钟既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、公司、商店等相关行业的大厅,以及单位会议室、门卫等场合。因而,此设计具有相称重要的现实意义和实用价值。1.2课题内容本次设计的题目是:基于51单片机的电子时钟设计与制作。运用单片机的计时、校时等功能,设计并制作出一个以单片机STC89C52为核心组件,采用数码管显示“时“分“秒”的电子时
5、钟,规定能正常显示,并可用按键进行调整校准以及用遥控器进行相同操作。本次设计与传统的机械表相比,它具有走的更精确,显示更直观等特点,同时具有不同的操作方式,让本次设计更符合现代生活的需求,并且单片机的数字时钟具有编程灵活,便于功能扩充等特点。本次设计可分为两部分:软件部分、硬件部分。硬件部分涉及: STC89C52单片机模块,数码管模块,蜂鸣器模块,按键模块,闹铃模块。通过对的连接电路以及单片机的编程来实现上述规定。软件部分的主程序涉及:数码管显示程序,按键控制程序,遥控器操作程序。使其实现时分秒正常显示,并可通过按键以及遥控器进行调试功能。2方案论证2.1功能规定1、能显示时、分、秒2、通过
6、按键可以对电子时钟进行调整校准3、通过遥控器可对电子时钟进行调整校准4、可实现设定闹钟并报警功能5、上电后,电子钟显示“14-00-00”,蜂鸣器同时发出声音2.2数字时钟方案论证与比较在本次设计中,数字时钟是最重要的部分,根据本次设计的需要,可运用两种方案实现。方案一:采用时钟芯片DS12887A进行控制时,由于该芯片具有完备的时钟闹钟功能,所以可以直接用它来进行显示或设立,这样可以让软件的编程相对简朴。并且为了保证时钟在电网电压局限性或忽然断电的情况下仍能正常工作,芯片内部自身就包含锂电池,当电网电压局限性或者忽然掉电的时候,系统会自动转换到内部锂电池供电系统,并且即使系统不上电,程序不执
7、行时,锂电池也能保证芯片的正常运营,以备随时提供对的的时间。方案二:采用单片机自身的定期器进行计时,来实现数字时钟功能。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。运用定期器与软件结合实现1秒定期中断,每产生一次中断,存储器内相应的秒值加1;若秒值达成60,则将其清零,并将相应的分字节值加1;若分值达成60,则清零分字节,并将时字节值加1;若时值达成24,则将十字节清零。该方案具有硬件电路简朴的特点。但由于每次执行程序时,定期器都要重新赋初值,所以该时钟精度不高。并且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。 基于硬件电路的考虑,本设计采用方案二完毕数
8、字时钟的功能。2.3数码管显示方案论证与比较方案一:采用静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,导致了资源的浪费。方案二: 采用动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。运用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节
9、省了I/O口,减少了能耗。从节省I/O口和减少能耗出发,本设计采用方案二。综上所诉:我们采用单片机完毕数字时钟的功能,采用数码管的动态显示来完毕显示部分。 3.电子时钟的硬件设计3.1 电子时钟的组成本次设计制作的电子时钟组成部分为:STC89C52主控制模块,按键模块,复位电路,数码管显示模块,闹铃模块。组成图如图3-1所示闹铃模块按键模块1838红外接受窗STC89C52主控制模块数码管显示模块复位电路图3-1 电子时钟系统组成3.2 单片机最小系统图单片机最小系统又称为最小应用系统,即用最少的元器件组成单片机可以工作的系统。一般应涉及:电源、单片机、晶振电路、复位电路等。如图3-2所示为
10、单片机最小系统图。图 3-2 单片机最小系统图3.3 STC89C52引脚功能图3-3 STC89C52引脚如图3-3所示,STC89C52重要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为功能控制端口,分别与其相应功能管脚相连接,13 脚定义为IR输入端。3.4 数码管显示模块图3-4 数码管显示模
11、块如图3-4所示,在这次的设计中,数码管接在单片机的P0和P2口,P0控制段选信号,P2控制位选信号。通过位选信号依次点亮各个数码管,由于人眼有视觉暂留的特性,因此假如第一个数码管灭和第二个数码管亮之间的时间足够短,人眼是感觉不出数码管的变化的。3.5 闹铃部分闹铃如下图3-5所示,重要由8550三极管和蜂鸣器构成,可通过手动设立来实现闹铃功能。图3-5 闹铃图3.6 按键模块如图3-6所示,本次设计是采用四个独立式按键,分别为“时间设立”键,“闹钟设立”键,“+”键,“-”键,通过这四个按键来调整电子时钟的时间显示和闹钟响应。“时间设立” “ 闹钟设立 “+” “”图3-6按键图4电子时钟的
12、软件设计本次设计重要是对单片机,数码管,红外遥控器,按键和闹铃部分进行编写的。4.1电子时钟程序流程框图开始初始化单片机、数码管、按键等数码管固定显示扫描按键、遥控器扫描,数码管正常显示调用时间,设立子程序刷新正常时间显示图4-1 系统程序流程框图本次的设计主程序是根据每个模块的特性来进行编写,先对各个模块进行初始化,然后再按照各自不同来分模块编写,最后得出总的流程图。进入程序后,先将单片机,数码管,按键等进行初始化,数码管显示固定数值“14-00-00”,程序开始等待按键按下,当有按键按下,单片机检测一次,拟定按下,单片机调用程序,同时数码管刷新一次,显示当前操作结果。完后,程序返回按键等待
13、,如此循环执行4.2按键调整流程图开始设立键1按下1次,进入时调整等待按键程序加键有效减键有效时加1时减1设立1键按下2次,进入分调整等待按键程序加键有效减键有效分加1分减1设立1键按下3次,进入秒调整等待按键程序加键有效减键有效秒加1秒减1设立2键按下1次,进入闹钟时设立等待按键程序加键有效减键有效时设定加1时设定减1设立2键按下2次,进入闹钟分调整等待按键程序加键有效减键有效分设定加1分设定减1图4-2 按键调整流程图4.4子程序的设计4.4.1数码管显示模块4位独立数码管显示,电路相对简朴,重要特点,简朴易用,显示清楚,性价比高。数码管显示程序:void display(void)P0=
14、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;P2=
15、0x7F;delay();P2=0xFF;4.4.2按键子模块本次设计是采用四个独立式按键,分别为“设立”键,“+”键,“-”键,“复位”键,通过这四个按键来调整电子时钟的时间显示和闹钟响应。按键操作子程序: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(!a
16、dd); /松手检测hour+;/小时+if(dec=0)/减键按下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(!a
17、dd);minit+;if(dec=0)delay();delay();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(!d
18、ec);second-;if(second60)second=0;P0=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(tim
19、enum2=1)/假如timenum2=1设定脑钟的小时dsflg=0;st=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=0xB
20、F;delay();P2=0xFF; /显示 一P0=0x38;P2=0x7F;delay();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=
21、0xEF;delay();P2=0xFF;P0=0x77;P2=0xBF;delay();P2=0xFF;P0=0x38;P2=0x7F;delay();P2=0xFF;if(timenum2=3)/假如timenum2=3退出timenum2=0;dsflg=1;f1=1;st=1;当用手按下一个键时,如图3-4所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的连续时间随键盘材料和操作员而异,但是通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的辨认。用软件方法可以很容易地解决抖动问题,这就是通过延迟
22、10ms来等待抖动消失,这之后,在读入键盘码。图3-4按键抖动新号波形本次设计过程中电路的工作原理 : 数字电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,此外尚有校时功能。因此,一个基本的数字钟电路重要由显示器“时”,“分”,“秒”和单片机,尚有校时电路组成。8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作, 将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。“分单元”也采用60进制计数器,
23、每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。“时单元”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”通过七段显示器显示出来。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,按一下设立键进入时设立,按下“+”时加一次,按下“-”键,时减一次,同理,按设立键两次即进行分调整,按下三次进行秒调整。4.4.3 主程序void main(void) second=59; /时间初始化为00:00:00minit=59;hour=13;second1=0;/闹钟默认为12:00:00minit1=05;hour1=14;count0=0x
24、00;count1=0x00;timenum1=0;f1=1;f2=1;dsflg=1;m=0; f=0;st=1;P1=0xFF;TMOD=0x11;TL1=tl;TH1=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();d
25、elay();if(add=0)while(!add);second=00; /时间初始化为00:00:00minit=00;hour=00; 5 硬件的制作与测试分析5.1电子时钟的硬件制作次的电子时钟是根据所设计的原理图,把每个部分都焊接好,连接起来,然后接入电源,上电,最后将所编写的程序烧入单片机中。 5.2硬件测试电子时钟的硬件相对简朴,只用几个模块构成,但在检查电路的时候容易因掉以轻心而犯错,重要检查电路连接是否有短路或者短路现象(通过万用表检测),元器件的型号和规格是否使用合理。另一方面,检测电源。检测方法:一种是断开稳压电源的输出端,检查空载时电源工作情况;另一种是拔下电源上的重
26、要集成芯片,检查电源的负载能力(用假负载),保证电源无端障并性能符合设计规定。检测完电路,保证其不发生电路故障的前提下才可上电。5.3软件调试电子时钟虽然看着硬件比较少,但是写起程序来并非那么简朴,在设计阶段,由于我们是刚入手单片机没多久的,所以对挺多的程序并不是很了解,我们看了郭天祥的“十天学会单片机”,他里面讲了很多关于按键,数码管,遥控器等方面的内容,我们就仿照他的例子,根据自己的删改添加终于完毕了自己的程序。在电子时钟的程序设计阶段,让数码管显示“14-00-00”,由于对十六进制不够纯熟,所以在实现显示的时候总是出现乱码,后面静下心慢慢算,终于可以正常显示,但是只是实现数码管的静态显
27、示,动态显示才是关键,通过我们在课上讲的数码管累加计时,仿照其原理,通过改善,也实现了动态显示。在按键方面,按键由于是独立的,所以我一个个按键的功能慢慢实现,先做加减后做调整和复位,刚开始做按键的时候由于考虑的不够全面,虽然按键可以实现加减,但是出现按一次跳很多次的现象,通过查找资料并观看视频,本来按下去的时候会出现所谓的“抖动”,这时候就需要多添加几句程序来进行消抖,最终数码管才正常加减,同样道理实现选择位跟复位功能,在一步步添加程序的同时也一步步地掌握了按键的使用方法。红外遥控器是我最头疼的,红外遥控器是头一次接触,平时在看别人操作的时候感觉很神奇,也很好奇,但是做起来没想到却没那么简朴,
28、由于在设计的时候总是出现乱码,或者说实现一个功能的时候另一个功能容易犯错,后面通过询问学长学姐,也终于可以实现加减调整功能,虽然遥控器上面的所有按键我们没有所有用上,但是对我来说已经是一个很大的进步。5.4测试结果分析与结论5.4.1 数码管测试结果分析 数码管重要是分清楚共阴还是共阳,在写程序的时候一定要注意,通过肉眼看数码管是否出现亮度不够判断其电路是否供电异常或者程序占用太多CPU,进 行电路调整及程序修改,让数码管正常显示。5.4.2按键测试结论在对按键进行测试的时候重要出现按键按下去有时候会出现连续加跟连续减的现象,通过查找相关资料,本来按键按下去的时候会出现“抖动”,所以我们就要在
29、程序中进行删改,做“消抖”解决。5.4.3测试结论通过多次的反复测试,分析跟修改,程序越来越完善,我也对电路的原理跟功能更加熟悉,同时在编程方面也更加的纯熟,很多平时老师没有教到的知识我通过自学,也都能基本掌握,可说在编程上得到了很大的提高,以及对所学的知识也得到很大的巩固。结论通过这一段时间以来的努力,我们的毕业设计终于完毕了,心中充满了无尽的喜悦!虽然在设计中仍有很多的局限性之处,需要我们去改善并完善,但是对我们来说,我们的付出终于得到了回报,这是一件多么故意义的事。从课堂的理论学习到现在的毕业设计成果,这不仅加强了我们对课本知识的理解和巩固,也培养了我们的实际动手能力,分析力以及学习能力
30、。在我们整个毕业设计的过程中,两人分工合作,充足发挥个人的主观能动性,团结合作,攻克在设计与制作过程中的种种困难和挫折,一路都来,汗水跟喜悦一路相伴,每每攻克一个难点,心里就美滋滋的,也许这就是我们坚持下来的动力。我是负责软件编程的,通过这次的设计,我对单片机有了一个新的结识,在单片机的编程中,管脚的使用很重要,要学会合理设计与编程;在数码管的显示上,重要是实现动态显示,并且不会乱码;在按键的设计阶段是比较复杂的,由于按键只有4个,每个按键要实现不同的功能,有的一个按键实现两个功能,这就需要我在原有的学习基础上自己揣摩思考,设计程序;遥控器是我们后面添加上去的功能,用遥控器来控制,实现了不用通
31、过电路板上面的按键就可实现调试校准功能,这是我们在原有的软件和硬件上面的一个很大的提高!在整个调试的过程中碰到很多的问题,一个因素是自己的理论知识还不够扎实,没有很好的将所学的知识充足运用起来,另一方面是由于实物跟仿真相差比较大,起初调试的时候是在仿真图上面调整的,很多现象在仿真上面是正常的,但是在实物调试中却碰到很多问题,所以把课本的理论知识结合到实物产品中是非常重要的,在软件的设计中,细心与耐心也是相称重要的,有时候稍微一个不注意,就也许导致整个电路的功能无法实现,所谓“世上无难事只怕有心人”,我们相信,其实当我们专心去做每件事的时候,事情并没有我们想象的那么困难。这次毕业设计是对我们三年
32、以来所学内容的综合应用,在这次设计中我们学习到了很多课本上有的和没有的知识,为我们以后走向工作岗位和继续深造奠定了良好基础。在本次设计的时间里我们得到了指导老师的悉心指导,以及同学们的帮助。在此感谢你们的支持和鼓励。参考文献1 张道德,单片机接口技术,中国水利水电出版社,20232 新概念 51单片机C语言教程-入门、提高、开发、拓展全攻略,电子工业出版社,20233 张靖武,周灵斌,单片机原理、应用与PROTEUS仿真,电子工业出版社,20234 郭天祥,51单片机C语言教程,电子工业出版社,20235 郭天祥,10天学会单片机教学视频6 单片机开发箱附赠的光盘-STC89C52单片机开发箱原理图7 单片机资料:.net