1、推荐下载电子钟(完整word版)电子钟 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)电子钟)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整word版)电子钟的全部内容。单片机原理及应用课程三级项目项目名称:基于单片机的智能电子钟系统仿真设计 班 级:通信工程2班姓 名:姜敏敏 张丹 李文婷 朱贺
2、 任雁飞 宋亚 指导教师:闫盛楠日 期:2015年10月摘要数字时钟在日常生活中很常见,应用也很广泛。本系统设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个结构简单功能齐全的电子时钟。本系统由单片机的时钟信号实现计时功能,将其时间数据经单片机输出,利用显示器显示出来,同时通过按键可以进行校时、定时等功能。利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点以满足人们不同的需要。关键词:电子时钟;单片机;LED数码管显示前言数字钟是采用数字电路实现对时、分、秒、数字显示的计时装置,广泛用于人们生产生活的各个方面,钟表的数字化给人们带来了极大的方便,而且大大地扩展了钟表原先的报
3、时功能.随着科技的发展,人们对电子产品的应用要求越来越高,数字电子钟不但可以显示当前的时间,而且可以显示日期、农历、以及星期等,另外数字钟还具备秒表和闹钟功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。 高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础
4、。本设计利用软件编程借助于定时器/计数器0实现间隔为1s的定时功能,格式为秒,分,时,在其中断服务程序中实现对小时、分钟、秒单元数值的调整。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。利用嵌套在调时子程序中的显示子程序实现上下午指示和半秒闪烁。该数字钟既可以显示当前时间,同时具有调时、闹钟等功能,满足了不同人的需要。正文一、系统整体设计思想1、基本原理利用软件编程借助于定时器/计数器0实现间隔为1s的定时功能,格式为秒,分,时,在其中断服务程序中实现对小时、分钟、秒单元数值的调整。主程序通过
5、不断循环调用调时子程序,实现整个功能。利用嵌套在调时子程序中的显示子程序实现上下午指示和半秒闪烁。2、所用元器件报警、电源 、AT89C51单片机、六片数码管显示屏、 LED灯指示(上下午、半秒)、按键 (k1k4)、电阻、喇叭、三极管3、方案设计通过定时器/计数器0实现1s的计时,将它设计成内部中断,即每计满1s产生中断信号,主程序转去执行定时器0的中断服务程序,按照时间规则改变相应RAM存储单元的数值。在主程序里首先不断检测是否有按键按下,如果没有,则不断调用显示子程序,否则,根据按下的是哪个键可以转去执行相应的程序段,分别实现小时和分钟的加和减以及闹钟定时,而每次执行结束都会调用显示子程
6、序,保证数码管的稳定显示,同时也可以实时根据存储单元数值的不同显示。而闹钟的倒计时则利用定时器/计数器1的计时来实现,同样为1s计时,只不过是在中断服务程序中实现对存储单元的按规则递减,同样的即使显示就可以实现倒计时功能,到达00:00:00时就可以调用报警子程序,实现报警.4、整体电路5、仿真结果二控制电路 1、基本原理P0口控制LED显示屏,P2口控制时间显示,P3口分别控制半秒提示和上下午,P1口分别控制四个按键和蜂鸣器。2、相关工具AT89C51,LED数码管,K建按钮3、电路原理图4、方案设计及实现结果时间显示:采用六个数码管显示当前时间:小时、分钟、秒。上下午指示:采用两个发光二极
7、管来指示上下午。半秒提示:采用两个发光二极管,每隔半秒闪烁。按下K1键,开始调小时,同时2个小时数码管闪烁。按下K2键,小时加;按下K3键,小时减.小时调整好后,再按下K1键,开始调分钟,同时分钟数码管闪烁。按下K2键,分钟加;按下K3键,分钟减.整好分钟后,再按下K1键,调时结束。按下K4键,开始调小时,同时2个小时数码管闪烁.按下K2键,小时加;按下K3键,小时减。小时调整好后,再按下K4键,开始调分钟,同时分钟数码管闪烁。按下K2键,分钟加;按下K3键,分钟减。调整好分钟后,再按下K4键,定闹结束。 闹钟定时的时间到后,蜂鸣器/扬声器发出提示音;用户需按K2-k4键来取消闹钟警告。三、定
8、时模块设计1、基本原理计时器T1的倒计时同样是1s的倒计时,只是在中断程序里实现对计时单元的减1,但在减1之前检测是否为0,如果是就调用报警子程序,如果不是则按照规则减1,注意的同样是数值的调整。调整结束后返回ADJUST程序,继续检测,这样就可以实现连续调节。由单片机芯片中引脚输出的信号来控制蜂鸣器的开和关 在报警子程序里要求不断调用显示子程序,这样数码管可以在时间到达之后稳定显示00:00:00。2、所用元器件 蜂鸣器、三极管2N29073、方案设计 P1.3为设定闹铃状态,按P1。3实现时分秒转换,P1.2加1,P1。1减一,再按P1。3调闹钟结束。引脚P1.7输出高电平时,三极管截止,
9、蜂鸣器不发声;输出低电平时,三极管导通,蜂鸣器发出声音。改变单片机P1。7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生不同的音色、音调的声音;改变其占空比,则可以控制蜂鸣器声音的大小。4、电路设计图四、LED显示模块设计1、基本原理P0。0P0。7接数码管的片选码)P2.0P2。5接数码管的段选码,时间显示采用六个数码管显示两位的小时,分钟,秒.半秒提示采用两个发光二极管,每隔半秒闪烁。上下午指示采用两个发光二极管来指示上下午。2、所用元器件7SEG-MPX6-CABLUE六位LED液晶显示屏、发光二极管、AT89C513、方案设计 (1)时间显示:动态显示的核心在于依次选中一块数码管,
10、并在此之前将相应数码管要显示的数字的段码送到端口,进行相应的延时后关闭数码管选通信号。不断执行上述过程就可以实现较为稳定的动态显示。每次进入主程序都首先判断是否到了1s,到了则继续执行,否则,返回中断。为了在显示完秒之后还能继续显示小时的十位,必须有一个用来计数的单元,用以区分当前显示的是小时还是分钟,还是秒,并以此作为仅次于显示次数N的循环.对每一个单元(30H32H)的两位BCD码的显示,用一位(21H).0来指示即将显示的是十位还是各位,据此控制刚才所说的单元指示数值是否用该加一或者重新初始化.由此在DISPLAY子程序中有3重循环。调用入口参数为30H32H单元的数值。(2)半秒提示:
11、采用两个发光二极管,每隔半秒闪烁.中断5次就是半秒,并在相应的分支里设置P3.6和P3。7,保证二者同时取反即可。这可以放在显示子程序内部,保证时间显示和半秒闪烁的同步,同时可以节约计数器。(3)上下午指示:采用两个发光二极管来指示上下午。只要判断30H单元的内容与11H相比较就可以知道是上午还是下午了,在分支语句里控制相应的灯亮了就行。如上所述,将它放置在显示子程序里较为方便。4、电路设计图5、仿真结果五、按键模块设计1、基本原理通过控制四个开关按钮,控制8951的P1口输入,通过编写程序控制实现该设计所要求的小时分钟的调时功能,由按键控制调小时还是调分钟并控制数值的加一或减一.2、所用元器
12、件按钮开关3、设计方案ADJUST的主体部分就是检测是否有按键按下,如果没有只是调用显示子程序,而有的话转去执行相应的分支语句。为了防止干扰,我们便写了一个延时5ms左右的子程序,若是经过延时后,按键信号依然有效,则认定是有效信号,否则为干扰,返回程序起始点重新检测。在K2K3的分支语句里实现指针所指向单元的加一或者减一,但是注意要按照时间规则来,对加一或者减一结果进行调整,否则可能出错。对单元的加一或者减一直接反映到显示子程序和定时器计数器0或者1的16位计数单元里,所以,每次更改后的值就相当于对时间确定调节,并从该处继续计时,这样就实现了调时功能。K4的分支语句要求实现定闹,它与K1分支语
13、句的不同之处是更改当前计数器为1,关闭0,在计数器1的中断服务程序里可以实现倒计时功能。4、电路设计图5、仿真结果按下K1键,开始调小时,同时2个小时数码管闪烁。按下K2键,小时减;按下K3键,小时加.小时调整好后,再按下K1键,开始调分钟,同时分钟数码管闪烁。按下K2键,分钟减;按下K3键,分钟加。调整好分钟后,再按下K1键,调时结束。六、参考文献【1】何立民,单片机系统设计M,北京:北京航空大学出版社.1993【2】付家才,单片机控制工程实践技术M,北京:北京化学工业出版社2004【3】李光才,单片机课程设计实力指导M,北京:北京航空大学出版社。2004【4】朱定华,单片机原理机接口技术实
14、验M,北京:北方交通大学出版社2002结论本次课程设计是用AT89C51单片机设计一个数字时钟,经过一个星期的调试,结果满足部分设计要求,验证无误。通过单片机硬件电路的调试,实现了预先设定的功能,设计主要用到的元件不多,最主要的是程序也比较长比较麻烦,同时也遇到了大量困难,尤其是关于校时模块的设计实现。关于显示模块,我们也遇到了不少的麻烦,程序的错误,对于元件了解不够深刻都是主要原因.学以致用,将从书本上学到的知识应用于实践,学会了初步的电子电路仿真设计,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高。当最终调试成功的时候也是对自己的一种肯定。此次的设计
15、作业不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。另外在这次实验中我们遇到了不少的问题针对不同的问题我们采取不同的解决方法,最终一一解决设计中遇到的问题。在我们曾经遇到不懂的问题时,利用网上的资源,搜索查找得到需要的信息。方案中仍存在不少的问题,接下来我们会继续对其进行调试修改,也希望老师能给出我们相关的意见和建议。项目分工一起做,平均附录ORG 0000HLJMP MAINORG 000BHLJMP IT0PORG 001BHLJMP IT1PORG 0100HDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8
16、H,80H,90H;0-9的共阳极显示段码ORG 1000HMAIN: SETB P3.0 ;6亮,绿灯CLR P3。1MOV TMOD, #01H ;设T0方式1,定时,T1为方式1,计数SETB IT0 ;外部中断0为跳沿方式有效SETB IT1 ;外部中断1为跳沿方式有效SETB PX0 ;外部中断0为高优先级中断SETB PX1 ;外部中断1为高优先级中断CLR PT0 ;定时器0为低优先级中断CLR PT1 ;计数器1为低优先级中断MOV 20H, 0AH ;中断10次为1s,中断计数单元为20HMOV 19H, 05HMOV 29H, #55H ;01010101B,不断左移位,相
17、当于最高两位的0和1转换 MOV 18H, #05H ;DISPLAY子程序执行这么多次后结束CLR A ;A清零MOV 30H, A ;“时”单元清零MOV 31H, A ;“分”单元清零MOV 32H, A ;“秒”单元清零SETB ET0 ;允许中断SETB ET1SETB EX0SETB EX1SETB EA ;CPU开中断MOV TH0, 3CH ;给T0装入计数初值,可计时100msMOV TL0, 0B0H ;MOV TH1, #3CH ;给T1装入计数初值MOV TL1, #0B0HSETB TR0 ;启动计数SETB TR1MOV R1, #31HHERE: NOP ;允许被
18、中断LCALL ADJUSTAJMP HERE ;反复调用显示子程序ADJUST: MOV R3, #00HA1: LCALL DISPLAYMOV P1, 0FFHJNB P1.2, K3JNB P1。1, K2JNB P1。0, K1JNB P1.3, K4LJMP A1 ;如果没有键按下重新检测LJMP J3;等待按键抬起来J3: JB P1.2, A1LCALL DISPLAYLJMP J3J2: JB P1.1, A1LCALL DISPLAYLJMP J2J1: JB P1.0, A1LCALL DISPLAYLJMP J1J4: JB P1.3, A1LCALL DISPLAYL
19、JMP J4K3: LCALL DELAYJB P1。2, A1 ;确实有键按下,进入下面处理,否则严重干扰,重测 MOV A, R1ANL A, 0FHCJNE A, #09H, M1MOV A, R1ADD A, 10HANL A, 0F0HMOV R1, AJMP M2M1: INC R1M2: LCALL DISPLAYLJMP J3 ;等按键弹起来,按一次,只加一次K2: LCALL DELAYJB P1.1, A1MOV A, R1ANL A, 0FHJNZ NONBOUNDMOV A, R1CLR CSUBB A, #06HMOV R1, ANONBOUND: DEC R1LCA
20、LL DISPLAYLJMP J2K1: LCALL DELAYJB P1。0, A1INC R3CJNE R3, #01H, TWICE1 MOV R1, 30HJMP S1TWICE1: CJNE R3, #02H, DONE MOV R1, 31HS1: LCALL DISPLAYLJMP J1K4: LCALL DELAYJB P1。3, N1JMP N2N1: LJMP A1N2: CLR TR0SETB TR1INC R3CJNE R3, #01H, TWICE2 MOV R1, #30HJMP S2TWICE2: CJNE R3, 02H,DONE MOV R1, #31HS2:
21、 LCALL DISPLAYLJMP J4DONE: NOPRETIT0P: PUSH Acc ;保护现场PUSH PSWCLR EAMOV TH0, 3CH ;重新装入计数初值MOV TL0, 0B0HDJNZ 19H, HALF ;半秒MOV 19H, 05HMOV A, 29HRL AMOV 29H, AHALF: DJNZ 20H, RETURN ;1s还没有到,那么就返回继续计数100s CPL P2.0MOV 20H, 0AH ;否则,重新装入中断次数计数值MOV A, 32H;ADD A, #01H ;秒单元增1DA A ;将二进制的秒数转换成BCD码,以便显示MOV 32H,
22、A ;返回到秒单元保存CJNE A, #60, RETURN;如果不满60s,继续下一个1s的计时MOV 32H, #00H ;否则,秒单元就要清零MOV A, 31HADD A, #01H ;针对分单元加1DA AMOV 31H, ACJNE A, 60, RETURN;如果不满60分钟,则继续下一个1s的计数 MOV 31H, #00H ;否则分单元清零MOV A,30H ADD A, #01H ;针对时单元加1DA AMOV 30H, ACJNE A, #24, RETURN;如果不满24小时,则继续计数,否则,全部清零MOV 30H, #00H ;时单元清零RETURN: SETB E
23、APOP PSWPOP AccRETIDISPLAY:CLR EAPUSH AccPUSH PSWPUSH 01HLOOP0: DJNZ 18H, STARTLJMP FINISHSTART: MOV DPTR, #0100HMOV C, (29H).7 ;29H的最高两位每隔半秒互调一次,只要不断调用显示程序,输出就会每隔半秒变化一次MOV P3。7, CMOV C, (29H)。6MOV P3.6, CMOV A, #11HCJNE A,30H,NEXT1 ;若是12小于小时数,则Cy被置位,否则清零 NEXT1: JC NIGHT ;C为0,是早上SETB P3.0 ;6亮,绿灯CLR
24、P3.1JMP MOONNIGHT: SETB P3.1 ;C为1,是晚上CLR P3.0 ;7亮,黄灯MOON: NOPNOPMOV 10H, 01H ;存放片选码MOV R0, #30H ;寄存器间接寻址SETB (21H).0 ;指示将要显示的是十位还是个位,1表示十位,0表示个位LOOP1: MOV A, R0 ;A中是待显示的两位数BCD码JNB (21H)。0,NEXT ;若将要显示个位则直接相与取位SWAP A ;否则,十位与个位交换再取位NEXT: CPL (21H)。0 ;指示位取反,为下次显示做准备ANL A, 0FH ;取得待显示的一位BCD码MOVC A, A+DPTR
25、 ;取得待显示段码MOV P0, A ;准备显示MOV P2, 10H ;片选,亮了NOPNOPNOPMOV P0, 0FFH ;关闭数码管MOV A, 10HRL A ;为下次显示做准备MOV 10H, AJNB (21H)。0,LOOP1 ;若将显示个位,则R0不变INC R0 ;否则,加一CJNE R0,#33H,LOOP1 ;若刚才显示的是秒并且是个位,也就是显示结束,那么重新置数AJMP LOOP0 ;否则,继续显示FINISH: MOV 18H, #05HPOP 01HPOP PSWPOP AccSETB EARETEINT0: PUSH PSW ;它本来就是高优先级中断,所以不会
26、再被打断 PUSH AccINC R1MOV A, R1DA AMOV R1, APOP AccPOP PSWRETI;INT1中断服务程序EINT1: PUSH PSWPUSH AccDEC R1MOV A, R1DA ACLR CSUBB A, 0CHMOV R1, APOP AccPOP PSWRETI ;T1中断服务程序 ;K4按钮第一次按下,转到T1的中断程序这里 IT1P: NOPPUSH Acc ;保护现场PUSH PSWCLR EAMOV TH1, #3CH ;给T1装入计数初值MOV TL1, 0B0HDJNZ 19H, HALF1 ;半秒MOV 19H, 2AHMOV A,
27、 29HRL AMOV 29H, AHALF1: DJNZ 20H, RETURN1 ;1s还没有到,那么就返回继续计数100s MOV 20H, #4AH ;否则,重新装入中断次数计数值MOV A, 30H ;CJNE A, #00H,B0 MOV A, 31HCJNE A, 00H,B0 MOV A, 32HCJNE A, #00H,B0 LJMP SPEAKERB0: MOV A, 32HCJNE A, #00H,W0LJMP Y0W0:DEC AMOV 32H, A ANL A, 0FHJNZ Q0MOV A, 32HCLR CSUBB A, 06H MOV 32H, AQ0: DEC
28、 32HLJMP RETURN1 Y0: MOV 32H, #59HMOV A, 31HCJNE A, #00H,W1 LJMP Y1W1: DEC AMOV 31H, A ANL A, #0FHJNZ Q1MOV A, 31HCLR CSUBB A, 06H MOV 31H, AQ1: DEC 31HLJMP RETURN1 Y1: MOV 31H, 59HMOV A, 30HCJNE A, #00H,W2 LJMP Y2W2: DEC AMOV 30H, A ANL A, #0FHJNZ Q2 MOV A, 30H CLR CSUBB A, #06H MOV 30H, A Q2: DEC 30HLJMP RETURN1 Y2:LJMP RETURN1RETURN1:SETB EA POP PSWPOP AccRETISPEAKER:NOP NOPSS: CPL P1.7LCALL DISPLAY NOPNOPNOPNOPJMP SSRET;延时子程序5ms DELAY: MOV R6, #5 D1: MOV R7, 250 D0: NOPNOPDJNZ R7, D0 DJNZ R6, D1 RETEND
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1