单片机终结版毕业设计.doc

上传人:laozhun 文档编号:3936448 上传时间:2023-03-28 格式:DOC 页数:30 大小:1.46MB
返回 下载 相关 举报
单片机终结版毕业设计.doc_第1页
第1页 / 共30页
单片机终结版毕业设计.doc_第2页
第2页 / 共30页
单片机终结版毕业设计.doc_第3页
第3页 / 共30页
单片机终结版毕业设计.doc_第4页
第4页 / 共30页
单片机终结版毕业设计.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《单片机终结版毕业设计.doc》由会员分享,可在线阅读,更多相关《单片机终结版毕业设计.doc(30页珍藏版)》请在三一办公上搜索。

1、目 录1. 系统设计.1 1.1 方案比较.1 1.2 系统硬件原理框图.2 1.3 工作原理.22. 部分电路与芯片介绍4 2.1 时钟和复位电路4 2.2 LED显示电路.5 2.3 主电路原理图8 2.4 元器件清单.9 2.5 单片机80C31简介10 2.6 74LS245芯片10 2.7 74LS373芯片113. 程序设计思路与程序流程图11 3.1 程序设计思路12 3.2 流程图134. 仿真软件调试16 4.1 Keil 简介16 4.2 Proteus 简介16 4.3 电子跑表仿真测试18 4.3.1 仿真平台18 4.3.2 调试程序18设计总结19设计体会20参考文

2、献21致谢22附录 程序清单1 系统设计1.1 方案比较设计跑表可以用几种不同的方法设计实现,常用的就有用单片机和用数字集成电路设计等方法。方案一:用数字集成电路设计。跑表主要是对时间的计数,因此用数字电路设计的主要元件也就是计数器,除此之外还有毫秒脉冲发生器、译码和显示电路以及按键控制电路。计数器可选用十进制计数器来完成计数工作。毫秒脉冲发生器主要是为计数器提供时钟信号,使得计数间隔为一毫秒。译码和显示电路用来显示计数的结果,按键控制电路用来控制计数器的状态。这种方案设计的优点是设计简单,容易实现。方案二:用单片机设计实现。单片机是实现各种控制策略和算法的载体,单片机内部有专门的定时计数器,

3、并且有中断系统。用单片机的设计的电路主要有键盘输入控制电路、显示输出电路和单片机系统。利用单片机的定时计数器就可实现对时间的计数,要达到毫秒级计数只要将定时计数器的初始值改变一下就可实现。键盘控制主要是利用中断系统来实现,当按下一个键时发出一个中断信号,使得定时计数器在计时、停止和复位清零三种状态之间转换。计数的结果通过查表指令取出显示字的代码送数码管显示。这样就能很好的实现跑表的功能。用单片机设计的特点是外围电路简单,设计效果好。第一种方案设计直观、简单,但电路比较复杂,第二种方案设计外围电路简单设计,耗材少。因此,本设计中采用第二种方案来完成设计任务。1.2 系统硬件原理框图时钟电路复位电

4、路80C31键盘电路驱动电路外部扩展存储器LED显示 图1.1 跑表硬件原理图1.3 工作原理 基于单片机的电子跑表的运行主要是利用单片机定时/计数器的工作和中断服务作用完成计时功能的。首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时的基础以及定多长的时间,这些还需要我们人为的确定。钟表的时钟要运行,首先要有“秒”的计时,因为单片机内部是没有规定的“秒”的概念。同时它工作在不同的工作方式时,它的计数初值也是不同的。这就要我们人为首先计算出计数的初值了,这就可以实现所谓的定时了。如果单片机的定时时间到了的话,那么单片机会自动地产生中断使程序转向中断服务

5、程序执行,中断服务程序执行完了就会返回原程序,等待下一次定时时间的到来再产生中断。在此基础上,单片机就会按照人为设定的程序执行下去。使单片机能计算其它时间量。因为不同的计时功能它的基本计时单位是不同的。我们知道,时钟的基本计时单位是秒,而秒表的基本计时单位却是毫秒了,因而我们把定时器的初始时间设计为50ms,将其乘以20便可得到我们的时间秒单位。这样还可以省下一个定时器,节省了单片机的硬件资源。 当按下START键是,作为电子跑表使用,显示范围是000.0-999.9;当按下STOP键时,跑表停止运行,并保留所停位置的时间,当按下H键是可校正时,每按一次时加1,调整范围为0-23时,0为24时

6、;用M键可校正分,每按一次加1,调整一次加1,调整范围为0-59,0即为60分。最后将单片机内部的“时间”输出来,让我们看得到,那就得有显示电路。而要进行时间的调整,键盘部分也是必不可少的了。这就是构成单片机跟我们的人机接口。2 部分电路及芯片介绍2.1 时钟和复位电路2.1.1 时钟电路时钟信号通常由两种方式产生:一是内部振荡方式,二是外部时钟方式。时钟电路原理图如图2.1所示 图2.1 时钟电路1. 振荡电路在单片机内部有一个高增益反相放大器,只要在单片机的XTAL1和XTAL2引脚外接石英晶体振荡器就构成了自激振荡器,并在单片机内部产生时钟脉冲信号。电容器C1和C2的作用是稳定频率和快速

7、起振。 除使用石英晶体振荡器外,若对时钟频率要求不高,还可以用电感或陶瓷振荡器,但使用陶瓷振荡器时要把电容的容量稍微提高一些。2. 分频电路振荡电路产生的振荡信号并不直接为单片机所使用,而要进行分频,分频后才能得到单片机各种相关的时钟信号。3. 晶振频率晶振频率是指晶体振荡器的振荡频率,也就是振荡电路的脉冲频率,所以也称振荡频率。随着技术的发展,单片机的晶振频率还在逐步提高,例现在一些高速芯片的晶振频率已达40MHZ。晶振频率也是单片机的一项重要性能指标。因为单片机的时钟信号是通过振荡信号分频得到的,所以晶振频率直接影响着时钟信号频率。晶振频率高,系统的时钟频率就高,单片机运行速度也就快。然而

8、晶振频率高对于存储器等的速度和印刷电路板的工艺要求也高。晶振频率不但影响速度,而且对单片机的工作电流也有一定的影响,所以在选择晶振频率是,要兼顾速度,功耗和线路工艺。4. 从外部引入脉冲信号驱动时钟电路高频振荡信号除了由振荡电路产生外,还可以从外部脉冲源直接引入。直接引入外部脉冲信号的情况多发生在由多片单片机组成的系统中,因为统一从一个外部脉冲源引入脉冲信号,可以保证单片机之间时钟信号的同步。一般要求外部信号高电平的持续时间大于20ns,且为频率低于12MHz的方波。2.1.2 复位电路 复位电路用于产生复位信号,通过RST引脚送入单片机,进行复位操作。复位电路的好坏直接影响单片机系工作的可靠

9、性,因此,要重视复位电路的设计和研究。 图2.2 复位电路1. 复位电路概述 目前,在单片机系统中共用过4种类型的复位电路,分别为:积分电路、微分电路、比较器型电路和看门狗型。其中前3种是在芯片外面用分立元件或集成电路芯片搭建的,而最后一种位于芯片内部,是单片机芯片的一部分。对于片外复位电路,无论哪种类型,加电复位和手动复位都是必不可少的基本功能。2. 83C31基本复位电路复位操作有两种基本形式:一种是上电复位,另一种是按键复位。复位电路原理图如上图2.2所示上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐下降。RE

10、RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。上电与按键均有效的复位电路不仅在上电时可以自动复位,而且在单片机运行期间,利用按键也可以完成复位操作。所以本设计选用第二种方案,即上电复位与按键复位均有效的复位电路。2.2 LED显示电路2.2.1 LED显示器概述 单片机应用系统最常用的显示器是LED(发光二极管显示器)、LED(液晶显示器)。这两种显示器可显示数字、字符及系统的状态。它们的驱动电路简单、易于实现且价格低廉,因此,得到了广泛应用。本次设计只要显示4位数字,不需显示图形或字符,因而采用八段数码管做显示器。LED显示器有共阴极与共阳极两种结构,如图

11、2.3所示。共阴极LED显示块的发光二极管阴极并接,如图中(a)所示,当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管则阳极并接,如图中(b)所示, 当某个发光二极管的阴极为低电平时,发光二极管点亮。 通常的七段LED显示器块中有八个发光二极管,也有人叫做八段显示器,其中七个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。 图2.3 七段LED显示原理图2.2.2 LED显示器显示原理 1. 段码 所谓段码就是为数码管显示提供的各段状态组合,即字形代码。7段数码管为7位,8段数码管为8位,用一个字节即可表示。在段码字节中代码位与各段发光二极管的对应关系如

12、下: 段码D7D6D5D4D3D2D1D0段名dpgfedcba 段码的值与数码管公共引脚的接法(共阳极和共阴极)有关。以8段数码管为例,显示十六进制数的段码值在表2.1中列出。表2.1 十六进制段码表数字共阳极段码共阴极段码数字共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH 七段显示块与单片机接口非常容易。只要将一个8位并行输出口与显示块的发光二极管引脚相连即可。8位并行输出口输出不

13、同的字节数据即可获得不同的数字或字符。通常将控制发光二极度管的8位字节数据称为段选码。LED显示工作方式可分为静态显示和动态显示。在静态显示方式下,共阴极应固定接地,共阳极应固定接高电平。我们采用的是利用8051芯片I/O口构成键盘/显示接口电路,为简化电路,降低成本,显示将采用动态显示。在动态显示中将所有相同位的段控线并联在一起,由一个I/O口线控制,8段由8个I/O口控制,而共阴极点或共阳极点分别由相应的I/O口线控制。LED动态显示电路只需要两个8位I/O口。其中一个8位I/O口控制段控码,另一个8位I/O口控制位选。由于所有段控码都由一个8位I/O控制,因此,在同一瞬间,6只LED都会

14、显示相同的字符。要想每位显示不同的字符,必须采用扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平(共阴极送低电平,阳极送高电平)以保证该位显示相应字符。如此循环,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。2.3 主电路Proteus原理图2.4 元器件清单 80C31 1个 RESPACK-8 1个 电容(22F) 2个 电容(33F) 1个 电阻(0.2K) 9个 电阻(10K) 4个 电阻(1K) 1个 74LS373 1个 74LS245 2个 2716 1个 按键 5个 LED

15、 4个2.5 单片机80C31简介80C31单片机,它是8位高性能单片机。属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,标准MCS-51单片机的体系结构和指令系统。 80C31内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80C31片内并无程序存储器,需外接ROM。 此外,80C31还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存R

16、AM数据,时钟振荡停止,同时停止芯片内其它功能。80C31有PDIP(40pin)和PLCC(44pin)两种封装形式2.6 74LS245芯片74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。由于P2口始终输出地

17、址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。P0口与74LS245输入端相连,/E端接地,保证数据现畅通。8051的/RD和/PSEN相与后接DIR,使得/RD或/PSEN有效时,74LS245输入(P0.iDi),其它时间处于输出(P0.iDi)。2.7 74LS373芯片74ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片, 74ls373引脚图(1).1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、13、14、17、

18、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态); (2).当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态. 锁存端LE由高变低时,输出端8位信息被锁存,直到LE端再次有效。当三态门使能信号OE为低电平时,三态门导通,允许Q0Q7输出,OE为高电平时,输出悬空。当74LS373用

19、作地址锁存器时,应使OE为低电平,此时锁存使能端C为高电平时,输出Q0Q7状态与输入端D1D7状态相同;当C发生负的跳变时,输入端D0D7数据锁入Q0Q7。51单片机的ALE信号可以直接与74LS373的C连接。 74ls373与单片机接口: D0-D7 为8个输入端。 Q0-Q7 为8个输出端。 G是数据锁存控制端;当G=1时,锁存器输出端同输入端;当G由“1”变为“0”时,数据输入锁存器中。 OE为输出允许端;当OE=“0”时,三态门打开;当OE=“1”时,三态门关闭,输出呈高阻状态。在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用,其连接方法如上图所示。其中输入端D0-

20、D7接至单片机的P0口,输出端提供的是低8位地址,G端接至单片机的地址锁存允许信号ALE。输出允许端OE接地,表示输出三态门一直打开。3 设计思路与流程图3.1 程序设计思路跑表的运行主要是利用单片机定时/计数器的工作和中断服务的作用完成计时功能的。首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时的基础以及定多长的时间,这些还需要我们人为的确定。跑表要运行,首先要有“秒”的计时,因为单片机内部是没有规定的“秒”的概念。同时它工作在不同的工作方式时,它的计数初值也是不同的。这就要我们人为首先计算出计数的初值了,这就可以实现所谓的定时了。如果单片机的定时

21、时间到了的话,那么单片机会自动地产生中断使程序转向中断服务程序执行,中断服务程序执行完了就会返回原程序,等待下一次定时时间的到来再产生中断。在此基础上,单片机就会按照人为设定的程序执行下去。使单片机能计算其它时间量。当然,单片机如果要执行多种不同的计时功能的话,还需要选择多种不同的工作方式,这样才不会使单片机产生混乱。因为不同的计时功能它的基本计时单位是不同的。我们知道,跑表的基本计时单位是毫秒,而时钟的基本计时单位却是秒了,因而我们把定时器的初始时间设计为50ms,将其乘以20便可得到我们的时间秒单位。3.2 流程图3.2.1 主程序流程图如下:N开始初始化判是否启动?中断总允许开中断调用子

22、程序中断返回关中断结束Y3.2.2 INT0中断流程图:现场恢复PITO现场保护计数器重新加载循环次数加1数加1是否满20次秒加1是否60秒秒显示缓冲区清0分值加1是否60分分显示缓冲区清0是否24时时加1时显示缓冲区清0返回NNNNYYYY3.2.3 INT1中断流程图:PITO现场保护定时50ms是否到0.1s?0.1s值加1ms显示缓冲区清0是否到1s?秒值加1十秒值加1是否到10s?S显示缓冲区清0现场恢复返回NYNYNY是否到100s?NY100s值加110s显示区清0是否到1000s?全部清0Y 4 仿真软件调试4.1 Keil Cx51简介Keil Cx51支持所有8051派生产

23、品。8051系列产品是以最快的速度发展起来的一种单片机体系结构。现在,不同的半导体销售商可以提供400多种不同的产品。新的8051扩展器件,比如Philips 80C51MX单片机,由于具有几兆字节的代码空间和数据空间,因此可以应用于大的设计中。Cx51编译器所提供的新的输出文件格式,可以直接支持多达16MB的代码空间和数据空间。为了给不同的8051单片机派生产品提供优化支持,Keil公司提供了几种开发工具。Cx51编译器是一种支持新Philips 80C51MX体系结构单片机的C51编译器。Cx51编译器通常指的是:C51和Cx51两种编译器。Cx51优化C编译器是完全依据美国国家标准化协会

24、制定的C语言标准来实现的。Cx51编译器为适用8051目标而对C编译器进行了改编,因而它不是一种通用的C编译器。Cx51可为8051单片机产生极其快速和简洁的代码,因而它具有C语言编程的灵活性,又具有汇编语言的代码效率和速度。通常情况下,用户可能是在uVision2的集成开发环境中使用Cx51编译器。4.2 Proteus简介Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是互动的,针对微处

25、理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,不需要别的,Proteus为你建立了完备的电子设计开发环境。尤其重要的是Proteus Lite可以完全免费,也可以花微不足道的费用注册达到更好的效果;功能最强的Proteus专业版也非常便宜,人人用得起。Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被电子世界在其对PCB设计系统的比较文章中评为最好产品。Proteus 产品系列

26、也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。其功能模块:一个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。4.3 电子跑表仿真测试4.3.1 仿真平台我们采用的是Keil Software生产的Cx51

27、编译器。采用Proteus软件进行电路仿真。运行在Windows XP操作系统下。 开启计算机进入Keil C51编译器介面。仿真电路图如下所示:4.3.2 调试程序 打开Keil软件,新建工程; 选择芯片; 新建文档,把编写好代码写入文档并保存了ASM文件; 把保存的文档加载到Source Group;编译程序;设置转换成16进制;运行程序的结果;把编写好的16进制文件输入单片机80C31其进行初始化。设计总结1、 认真审题,看懂题目的要求!选择适当的课题,不益太简单或者太难。做到既能把课题完成又能锻炼自己的能力!2、 根据课题要求,复习相关的知识,查询相关的资料。根据实验条件,找到适合的方

28、案,找到需要的元器件及工具,准备实验。3、 根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。4、 还要根据实验的实际情况,添加些额外程序来使系统更加的稳定,如开关的消震荡(采用延迟)。5、 程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。6、 在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。7、 这次的单片机课程设计重点是理论与实际的相结合。不再只读书了。8、 该设计从头到尾

29、都要自己参与,熟悉了对整个设计的过程,更系统的锻炼了自己。设计体会通过本次关于电子跑表的设计,使我们对单片机的课本内容进行了一次系统的复习,加深了我们对知识的理解和应用。并懂得了它内在的联系和在实际产品中的应用。本课程设计的重要组成部分在于原理图的设计,还有仿真的调试,和程序的编写。或许是平时应用较少的缘故,致使在运用时不能融会贯通,在设计过程很难下手。通过这次的课程设计,使我对单片机有了更深理解,这次课程设计不仅是能力的体现,更是一种耐心的锻炼。谢谢学校及老师给我们这次增添信心的机会。在这最后我想要说的一点是关于电子跑表当中的误差问题,产生误差有两个原因:一是定时器溢出中断信号时,CPU正在

30、执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。为使定时器溢出中断与CPU响应中断实现同步,该方法针对中断响应与中断请求的时间误差,对定时器原有的计数初值进行修改,以延长定时器计数时间,从而补偿误差。在该方法中,当定时器溢出中断得到响应后,即停止定时器的计数,并读出计数值。该计数值是定时器溢出后,重新从00开始对每个机器周期继续加所计的值。然后,将这个值与定时器的停止计数时间求和。若在定时器原计数初值中减去这个和形成新计数初值,则定时器能在新计数初值下使溢出中断与CPU响应中断实现同步,从而达到误差的补偿要求。参考文献 1付家才单片机控制工程实践技术.北京:化学工业出版社,

31、20042朱定华.单片机原理及接口技术实验.北京:北方交通大学出版社,2002.3张鑫,华臻,陈书谦.单片机原理及应用.北京:电子工业出版社,2005.4何立民.MCS51系列单片机应用系统设计系统配置与接口技术M.北京:北京航空航天大学出版社,1999.5李维諟,郭强.液晶显示应用技术.北京:电子工业出版社.2005.6陈小忠,黄宁,赵小侠编著.单片机接口技术实用子程序.北京:人民邮政出版社,2005业出版致 谢经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个专科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个

32、设计是难以想象的。 在这里首先要感谢我的指导老师廖代文老师。廖老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料到设计草案的确定和修改,中期检查,后期详细设计,调试程序等整个过程中都给予了我悉心的指导。我的设计虽然比较简单,但由于时间紧迫和工作烦琐,但是廖老师仍然细心地纠正仿真图中的错误。除了敬佩廖老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。然后还要感谢大学三年来所有的老师,为我们打下电子专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完成。最后感谢我的母校三年来对我的大力栽培。附录 程

33、序清单:TCOUNT EQU 30H ;50ms中断计数次数单元SECOND EQU 31H;时钟显示缓冲单元,依次为秒,分,和时和?MINUTE EQU 32HHOUR EQU 33H TCOUNT1 EQU 78H ;50ms中断计数次数单元HAOMIAO EQU 79H ;跑表显示缓冲单元,依次为?秒PMIAO EQU 7AH ORG 0000H ;跳到主程序 LJMP MAIN ORG 000BH ;转到T0中断服务程序 LJMP INT0X ORG 001BH;转到T1中断服务程序 LJMP INT1XMAIN:MOV SP, #59H;堆栈指示器SP初始化 MOV TCOUNT,

34、#00H MOV TMOD, #11H;中断方式初始化,两个定时器均用方式1定时 MOV TH0, #3CH;T0定时初值初始化 MOV TL0, #0B0H MOV TH1, #3CH;T1定时初值初始化 MOV TL1, #0B0H SETB EA SETB ET0 SETB ET1SEEK: JNB P1.0, PAO;上电后查询START键或STOP键是否按下 JNB P1.1, CLOCK AJMP SEEK;无键按下循环查询 CLOCK:SETB ET0;允许定时器T0中断 SETB EA;中断总允许 SETB TR0;启动定时器T0 LCALL DISPLAY;调时钟显示子程序

35、LCALL KSCAN;调键扫描子程序 AJMP CLOCK;无键按下按时钟功能循环执行时钟程序KSCAN:JNB P1.0, KEY1;P1.0即START键按下 JNB P1.2, KEY3;P1.2即H键按下 JNB P1.3, KEY4;P1.3即M键按下 RETKEY1: LCALL DD2MS;有START键按下,延时2ms秒去抖动 JNB P1.0, KEY11 LJMP MAINKEY11:LCALL DISPLAYP;调电子跑表显示子程序 JB P1.0, PAO AJMP KEY11PAO: LCALL DISPLAYP ;键释放后启动定时器T1 SETB TR1 SETB

36、 TR0GOON: LCALL DISPLAYP JB P1.1, GOON LCALL DD2MS JB P1.1, GOON;P1.1即STOP键按下 KEY2: LCALL DISPLAYP JNB P1.1, KEY2 ;STOP键释放 STOP: CLR TR1;关定时器T1 MOV R1, #200;停跑表并将数据显示?秒LAST: LCALL DISPLAYP DJNZ R1, LAST;显示延时时间到将各缓冲单元清零 MOV PMIAO ,#00H MOV TCOUNT, #00H MOV HAOMIAO, #00H AJMP CLOCK RETKEY3: LCALL DD2M

37、S;H键按下,去抖动 JNB P1.2, KEY31 LJMP MAINKEY31: CLR TR0 LCALL DISPLAY;H键释放 JNB P1.2, KEY31 INC HOUR;时钟时显示缓冲单元内容加一 MOV A, HOUR CJNE A, #24, RETH;比较为24该单元内容清零 MOV HOUR, #0RETH: SETB TR0 RETKEY4: LCALL DD2MS;M键按下,去抖动 JNB P1.3, KEY41 LJMP MAIN KEY41: CLR TR0 LCALL DISPLAY;M键释放 JNB P1.3, KEY41;时钟分显示缓冲单元内容加一 I

38、NC MINUTE MOV A, MINUTE CJNE A, #60, RETM;比较为60该单元内容清零 MOV MINUTE, #0RETM: SETB TR0 RET DISPLAY: ;时钟显示子程序 MOV A,MINUTE;秒显示单元内容除以10,分离十位和个位 MOV B,#10 DIV AB MOV DPTR,#TABLE;取程序中的常数表格首地址 MOVC A,A+DPTR;取对应的秒十位数字代码暂存A中 MOV P0,A;送段控至P0口 MOV P2, #2;送位控至P2口 LCALL DD2MS;延时2ms,保证视觉效果 MOV P2, #0 MOV A, B;取B中对应的秒个位数字代码暂存A中 MOV

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号