单片机电子钟的课程设计_第1页
单片机电子钟的课程设计_第2页
单片机电子钟的课程设计_第3页
单片机电子钟的课程设计_第4页
单片机电子钟的课程设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机电子时钟的设计摘 要系统由at89c51、seg数码管、按键、电容、晶振、电阻等部分构成,能实现时间的调整、时间校对、定时时间的设定,输出等功能。系统的功能选择由按键时、分、秒、完成。 开机时,显示12:00:00的时间开始计时;p0.0/ad0控制“秒”的调整,每按一次加1秒;p0.1/ad1控制“分”的调整,每按一次加1分;p0.2/ad2控制“时”的调整,每按一次加1个小时;系统的主程序主要完成时间显示和定时输出判断功能。而时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。该电子钟的精确度在仿真软件中效果良好。关键词:电子钟;at89c51;中断;seg1 设

2、计思想1.1硬件设计思想2.1.1电路设计思想电路原理图见附图1,由动态数码显示组成时、分、秒的显示。把“单片机系统”区域中的p1.0p1.7端口用8芯排线连接到“动态数码显示”区域中的ah端口上;把“单片机系统:区域中的p3.0p3.7端口用8芯排线连接到“动态数码显示”区域中ss8端口上;“单片机系统”区域中的p0.0/ad0、p0.1/ad1、p0.2/ad2端口分别用导线连接到“独立式键盘”区域中的sp3、sp2、sp1端口上。1.1.2键盘设计思想键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻

3、辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms.1.1.3连击功能的实现按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。1.2软件设计思想本系统的主程序主要完成时间显示和定时输出判断功能。而时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。1.2.1数据与代码转换由前述可知,从p2口输出位选码,从p0口输出段选码,led就会显示出数字来。但p0

4、口的输出的数据是要bcd码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储单元的数据直接送到p0口去驱动led数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过bcd码行转换后,将各个单元数据的段选代码送入p0口,给cd4511译码后去驱动数码管显示。具体转换过程如下:我们先将要显示的数据装入累加器a中,再将a中的数据转换成高低两位的bcd码,再放回a中,然后将a中的值输出。如:有一个单元存储了45这样一位数,则需转换成四位的bcd码:(0100)(0101)然后放入a中。 a中bcd码,高位四位代表4低四位代表5同时送给两个译码器中,译

5、码后 45 字就在两个led中显示出来。1.2.2计时功能的实现与中断服务程序时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器t0打开后,进入计时,满100毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位。得到时、分、秒存储单元的值,并经译码后,通过扫描程序送led中显示出来,实现时钟计时功能。累加是用指令inc来实现的。进入中断服务程序以后,执行push psw和push a将程序状态寄存器psw的内容和累加器a中的数据保存起来,这便是所谓的 保护现场 . 以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控

6、制之下,堆栈可在片内ram中的任一区间设定,而堆栈的数据存取与一般的ram存取又有区别,对它的操作,要遵循 后进先出 的原则。1.2.3时间控制功能与比较指令系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入ram某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条clr指令,将对应的那路p3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行setb对应的p3置低电位,二极管截止,。实现此控制功能用到的比较指令为cjne a,#direct, rel,其转移条件是累加器

7、a中的值与立即数不等则转移。3 电路原理与电路图3.1电路原理电路原理图见附图1,由动态数码显示管组成时、分、秒的显示。p0口的8条数据线p0.0至p0.7分别与两个cd4511译码的abcd口相接,p2口的p2.0至p2.2分别通过电阻r10至r13与vt1至vt3的基极相连接。这样通过p0口送出一个存储单元的高位、低位bcd显示代码,通过p2口送出扫描选通代码轮流点亮led1至led6,就会将要显示的数据在数码管中显示出来。从p0口输出的代码是bcd码,从p2口输出的就是位选码。这是扫描显示原理。3电路原理图(如图3.1)图 3.1 电路原理图4 流程图与算法描述4.1流程图开始计数单元清

8、零th0,tl0装入初值开中断,并允许t0中断秒按键识别成功否?second加1second=60吗?second=0显示数据处理分按键识别成功否?minite加1minite=60吗?minite=0显示数据处理时按键识别成功否?hour加1hour=24吗?hour=0显示数据处理流程图1:实验主程序流程图t0中断入口通过查表方式显示数据数码位选加1位选数值8吗?位选数值0秒计数加1秒计数500吗?秒计数0second加1second=60吗?second=0,并minite加1minite=60吗?minite=0,并hour加1hour=24吗?hour=0显示数据处理中断返回流程图2

9、:定时中断程序流程图参考文献:1陈立周,陈宇.单片机原理及其应用m. 机械工业出版社,2006.2谢维成,杨加国,董秀成.单片机原理与应用及c51程序设计m.北京:清华大学出版社,2009.252-2683孙育才,苏学成.单片微型计算机应用系统设计与实现m.南京:东南大学出版社,1990.4.2附录(汇编程序)second equ 30h; 秒寄存器minite equ 31h; 分寄存器hour equ 32h; 時寄存器hourk bit p0.2minitek bit p0.1secondk bit p0.0dispbuf equ 40h dispbit equ 48h t2scnta

10、equ 49h t2scntb equ 4ah temp equ 4bh org 00h; 程序执行开始地址 ljmp start; 跳转到标号start执行 org 0bh; t0中断程序入口 ljmp int_t0; 跳至in-t0执行;主程序start: mov second, #00h; 清0存放秒分时值得单元 mov minite, #00h mov hour, #12 mov dispbit, #00h mov t2scnta, #00h mov t2scntb, #00h mov temp, #0feh lcall disp; 在2kb范围内长调用 显示子程序 mov tmod,

11、 #01h mov th0, #(65536-2000) / 256; 2毫秒 mov tl0, #(65536-2000) / 256 setb tr0; 允许to中断 setb et0; 开启t0定时器 setb ea; 总中断开放;按键扫描子程序及校时调整wt: jb secondk, nk1; secondk为1(sp1建按下)时跳到 lcall dely10ms jb secondk, nk1 inc second; 对计数器加1 mov a, second cjne a, #60, ns60; 沒到60秒返回,到60秒清0 ;判断计数器是否满59? mov second, #00h

12、ns60: lcall disp jnb secondk,$; 不满60秒就循环执行nk1: jb minitek, nk2; 分控制键按下时跳转 lcall dely10ms jb minitek, nk2; 分控制键按下时跳转 inc minite mov a, minite cjne a, #60, nm60 mov minite, #00hnm60: lcall disp jnb minitek, $; 不满60分就循环执行nk2: jb hourk, nk3 lcall dely10ms jb hourk, nk3 inc hour mov a, hour cjne a, #24,

13、nh24 mov hour, #00hnh24: lcall disp jnb hourk, $ ;不满24小时就循环执行nk3ljmp wtdely10ms: ;延时1毫秒的子程序 mov r6, #10d1: mov r7, #248 djnz r7, $ djnz r6, d1 ret ;显示子程序disp: ;将得出的时间存入40h(dispbuf)之后的地址 mov a, #dispbuf; 将temp中的十六进制数转换成10进制 add a, #8 dec a mov r1, a mov a, hour; 時送a mov b, #10; 10进制/10=10进制 div ab mo

14、v r1, a; 累加器送内部ram单元 dec r1 mov a, b mov r1, a dec r1; mov a, #10 mov r1, a dec r1 mov a, minite; 分送a mov b, #10 div ab; 十進制調整 mov r1, a dec r1 mov a, b mov r1, a dec r1 mov a, #10 mov r1, a dec r1 mov a, second;秒送a mov b, #10 div ab; 十进制调整 mov r1, a dec r1 mov a, b mov r1, a dec r1 retint_t0: ;t0中断

15、服务子程序,即计时time子程序 mov th0,#(65536-2000) / 256; 2毫秒 mov tl0,#(65536-2000) / 256 mov a, #0ffh mov p3, a mov a, #dispbuf add a, dispbit; 地址加,并将时间的各位送到p1 mov r0, a mov a, r0; 取显示数据到a mov dptr, #table; 取段码表地址 movc a, a+dptr; 查显示数据对应段码 mov p1, a; 分十位送p1口显示 mov a, dispbit mov dptr, #tab; 表地址送数据指针 movc a, a+

16、dptr mov p3, a inc dispbit mov a, dispbit cjne a, #08h, kna mov dispbit, #00hkna: inc t2scnta; 时间的增加与进位 mov a, t2scnta cjne a, #100, done mov t2scnta, #00h inc t2scntb mov a, t2scntb cjne a, #05h, done mov t2scntb, #00h inc second; 秒加一 mov a, second; cjne a, #60, next; 到60秒了吗? mov second, #00h; 到60秒清0 inc minite; 分加1 mov a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论