基于51单片机可调数字钟的设计_第1页
基于51单片机可调数字钟的设计_第2页
基于51单片机可调数字钟的设计_第3页
基于51单片机可调数字钟的设计_第4页
基于51单片机可调数字钟的设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、安阳师范学院单片机技术课程实践基于89C51单片机可调数字钟的仿真设计 班级: 姓名: 学号: 辅导老师: 设计时间:1. 设计目的1.1设计目的 (1)掌握51系列内部定时/计数器的原理和基本应用; (2)掌握使用单片机处理复杂逻辑的方法; (3)掌握多位数码管动态显示的方法; (4)掌握独立式(和矩阵)键盘的编程方法; (5)掌握利用汇编语言编写单片机系统的应用软件的方法; (6) 巩固,加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力; (7) 培养针对课题需要,选择和查阅有关手册,图表及文献资料的自学能力,提高组成系统,编程,调试的动手能力; (8) 熟悉单片

2、机用系统开发,研制的过程,软硬件设计方法,内容及步骤. (9) 了解数字钟的组成及工作原理. 1.2设计性能 (1)用51单片机的定时/计数器TMR0产生一秒的定时时间,作为秒计数时间; (2)当一秒产生时,秒计数加1; (3)开机时,显示00.00.00,并开始连续计时; (4)计时满23.29.59时,返回00.00.00重新开始计时; (5)在以上设计基础上,在单片机的I/O口上分别接入四个按键:K0控制“秒”的调整,每按一次加1秒;K1控制“分”的调整,每按一次加1分;K2控制“时”的调整,每按一次加1小时;K3时间复位按键。2.系统电路的方案2.1实现时钟计时的基本方法用AT89C5

3、1单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1开机时。显示00-00-00的时间,开始计时;计时满23-59-59时,返回00-00-00重新计时AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过TCON特殊功能寄存器来设置的。在此设计中,选择16位定时工作方式。对于T0来说,系统时钟为12MHz,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,必须通

4、过软件来处理这个问题,假设取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次计数,就可以采用软件的方法来统计了。设定TMOD01H,设置定时/计数器0工作在方式1。给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出:N=t/Ty=(50×10-3)/(1×10-6)=50000X=65536-50000=15536=3CB0H即TH0=3CH,TL0=0B0H.这样,当定时/计数器0计满50ms时,产生一个中断,我们可以在中断服务程序中,对中断次数加以统计,以实现数字钟的逻辑功能。2.2数字钟的时间显示 显示器的时间显

5、示采用动态扫描电路驱动形式,以达到简化电路的目的。但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。可采用 74LS244或者晶体管;其中74LS244是用来驱动段选码,晶体管是驱动位选码。 电子钟的时钟时间在六位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共8个单元。LED8LED7LED6LED5LED4LED3LED2LED137H36H35H34H33H32H31H30H小时分隔符分钟分隔符秒133.系统的硬件设计3.1单片机的功能介绍 AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节

6、闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示 。图3.1 单片机AT89C52引脚功能简化图3.2时钟振荡电路 时钟振荡器即时钟脉冲发生器,产生整个芯片内部各功能电路正常操作所需的时钟脉冲和定时信号。最常用的一种电路连接方法是,在

7、XTAL1和XTAL2这2只引脚之间外接一只晶体振荡器XTAL和2只电容C1和C2到地(如图5-3所示),与片内电路共同构成一个多谐振荡器电路。其振荡频率取决于外接石英晶体振荡器元件XTAL的固有频率,常选取12MHZ或6MHZ的晶振。 典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行。图3.2时钟振荡电路图3.3键盘控制电路 键

8、盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘; 在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。下图5-6是非编码键盘式控制电路。图3.3 键盘控制电路 按键在闭合和断开时,触点会存在抖动现象为使CPU能正确地读出端口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。单片机中常用软件法,软件法其实很简单,就是在单片机获得端口为低的信息后,不是立即认定按键已被

9、按下,而是延时10毫秒或更长一些时间后再次检测端口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。而在检测到按键释放后(端口为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。不过一般情况下,我们通常不对按键释放的后沿进行处理,实践证明,也能满足一定的要求。 4.系统的软件设计4.1系统软件设计流程图 这次的数字钟设计用到很多子程序,最好将它们分为若干个相对独立且相互联系的部分。主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。以下是数字钟工作的流程图。开始显示初始化,设置定时器,定时50毫秒,开断断。器根据计数值显示时间到

10、60秒?S键按下?M键按下?H键按下?到60分?到24小时?秒计数加1小时计数加1分计数加1小时计数值清0是否否否是是是否否是否R键按下?否是秒计数清零是分计数清零图4.1 数字钟工作流程图4.2 系统中断流程图 单片机一般允许有多个中断源,当几个中断源同时向CPU请求中断时,就存在CPU优先响应哪一个中断请求源的问题(优先级问题),一般根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求,于是便规定每一个中断源都有一个中断优先级别,并且CPU总是响应级别最高的中断请求。 当CPU正在处理一个中断源请求的时候,又发生了另一个优先级比它高的中断源请求,如果CPU能够暂时中止对原来中断处理程序的

11、执行,转而去处理优先级更高的中断源请求,待处理完以后,再继续执行原来的低级中断处理程序,这样的过程称为中断嵌套。 以下图是定时器中断服务子程序流程图开始显示初始化,设置定时器,定时50毫秒根据计数值显示时间到60秒?到60分?到24小时?秒计数加1小时计数加1分计数加1所有计数值清0是否是否是否图4.2 定时器中断服务子程序流程图4.3子程序说明4.3.1 按键扫描 按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就检测复位键是否按下,复位健按键如

12、果按下,时钟就复位。如果没有按下,把时间显示出来。4.3.2 数码管动态扫描 时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留特性,使人的感觉好像各位数码管同时都在显示。5.数字钟元件清单和软件介绍5.1数字钟元件清单 列元件清单的主要目的是为了更好地理论联系实际,为了硬件设计和仿真起到了不可磨灭的作用,做到心中有数

13、。以下是数字钟的元件清单元件名称规格型号数量(个)单片机AT89C511电阻RES/10K,RES/2205,8晶振11.0592MHz1电容30pF/220uf2,1按键BUTTON4排阻RESPACK-8/10K1锁存器74LS2451液晶显示7SEG-MPX6-CC1二极管1N41484表5.1电子钟元器件清单5.2软件调试 打开程序调试软件keil uVision3,在里面新建一个工程,接着新建文件,编写相应程序。编写好的各个程序进行编译与连接。但若是在该过程中,看见我们编好的程序有错误,那么根据他相应的提示来修改错误,直到该程序能够正确编译为止。能够正常编译的程序说明没有什么问题了,

14、此时我们在点击相关栏目,让它生成我们在硬件仿真时所需要的.HEX文件。5.3硬件调试打开Proteus 仿真软件,按照方案所选的电路元件来设计整体电路,先把芯片按一定的位置放好,然后按相应的对象进行连接,连接时需仔细,以免调试时发生错误。做好之后把编程所生成的。HEX文件加载到AT89C52中,运行仿真软件,查看运行效果。如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。总结通过本次仿真的设计,我遇到很多自己不理解的问题及书本上或是我以前没有看见过的知识点。在面对这些问题时,我首先采用的是上网搜寻的方法,在根据别人的提示,想想自己的问题出在哪里,该怎么解决。当我还是无法想到解决的

15、办法时,我就带着自己的问题到图书馆查阅资料或找同学互相交流,如果我的问题还是没有解决,我就带着问题去问我们的指导老师,让他帮我解决。采用这样的方法,我的很多问题都迎刃而解了!其次,我不但努力解决自己遇到的问题,还帮助同学解决他们遇到的问题。这样一来,我的知识得到了进一步的巩固,同学的问题也得到了相应的解决,我达到了一举双收的效果,我为此而感到高兴。让我觉得仿真的最大成果是:知道了将理论用到实际当中时,会遇到很多的问题。需要我们一个一个地把它解决,根据自己所学的专业基础知识分析具体原因,具体问题具体分析,再逐一把它克服掉。知道理论与实际的差距,所以以后要多加强实际动手的能力。因此,学习就应该采取

16、理论与实践相结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。最后,我相信以后不管遇到什么困难和挫折,不要畏惧,要敢于向前探索。这样问题才能迎刃而解。附录一 系统程序源代码S_SET BIT P1.0 ;数字钟秒控制位M_SET BIT P1.1 ;分钟控制位H_SET BIT P1.2 ;小时控制位RESET BITP1.3 ;复位键SECOND EQU30HMINUTE EQU31HHOUR EQU32HTCNT EQU34HORG0000H SJMPSTARTORG0BH LJMPINT_T

17、0 ;定时器0溢出中断矢量START:MOVDPTR, #TABLE MOVHOUR, #0 ;初始化 MOVMINUTE, #0 MOVSECOND, #0 MOVTCNT, #0 ;计数值赋0 MOVTMOD, #01H ;定时器/计数器工作在方式1 MOVTH0,#3CH ;定时50毫秒 MOVTL0, #0B0H MOVIE, #82H ;EA中断总允许位置1 SETBTR0 ;允许T0累加计数。;判断是否有控制键按下,是哪一个键按下A1:LCALL DISPLAYMOVP1, #0FFH ;把P1脚置成高电平JNBS_SET, S1JNBM_SET, S2JNBH_SET, S3JN

18、BRESET, S4LJMPA1 ;如果没有键按下重新检测S1:LCALL DELAY ;有S_SET键按下去抖动JB S_SET,A1 ;确实有键按下进入下面处理,否则为干扰重新检测INC SECOND ;秒值加1LCALL DISPLAYMOVA, SECONDCJNEA, #60, J0 ;判断是否加到60秒MOVSECOND, #0LJMPJ0 ;等待按键弹起来,按一次,只加一次S2:LCALL DELAY ;有M_SET键按下去抖动JB M_SET, A1INC MINUTE ;分钟值加1LCALL DISPLAYMOVA, MINUTECJNEA,#60,J1 ;判断是否加到60分

19、MOVMINUTE, #0LJMPJ1S3:LCALL DELAY ;有H_SET键按下去抖动JBH_SET, A1 INC HOUR ;小时值加1LCALLDISPLAYMOVA, HOURCJNEA,#24,J2 ;判断是否加到24小时MOVHOUR, #0LJMPJ2S4:LCALL DELAY ;有RESET键按下去抖动JB RESET, A1LJMPSTARTJ0:JB S_SET, A1LCALLDISPLAYSJMPJ0J1:JB M_SET, A1LCALLDISPLAYSJMPJ1J2:JB H_SET, A1LCALLDISPLAYSJMPJ2;定时器中断服务程序(每50m

20、s中断一次),对秒,分钟和小时的计数INT_T0: MOVTH0, #3CH MOVTL0, #0B0H INCTCNT MOVA, TCNT CJNEA,#20,RETUNE ;计时1秒 INCSECOND MOVTCNT, #0 MOVA, SECOND CJNEA, #60,RETUNE INCMINUTE MOVSECOND,#0 MOVA, MINUTE CJNEA, #60, RETUNE INCHOUR MOVMINUTE, #0 MOVA, HOUR CJNEA, #24,RETUNE MOVHOUR, #0 MOVMINUTE, #0 MOVSECOND, #0 MOVTCNT, #0 RETUNE:RETI ;显示控制子程序DISPLAY: MOV A,SECOND ;显示秒 MOVB, #10 DIV AB ;商

温馨提示

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

评论

0/150

提交评论