课程设计(论文)基于AT89S51控制的数字时钟.doc
《课程设计(论文)基于AT89S51控制的数字时钟.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于AT89S51控制的数字时钟.doc(22页珍藏版)》请在三一办公上搜索。
1、基于AT89S51控制的数字时钟摘要本系统采用MSC-51系列单片机以AT89S51为中心器件来设计多功能数字时钟。文中详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理。该时钟系统能实现时钟日历的功能:能进行时、分、秒的显示;也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现秒表,整点报时等功能。1.引言1.1 设计的意义近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新.在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以
2、及针对具体应用对象特点的软件结合,加以完善.本文通过用对一个能实现定时,日历显示功能的时间系统的设计学习,详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。1.2 设计所要做的工作系统AT89S51、LED数码管、按键、发光二极管,电容,电阻,蜂鸣器,晶震等部分构成,能实现的功能有:时间显示、日期显示、定时、整点报时、秒表、报警。左键:切换功能显示,按一下显示日期,再按一下显示定时时间,再按一下显示秒表。中键:进行位置选择,按一下则选择最右边两位,再按一下则选择中间两位,再按一下则选择左边两位,再按
3、一下则选择下一功能左边两位,如此循环。当选择某个数的时候,按左键加一,秒的时候则直接清0。当有选择某个数的时候或显示日期、定时时间的时候按右键则返回显示时间。右键:定时时间到时会放音乐,按右键时就停止播放。右上角按键和指示灯:显示是否有定时功能,亮时则有定时功能,按一下按键则灯灭取消定时功能,再按下开启定时功能。当显示秒表的时候:按中间键进行开始计时和暂停,按右键清0。按左键时回到显示时间。2.硬件电路原理分析2.1.电路原理分析 时钟电路驱动电路显示电路复位电路AAAT89S51定时音乐播放键盘电 路 图2-1总体方案方框图图2-2电路原理图电路中单片机的P1口送数据,P2口送地进行选择某位
4、数码管。用74LS245进行驱动,P3.0接蜂鸣器,P3.2,P3.3,P3.4,P3.5接按键,0.1uF电容起抗干扰作用。2.1.1电路显示原理23456电路原理图见图2。由两个四位的数码管组成时、分、秒、年、月、日的显示。P1口的8条数据线P1.0 至P1.7 分别与第一片74LS245译码的A0-A7口相接,P2口的 P2.0至P2.7分别与第二片74LS245 A0-A7相接。这样通过P0 口送出一个存储单元的高位、低位代码,通过P2口送出扫描选通代码地址,就会将要显示的数据在数码管中显示出来。从P1口输出的代码是段选码,从P2口输出的就是位选码。这是扫描显示原理。2.1.2内部震荡
5、电路1:图2-3晶体震荡电路AT89S51中有一个构成内部震荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是放大器的输入端和输出端,这个放大器与作为反馈元件的石英晶体构成自激震荡电路。外接石英晶体及电容C1,C2接在放大器的反馈回路中构成并联震荡电路。2.1.3键盘消抖原理1310键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动。2.1.4复位电路原理【2】9复位电路的基本功能是:系统上电时提供
6、复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。下图所示的RC复位电路可以实现上述基本功能,Sm为手动复位开关。图2-4复位电路图2.2四位数码管原理图4810图2-5 数码管管脚图2.3 AT89S51的管脚说明2: 图2-6 AT89S51管脚图VCC 电源电压.GND 接地.RST 复位输入.当RST变为高电平并保持2个机器周期时,将使单片机复位.WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能.DISKRTO位缺省为RESET输出
7、高电平打开状态.XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入.XTAL2 来自反向振荡放大器的输出.P0口 一组8位漏极开路型双向I/O口.也即地址/数据总线复用口.作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用.在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻.在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻.P1口 一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写1,通过内部的上拉电
8、阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).Flash编程和程序校验期间,P1接收低8位地址. P2口 一个带内部上拉电阻的8位双向I/O口.P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据.在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变.Flash编程
9、和程序校验期间,P2亦接收低8位地址.P3口 一个带内部上拉电阻的8位双向I/O口.P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对P3口写1时,它们被内部的上拉电阻把拉到高电并可作输入端口.作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL).P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下图所示.P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号.PSEN/ 程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲.当访问外部数据存储器,
10、没有两次有效的PSEN/信号.EA/VPP 外部访问允许.欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态.Flash存储器编程时,该引脚加上+12V的编程电压VPP.3.数字时钟各个功能实现的设计思路3.1数据与代码转换148由前述可知,从P2口输出位选码,从P1口输出段选码,LED就会显示出数字来。但P1口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储单元的数据直接送到P1口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD
11、码行转换后,将各个单元数据的段选代码送入P1口,给74LS245译码后去驱动数码管显示。具体转换过程如下:我们先将要显示的数据装入数据指针累加器A中,再将A中的数据转换成高低两位,再放回A中,然后将通过MOVC A,A+DPTR查表将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成高低两位放在两个地址中,然后通过查表取得5, P1口送出数据, P2口送出地址。延时1毫秒后同样的道理将高位4送出。高位4,低位5先后送入译码器中,译码后45字就在LED中显示出来。3.2计时功能的实现与中断服务程序2 时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后,进入计时
12、,满10毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中一位一位显示出来,实现时钟计时功能。累加是用指令INC来实现的。 进入中断服务程序以后,执行PUSH PSW和PUSH A将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的保护现场。以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循
13、i后进先出i的原则。3.3定时,音乐播放控制功能与比较指令12系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条STEB 12H指令,将对应的那路置为高电位,开启,定时时间到,调用音乐播放子程序;如果当前计时时间与执行设备设定的关闭时间相等,就执行CLR对应的12H置低电位,关闭,音乐播放停止。实现此控制功能用到的比较指令为CJNE A,#direct,rel,其转移条件是累加器A中的值与立即数不等则转移。3.4整点报时控制功能当时
14、间的秒开始进入到59分55秒时,开蜂鸣器,56秒时关蜂鸣器,57秒开蜂鸣器,58秒关蜂鸣器,59秒开蜂鸣器,60秒关掉。这样实现了整点报时功能。如果有播放音乐则不进行整点报时,这点也在程序中加以控制,以免产生混乱。3.5秒表功能的实现秒表是通过定时100毫秒的时间。将0.1秒位通过CJNE 的不等转移的比较指令和10比较,如果不等,则0.1秒位继续每100毫秒加1;如果等于10,0.1秒位清0,秒位则加1。秒位通过CJNE 的不等转移的比较指令和60比较,如果不等,则秒位继续每1毫秒加1;如果等于60,秒位清0,分位加1。分位则也是通过CJNE 的不等转移的比较指令和60比较,如果不等,则分位
15、继续每60秒加1;如果等于60,分位清0,秒位清0,0.1秒位清0,停止计数。4软件设计4.1程序流程图图4-1 主程序流程图图4-2定时器0流程图图4-3 外部中断0流程图图4-4 外部中断1流程图5调试中的问题与解决方法数字时钟设计刚完成时,我经过检查,发现了一些问题147:1 刚弄好电路板并烧写程序进去后发现数码管不能正确显示时间,每个数码管中显示的数字几乎一样。经过询问老师,自己查阅资料,终于找出问题的原因:由于我在电路中采用的是动态数码管显示,需准确地调整延时子程序DEL1MS。我在程序中采取的延时时间为1毫秒。2整点报时不准确,本来我是定在55秒开始启动蜂鸣器报警,却提前了两秒钟,
16、经过检查程序后发现是报时程序里错写成了53秒,才造成提前报时。3复位电路中的开关不能使电路复位到初始状态即12:00:00,经过认真检查电路后我发现我是开关的管脚没接对。测试后重新接下开关的管脚就可以了。6结束语经过调试之后,我发现我做的基于AT89S51设计的数字时钟,经过调试,一天的时间里面,差不多在1秒,计时、定时时间是相对准确。而且该设计的成本不高,硬件电路简单,可以用在对时间精度要求不高的场合. 由于时钟电路的重要性,时钟电路在很多应用系统中必不可少,用软件方法可以实现,但误差很大。在对时间精度要求很高的情况下,通常采用时钟芯片来实现。典型的时钟芯片有:DS1302,DS12887,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 基于 AT89S51 控制 数字 时钟
链接地址:https://www.31ppt.com/p-3993414.html