1、简易电子钟的设计与实现28资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。简易电子钟的设计与仿真一、 设计要求和电路原理1.1 设计要求1) 能够准确地显示北京时间。2) 时间显示选择24小时模式。3) 选用AT89C52单片机, 将编写的程序下载到该单片机中, 并能使数码管显示。 4) 采用Keil C51编译, Proteus软件进行仿真。1.2 设计原理与思路利用单片机的定时与中断系统功能实现电子钟的计数和调时。采用AT89C52定时中断方式实现24小时制时钟精确的计时。经过外部的12M( 11.0529M) Hz晶振产生稳定的谐振, 在AT89C52的内部定时器电路实现定时
2、, 当定时器溢出时产生中断, 累计定时器的定时时间达一秒时, 数码管的秒显示加1, 判断数码管的秒显示达60时, 秒显示自动清零, 分显示加1, 判断分显示达60时, 分显示自动清零, 时显示加1, 判断时显示达24时, 时显示自动清零。从而实现 00: 00: 0023: 59: 59 之间的任意时刻显示。 为了使时钟能够灵活的对时间进行调整、 校对, 经过增加外部的按键实现简单的复位、 时调整、 分调整的功能。形成一个具有复位和校时功能的简易电子时钟。二、 电子时钟设计方案2.1电子钟设计的基本方法2.1.1电子钟实现计时的方法利用MCS-51系列单片机的可编程定时/计数器、 中断系统来实
3、现时钟计时。(1) 计数初值计算:把定时器T0设为工作方式2, 产生0.25ms定时中断, 计数溢出4000次即得时钟计时最小单位秒, 而4000次计数可用软件方法实现。假设使用T/C0, 方式2, 0.25ms定时, fosc=12MHz。则初值a满足( 256-a) 1/12MHz12s =250sa=6 (6H)TH0=#6H; TL0=#6H(2) 采用中断方式进行溢出次数累计,计满4000次为秒计时( 1秒) ; (3) 从秒到分和从分到时的计时是经过累加和数值比较实现。2.1.2 电子钟的时间显示电子钟的时钟时间在8位数码管上进行显示, 时、 分、 秒的显示值能够在单片机的内部RA
4、M设置三个缓冲单元, 30H、 31H、 32H分别存储时、 分、 秒的值。显示如下表: 表2.1 电子钟的时、 分、 秒显示时十位时个位分十位分个位秒十位秒个位LED8LED7LED6LED5LED4LED3LED2LED132H空31H空30H2.1.3 电子钟的时间调整电子钟设置3个按键经过程序控制来完成电子钟的时间调整。A键复位; 按下A键, 时钟显示初始值 12 00 00B键调整分; 快速按下A键, 分显示加1, 当分显示为59, 加1变成00C键调整时; 快速按下B键, 时显示加1, 当时显示为23, 加1变成002.2 芯片以及元件2.2.1 AT89C52简介AT89C52是
5、51系列单片机的一个型号, 它是ATMEL公司生产的, 是一个低电压, 高性能CMOS 8位单片机, 片内含8k bytes的可重复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器( RAM) , 有40个引脚, 32个外部双向输入/输出( I/O) 端口, 同时内含2个外中断口, 3个16位可编程定时计数器,2个全双工串行通信口, 2个读写口线。 主要管脚有: XTAL1( 19 脚) 和XTAL2( 18 脚) 为振荡器输入输出端口, 外接12MHz 晶振。RST/Vpd( 9 脚) 为复位输入端口, 外接电阻电容组成的复位电路。VCC( 40 脚) 和VSS( 20
6、 脚) 为供电端口, 分别接+5V电源的正负端。P0P3 为可编程通用I/O 脚, 其功能用途由软件定义。下面对相关的引脚作介绍: VCC: +5V电源。 VSS: 接地。 P0口: P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时, 每位能吸收电流的方式驱动8 个TTL逻辑门电路, 对端口P0 写”1”时, 可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时, 这组口线分时转换地址( 低8 位) 和数据总线复用, 在访问期间激活内部上拉电阻。 在Flash 编程时, P0 口接收指令字节, 而在程序校验时, 输出指令字节, 校验时, 要求外接上
7、拉电阻。 P1 口: P1口是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动( 吸收或输出电流) 4 个TTL 逻辑 门电路。对端口写”1”, 经过内部的上拉电阻把端口拉到高电平, 此时可作输入口。作输入口使用时, 因为内部存在上拉 电阻, 某个引脚被外部信号拉低时会输出一个电流(IIL)。 P2 口: P2口是一个带有内部上拉电阻的8 位双向I/O 口, P2 的输出缓冲级可驱动( 吸收或输出电流) 4 个TTL 逻辑 门电路。对端口P2 写”1”, 经过内部的上拉电阻把端口拉到高电平, 此时可作输入口, 作输入口使用时, 因为内部存在上拉电阻, 某个引脚被外部信号拉低
8、时会输出一个电流(IIL)。 Flash 编程或校验时, P2亦接收高位地址和一些控制信号。 P3 口: P3口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动( 吸收或输出电流) 4 个TTL 逻 辑门电路。对P3 口写入”1”时, 它们被内部上拉电阻拉高并可作为输入端口。此时, 被外部拉低的P3 口将用上拉电阻输出电流( IIL) 。P3 口除了作为一般的I/O 口线外, 更重要的用途是它的第二功能。P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 RST: 复位输入。当振荡器工作时, RST引脚出现两个机器周期以上高电平将使单片机复位。 XTA
9、L1: 振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2: 振荡器反相放大器的输出端。AT89C52芯片的引脚图和芯片图如下: 图2.1 AT89C52引脚图和芯片图2.2.2 八位动态显示数码管1) 数码管动态显示接口图图2.2 数码管的动态显示接口图图2.3 数码管实物图2) 数码管的动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一, 动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起, 另外为每个数码管的公共极COM增加位选通控制电路, 位选通由各自独立的I/O线控制, 当单片机输出字形码时, 所有数码管都接收到相同的字形码
10、, 但究竟是那个数码管会显示出字形, 取决于单片机对位选通COM端电路的控制, 因此我们只要将需要显示的数码管的选通控制打开, 该位就显示出字形, 没有选通的数码管就不会亮。经过分时轮流控制各个数码管的的COM端, 就使各个数码管轮流受控显示, 这就是动态驱动。在轮流显示过程中, 每位数码管的点亮时间为12ms, 由于人的视觉暂留现象及发光二极管的余辉效应, 尽管实际上各位数码管并非同时点亮, 但只要扫描的速度足够快, 给人的印象就是一组稳定的显示数据, 不会有闪烁感, 动态显示的效果和静态显示是一样的, 能够节省大量的I/O端口, 而且功耗更低。2.3 电子钟模块化电路2.3.1电子钟的硬件
11、设备模块电子钟的总体硬件模块电路有: 晶振、 手动复位、 数码管显、 和时间调整和单片机接口电路, 如图2.4所示。下面分别介绍个模块的设计。图2.4 电子钟硬件模块2.3.2 时钟电路模块图2.5所示为时钟电路原理图, 在AT89C52芯片内部有一个高增益反相放大器, 其输入端为芯片引脚XTAL1, 输出端为引脚XTAL2。而在芯片内部, XTAL1和XTAL2之间跨接晶体振荡器和微调电容, 从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后, 才成为单片机的时钟脉冲信号。图2.5 时钟电路2.3.3 复位电路模块单片机复位的条件是: 必须使RST/VPD 或RST
12、引( 9) 加上持续两个机器周期( 即24个振荡周期) 的高电平。例如, 若时钟频率为12 MHz, 每机器周期为1s, 则只需2s以上时间的高电平, 在RST引脚出现高电平后的第二个机器周期执行复位。单片机常见的复位如图所示, 这是一个微分型电路。电路为上电复位电路, 它是利用电容充电来实现的。在接电瞬间, RST端的电位与VCC相同, 随着充电电流的减少, RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期, 便能正常复位( 由电容的通电时间计算得到, 复位电阻的阻值在1030pF) 。该电路除具有上电复位功能外, 若要复位, 只需按图中的RST键, 此时电源VCC经电阻R
13、1、 R2分压, 在RST端产生一个复位高电平。图2.6 复位电路2.3.4 数码管显示电路模块系统采用动态显示方式, 单片机AT89C52的P0口控制LED数码管的段选线, P2口控制数码管的位选线。动态显示一般都是采用动态扫描的方法进行显示, 即循环点亮每一个数码管, 这样虽然在任何时刻都只有一位数码管被点亮, 但由于人眼存在视觉残留效应, 只要每位数码管间隔时间足够短, 就能够给人以同时显示的感觉。下图为共阴极8位数码管动态显示。图2.7 数码管显示电路2.3.5 按键电路模块下图为按键模块电路原理图, A为复位键, B为时钟调控键, C为分钟调控键。A、 B、 和C三个按键一路有上拉电
14、阻连接高电平, 另一路接入单片机的控制引脚P1.0,、 P1.1、 P1.2。按钮断开时, 控制引脚P1.0,、 P1.1、 P1.2均为高电平, 当按下某一个按键时, 控制引脚变为低电平, 由程序控制其相应的作用。图2.8 按键电路2.3.6 电子时钟系统的设计原理图结合所有的模块设计, 综合得出电子钟系统的总体设计原理图如图2.9所示。图2.9 电子钟原理图2.3.7 相关引脚和元件a) AT89C52单片机用到的引脚: P0口: 用于控制数码管的段选P2口: 用于控制数码管的位选P1口: P1口的P1.0,、 P1.1、 P1.2脚分别控制时钟的复位、 分调整、 时调整。XTAL1、 X
15、TAL2: 接晶振的脉冲输入RST: 复位电路b) 其它的元件和相关作用电阻R1R11: 上拉电阻, 保护电路, 起限流的作用电阻R12: 复位电路的充电电阻8个8段数码管: 1、 2显示时, 4、 5显示分, 7、 8显示秒, 3、 6不显示。电容C1、 C2: 晶振的微电容, 单片机的脉冲周期产生晶振: 12M, 与电容构成晶振电路材料清单见附录1三、 电子时钟的Protues仿真3.1 Protues软件概述Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不但具有其它EDA工具软件的仿真功能, 还能仿真单片机及外围器件, 是当前最好的仿真单片
16、机及外围器件的工具, 是当前世界上唯一将电路仿真软件、 PCB设计软件和虚拟模型仿真软件三合一的设计平台, 其处理器模型支持8051、 HC11、 PIC10/12/16/18/24/30/DsPIC33、 AVR、 ARM、 8086和MSP430等, 即将增加Cortex和DSP系列处理器, 并持续增加其它系列处理器模型。在编译方面, 它也支持IAR、 Keil和MPLAB等多种编译器。Protues软件具有其它EDA工具软件( 例: multisim) 的功能。这些功能是: ( 1) 原理布图 ( 2) PCB自动或人工布线 ( 3) SPICE电路仿真 ( 4) 互动的电路仿真, 用户
17、甚至能够实时采用诸如RAM, ROM, 键盘, 马达, LED, LCD, AD/DA, 部分SPI器件, 部分IIC器件。 ( 5) 仿真处理器及其外围电路, 能够仿真51系列、 AVR、 PIC、 ARM、 等常见主流单片机。还能够直接在基于原理图的虚拟原型 上编程, 再配合显示及输出, 能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、 示波器等, Protues建立了完备的电子设计开发环境。 具有4大功能模块: 智能原理图设计( ISIS) ; 完善的电路仿真功能( Prospice) ; 独特的单片机协同仿真功能( VSM) 和实用的PCB设计平台 。3.2 编写实验程序、
18、画出实验原理图简易电子钟汇编程序见附录2。由理论设计的电子时钟在protues软件上进行仿真实验, 实验原理图如图3.1, 按照设计的实验原理图在仿真软件protues上连线。图3.1 电子钟仿真实验原理图3.3 仿真流程图图3.2 电子钟仿真流程图3.4 仿真电路调试及结果分析第一、 在Keil 环境下建立目标工程编译程序无错( 若有错, 则需重新检查程序知道无错为止) , 则生成.hex文件双击单片机, 导入文件。第二、 单击运行按钮, 电路仿真上电, 观察数码管的显示以及经过控制按键对时间的调整, 检查是否正确, 若不正确, 则需重新检查程序, 重复上述步骤, 直到仿真能够达到所需的要求
19、。实验的结果如图3.2。图3.3 仿真实验结果四、 电子时钟的硬件实现由于条件的允许, 电子时钟可在单片机的开发板平台实现。实现的过程如下: 接线与准备上电程序烧录调试与检查结果分析1) 检查电子钟所需的元件能在开发板上实施按照仿真设计的原理图连好线, ( 开发板上只需连接部分的信号控制线路, 其它模块的线路可能已经连好) 。2) 接上电源, 按下power按键, 用程序烧录工具将生成的.hex下载到单片机内部。3) 调试电路, 检查电子钟是否出错, 功能是否实现, 如果有错, 则排除错误, 再次调试, 直至达到要求为止4) 实验结束, 对结果进行分析, 如果调试有错, 找出出错的原因, 并借
20、助相关的资料进行解释。AT89C52的P0口和P2口外接由八个LED数码管(共阴极)构成的显示器, 用P0口作LED的段码输出口, P2口作八个LED数码管的位控输出线, P1口外接三个按键A、 B、 C构成键盘电路。结果显示如下: 图4.1 电子钟的开发板实现图附录1 元器件清单序号元件名称规格型号/参数数量( 个) 备注1单片机AT89C5212晶振12MHz13电容22pF2晶振电容4电容22F1复位电容5按键BUTTON3复位、 校分, 校时6电阻RESPACK-8/10K11数码管上拉电阻、 按键上拉电阻7电阻RESPACK-1K1复位电阻附录2 电子钟汇编程序ORG 0000HAJ
21、MP MAIN ; 跳转到主程序 ORG 000BH ; T0中断入口AJMP PTF0 ; 中断处理首地址 ; ; ; ; ; ; ; ; ; ; ; ; ; ; 主程序; ; ; ; ; ; ; ; ; ; ; ; ; ; ; MOV 30H,#0 ; 缓冲单元设置初值12:00:00 MOV 31H,#0 MOV 32H,#0 MAIN:MOV SP,#0EFH MOV 36H,#0FH ; 设置4000次中断计数 MOV 37H,#0A0HMOV TMOD,#2 ; 定时器启动 MOV TL0,#6 MOV TH0,#6 SETB TR0 MOV IE,#82H MOV IP,#2;
22、; ; ; ; ; 数码管动态显示; ; ; ; ; ; ; ; ; LED6: MOV DPTR,#TAB ; 表的首地址给16位数据指针寄存器DPTR MOV A,30H ; 时为的十位显示 SWAP A ANL A,#0FH MOVC A,A+DPTR MOV 40H,#7FH MOV P2,40H MOV P0,A LCALL DELAY MOV A,30H ; 时位的个位显示 ANL A,#0FH MOVC A,A+DPTR MOV 40H,#0BFH MOV P2,40H MOV P0,A LCALL DELAY MOV A,31H ; 分位的十位显示 SWAP A ANL A,#
23、0FH MOVC A,A+DPTR MOV 40H,#0EFH MOV P2,40H MOV P0,A LCALL DELAY MOV A,31H ; 分位的个位显示 ANL A,#0FH MOVC A,A+DPTR MOV 40H,#0F7H MOV P2,40H MOV P0,A LCALL DELAY MOV A,32H ; 秒位的十位显示 SWAP A ANL A,#0FH MOVC A,A+DPTR MOV 40H,#0FDH MOV P2,40H MOV P0,A LCALL DELAY MOV A,32H ; 秒位的个位显示 ANL A,#0FH MOVC A,A+DPTR MO
24、V 40H,#0FEH MOV P2,40H MOV P0,A LCALL DELAY JNB P1.0,CLEAR ; 判断键盘输入 JNB P1.1,SET_MINUTE JNB P1.2,SET_HOUR AJMP LED6; ; ; ; ; ; ; ; 中断程序; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; PTF0:PUSH PSW ;中断处理 PUSH ACC MOV PSW,#8 DJNZ 37H,PTF0R DJNZ 36H,PTF0R MOV 36H,#0FH MOV 37H,#0A0H MOV R0,#32H ; 定时到一秒 MOV A,R0 A
25、DD A,#1 DA A MOV R0,A CJNE A,#60H,PTF0R MOV R0,0 DEC R0 MOV A,R0 ADD A,#1 DA A MOV R0,A CJNE A,#60H,PTF0R MOV R0,#0 DEC R0 MOV A,R0 ADD A,#1 DA A MOV R0,A CJNE A,#24H,PTF0R MOV R0,#0PTF0R:POP ACC POP PSW RETIDELAY:MOV R6,#9H ; 动态显示延时L0: MOV R7,#19H DJNZ R7,$ DJNZ R6,L0 RETDELAY1:MOV R5,#1BH ; 调整时、 分
26、显示延时 L1:MOV R6,#9HL2:MOV R7,19H DJNZ R7,$ DJNZ R6,L2 DJNZ R5,L1 RETCLEAR:MOV 30H,#12H ; 时钟显示复位 A键 MOV 31H,#0 MOV 32H,#0 RETSET_MINUTE:MOV A,31H ; 调节分加1 B键 CJNE A,#59H,MIN MOV 31H,#0 RETSET_HOUR: MOV R1,#30H ; 调节时加1 C键 MOV A,R1 CJNE A,#23H,HOUR MOV 30H,#0MIN: ADD A,#1 DA A MOV 31H,A LCALL DELAY1 AJMP
27、 LED6HOUR: ADD A,#1 DA A MOV 30H,A LCALL DELAY1 AJMP LED6 ; ; ; 数码显示表; ; ; ; ; ; ; ; ; ; ; ; ; ; ; TAB: DB 3FH,06H,5BH,4FH,66H ; 0,1,2,3,4 DB 6DH,7DH,07H,7FH,6FH ; 5,6,7,8,9END参考文献【1】张友德等: 单片微型机原理、 应用与实验( 第五版) 复旦大学出版社, .5【2】夏宽理等: 程序设计, 复旦大学出版社, .7【3】谭浩强: C程序设计( 第二版) , 清华大学出版社, 1999.12【4】尹勇等: uVision
28、单片机应用程序开发指南, 科学出版社, .2【5】AT89C52 datasheet, 可在中国电子资源网/集成电路资料下载心得体会早就知道19周有一个微原的课程设计, 但一直都没怎么准备, 直到上课前老师宣布课设的题目。这一次做的是用单片机实现一个电子时钟的仿真, 当然, 如果能做出硬件那是再好不过了。作为学生时代的我, 在单片机的学习方面没有下很大的功夫, 因此对单片机的原理和其引脚的功能模糊不清。无奈, 只有重新拾起课本在次踏上单片机之旅。一开着手是查阅相关的资料, 希望能找到比较近似的课题供参考。弥补自己对单片机认识的不足。其实, 到今天才发现: 不要畏惧困难, 不要知难而退。最重要的
29、是去面对问题, 这样才能积累解决问题的经验。实践告诉我们, 成功要靠自己去发掘, 当发现自己也能完成认为不可能完成的事情时, 这是对自我自信心的一个极大的鼓舞。同时, 在成长和成才的路上, 这也是必备的。这些是我对课设过程领悟到的, 至少对自己能够这么说。 另一方面, 经过这一个对单片机的压迫式的训练, 我对单片机有了较大的兴趣。主要是因为自己能够独立的完成一个小小的制作, 这至少是一个希望的起点。对单片机的专业知识有了更深的认识, 这对我以后的就业和研究是很有帮助的。千言万语只有一句话, 既然你选择了它, 就不要放弃, 然后就是找到实在和聪明的方式去完成它。这可能就是我对课程设计的态度。最后, 在小组成员的一起努力下, 我们顺利的完成自己的任务。合理的任务分配让我们更加轻松的完成。