收藏 分销(赏)

基于51单片机的9999秒倒计时器方案书.doc

上传人:w****g 文档编号:2488090 上传时间:2024-05-30 格式:DOC 页数:40 大小:3.66MB 下载积分:12 金币
下载 相关 举报
基于51单片机的9999秒倒计时器方案书.doc_第1页
第1页 / 共40页
基于51单片机的9999秒倒计时器方案书.doc_第2页
第2页 / 共40页


点击查看更多>>
资源描述
西 京 学 院 毕 业 设 计 (论 文) 成绩 题 目: 基于51单片机倒计时器 姓 名: 系 别: 机电工程系 专 业: 机电一体化技术 班 级: 机电0809班 学 号: 0812090901 指导老师: 张永超 日 期: 2011年1月20日 教务处制 基于51单片机倒计时器毕业设计 摘 要 近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。倒计时系统需要用到锁存器、矩阵键盘、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即采用Keil uVision3软件程序进行译码。 本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确调用,完成了可以随时设置初值的基于51单片机控制的9999秒倒计时系统。 【关键词】倒计时器 单片机 矩阵键盘 Keil uVision3 LED数码显示器 目录 前 言 ………………………………………………………………………………1 第一章 倒计时系统简介 2 1.1设计要求 2 1.2方案说明 2 1.3系统功能 3 第二章 MCS-51单片机基本原理 4 2.1 MCS-51单片机的组成原理 4 2.1.1 80C51芯片介绍 4 2.2 MCS-51单片机的引脚功能 5 2.3 中断 7 2.4 定时器与计数器 9 第三章 倒计时器系统设计与调试 12 3.1 硬件电路设计 12 3.2中央处理器模块 12 3.3锁存器 14 3.4 矩阵键盘 16 3.5 LED数码显示模块 17 3.6 软件设计 19 3.7 倒计时模块子程序设计 23 3.8 其他子程序设计 24 结 论 ……………………………………………………………………………..26 致 谢 ……………………………………………………………………………..27 参考文献…………………………………………………………………………..28 附录 ……………………………………………………………………………….29 前 言 51系列单片机属于总线型单片机,具有硬件架构完整、功能强大、技术成熟、通用性强、可外部扩展、配套芯片齐全、集成开发环境好、实用子程序丰富以及价格低廉等一系列优点,无论是实际工程应用,还是学习单片机原理及其应用技术,51系列单片机都是理想的选择。 在社会生活和生产的各个领域中,凡是有自动控制要求的地方都会和单片机扯上关系。无论是从简单到复杂,还是从空中、地面到地下,凡是能想到的地方几乎都有使用单片机的需求,并且达到许多与人方便的操作。尽管现在单片机在社会上的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目。因此,单片机的应用依然大有想象和拓展空间。本次设计采用的是总线型结构的单片机,总线型结构的单片机可以减少不同之间信息传送线的条数,从而使信息传送规格整齐,提高了整机的可靠性。采用总线结构以后,存储器、输入输出等外部设备都通过专门的接口电路独立的挂在总线上,因而使得单片机可扩充能力强,使用方便灵活。另外,还可根据不同的需要增加存储器的容量或增添外部设备,也可以根据不同的需要组成各种专用的单片机,例如专用教学机等。 单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等[4]。但是,单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于:单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件(编程)方法实现了。这种以软件取代硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。微控制技术是一种全新的概念,是对传统控制技术的一次革命。随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。 本论文第一章介绍了本次倒计时系统的设计目的、设计方案和开发意义;第二章对MCS-51单片机的部分基本原理和接口技术进行了阐述,其中大部分都是本次设计需要用到,比如中断原理、定时器等;最后一章介绍了本次倒计时系统设计的硬件电路设计和软件程序设计,以及Keil uVision3软件系统调试的步骤和方法,以完成系统设计。 第一章 倒计时系统简介 1.1设计要求 ① 以MCS-51系统单片机为核心器件,组成一个9999秒以内任意秒数的倒计时系统,即初值为9999秒以内任意秒数,以一秒的速度进行倒计时。 ② 系统有8个LED数码管显示器,选择低四位分别显示千位、百位、十位、个位,而高四位设置为一直是暗的,没有任何显示。 ③ 此倒计时设计能够通过矩阵键盘对倒计时器设定任何不大于9999秒的初值,同时设置有开始键、复位键,以达到可以重新设置初值的目的。 1.2方案说明 本设计的倒计时功能主要通过中央处理模块SST89E516RD、锁存器、矩阵键盘、LED数码显示器四个模块的硬件共同实现,具体如下图1.1。 图1.1 倒计时器的硬件模块 本系统首先通过中中央处理模块(SST89E516RD)对整个系统的状态进行判断(如定时器、中断等),它的输入输出口是双向接口,所以要通过锁存器来赋给不同的硬件接口不同的值。 然后通过键盘扫描原理对键盘进行扫描,返回扫描值,判断是否有键按下,如果有键按下,判断是哪个键被按下。如果是KC键被按下,则进入初值设置阶段,等待初值设置;如果键盘扫描判断到KF键按下,则表示开始倒计时。所有的设置初值、等待状况和倒计时状态都要通过LED数码显示器显示出来,体现本倒计时系统的功能。由于数码管的段选、位选和4*4的矩阵键盘的输入输出都是接到P0.0~P0.3口,所以需要锁存器来锁存不同时刻不同模块需要的P0.0~P0.3的值。 本系统由于数码显示器的8个二极管和位的选择的状态均由SST89E516RD的P0.0~P0.7来决定,所以需要锁存器(DM74LS573N)在需要的时候为其锁定相应的值,从而使显示器正确显示倒计时,如果没有锁存器则会出现很多错误并且不能实现功能。同理,锁存器SN74LS244N的功能也是一样的,判断矩阵键盘的输出值从而判断按下的键,实现键盘扫描原理的功能。 1.3系统功能 由于本来对C语言有一定的了解,再加上C语言的简单等优点,本设计采用的是C语言编程,而未采用汇编语言。通过倒计时系统的要求,逐步写出C语言程序。 通过Keil uVision3软件对程序进行编译,在确认程序无误的时候,将实验板插到电脑上(通过USB连接),进行硬件仿真。 刚上电时,LED数码显示器显示系统默认初值9999,并立即进行倒计时。如果需要重新设置小于系统初值的其他任何初始值,这个时候可以按下KC键,数码管四位清0并等待初值的设置,通过K0~K9(分别表示1,2…9,0)设置初值。 当初值设置完成后,再按下KF键开始进行倒计时。如果需要再一次设置初值的时候再次按下KC键,数码管的低四位又全部清0,重新等待设置初值。 第二章 MCS-51单片机基本原理 2.1 MCS-51单片机的组成原理 单片微型计算机简称单片机,它因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器 CPU、随机存储器RAM、只读存储器ROM、中断系统、定时器/计数器以及 I\O接口电路等主要微型机部件集成在一个芯片上。虽然单片机只是一个芯片, 但从组成和功能上看,它已具有了计算机系统的属性[11] 不同型号MCS-51单片机CPU处理能力和指令系统完全兼容,只是存储器和I/O接口的配置有所不同。其中8051主要包括算术/逻辑部件ALU、累加器A、只读存储器ROM、随机存储器RAM、程序计数器PC、定时器/计数器、I/O接口电路等,还有堆栈寄存器SP等部件。这些部件集成在一块芯片上,通过内部总线连接,构成完整的微型计算机。 2.1.1 80C51芯片介绍 MCS-51 的原生产厂商是 Intel 公司,最早推出 80C51 芯片的也是 Intel 公司,并且作为 MCS-51 的一部分,按原 MCS-51 芯片的规则命名,例如 80C31、80C51、87C51 和 89C51,这样我们就能很容易地认识 80C51 的系列芯片。 80C51 芯片内部集成了 CPU、RAM、ROM、定时/计数器和I/O口等各功能部件,并由内部总线把这些部件连接在一起。80C51单片机内部包含以下一些功能部件: ①一个8位CPU; ②一个片内振荡器和时钟电路; ③4KB ROM(80C51有4KB掩膜ROM,87C51有4KB EPROM,80C31片内有无ROM); ④ 128B内RAM; ⑤ 可寻址64KB的外ROM和外RAM控制电路; ⑥ 两个16位定时/计数器; ⑦ 21个特许功能寄存器; ⑧ 4个8位并行I/O口,共32条可编程I/O端线; ⑨ 一个可编程全双工串行口; ⑩ 5个中断源,可设置成2个优先级。 振荡器及 时序 OSC 8051CPU 程序存储器4KB ROM 数据存储器256B 2个16位定时器/计数器 64K总线扩展控制器 可编程I/O 可编程全双工串行口 图2.1 80C51单片机功能结构框图 2.2 MCS-51单片机的引脚功能 MCS-51单片机采用40引脚的双列直插封装(DIP)方式。图2.2左边为其引脚图,右边为为其逻辑符号图。在40条引脚中,有2条专用于主电源的引脚,2条外接晶体的引脚,4条控制引脚,3条I/O引脚[2]。 图2.2 左边为MCS-51引脚图,右边为MCS-51单片机逻辑符号图 2.3 中断 2.3.1中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断,如下图2.7。 图2.7 中断流程 引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B,对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。见下图2.8。 图2.8 中断系统 2.3.2 8051中断系统结构 80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。4个用于中断控制的寄存器IE、IP、TCON和SCON——用于控制中断的类型、中断的开/关和各种中断源的优先级别。5个中断源有两个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序的嵌套。8051单片机中断系统的结构如图2.9所示。 图2.9 中断系统结构 2.3.3 中断控制 (1)、中断允许控制寄存器IE 特殊功能寄存器IE为中断允许寄存器,控制CPU对中断系统所有中断以及某个中断源的开放和屏蔽(禁止),以及每个中断源是否允许中断。其格式为: EX0(IE.0):外部中断0允许位; ET0(IE.1):定时/计数器T0中断允许位; EX1(IE.2):外部中断0允许位; ET1(IE.3):定时/计数器T1中断允许位; ES(IE.4):串行口中断允许位; EA (IE.7):CPU中断允许(总允许)位。 (2)、中断源优先级设定寄存器IP 80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。 PX0(IP.0):外部中断0优先级设定位; PT0(IP.1):定时/计数器T0优先级设定位; PX1(IP.2):外部中断0优先级设定位; PT1(IP.3):定时/计数器T1优先级设定位; PS (IP.4):串行口优先级设定位; PT2 (IP.5) :定时/计数器T2优先级设定位。 同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如表2.1所示: 表2.1 同优先级中断源等级序号 序号 中断源 中断标志 优先级顺序 0 外部中断0 IE0 最高级 最低级 1 定时器T0中断 TF0 2 外部中断1 IE1 3 定时器T1中断 TF1 4 串行口中断 RI或TI 中断响应条件 ①中断源有中断请求; ②此中断源的中断允许位为1; ③CPU开中断(即EA=1)。 2.4 定时器与计数器 加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值[4]。 二、定时器控制字 1、工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下: 各位功能如下: (1) GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。 (2) :定时/计数模式选择位。=0为定时模式;=1为计数模式。 (3) M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。如下表2.2所示: 表2.2 定时/计数器工作方式设置表 M1M0 工作方式 说 明 00 方式0 13位定时/计数器 01 方式1 16位定时/计数器 10 方式2 8位自动重装定时/计数器 11 方式3 T0分成两个独立的8位定时/计数器;T1此方式停止计数 2、控制寄存器TCON TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下: TOCN各位功能如下: TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。 TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。 TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。 TR0(TCON.4):T0运行控制位,其功能与TR1类同。 第三章 倒计时器系统设计与调试 3.1 硬件电路设计 最小系统是单片机在发挥具体测控功能时所必须的组成部分[5]。倒计时器由单片机的最小系统就可以构成,单片机的最小硬件系统即倒计时器的硬件系统如图3.1所示。 图3.1 单片机的最小系统 这次设计的倒计时系统的硬件电路设计主要由中央处理模块、矩阵键盘、锁存器、LED数码显示器四个模块组成,再加上一些基本元器件实现倒计时的功能。其中不同的模块根据自己的的特点实现不同的功能,在整个系统中都起到了不可替代的作用。它们相辅相成,如果缺少任何一个模块或者任何一个元器件,都不可能完成本次设计。根据系统的需求可划分为以下4个部分。 3.2中央处理器模块 3.2.1 SST89E516RD芯片 图3.2是中央处理器(SST89E516RD)在本设计中的引脚图,其功能和前面介绍的MCS-51的功能基本一样。其中本次设计P0~P3口用到的是P0.0~P0.7口(作为输入输出口)、P1口的P1.0~P1.3口(分别是锁存器的使能端,从而控制着锁存器的应用)、左边的一个复位系统等等,各个引脚都实现了其应有的价值,从而实现倒计时系统的功能。 P0.0~P0.7分别命名为D0~D7,由于是双向口,即在作为输入口的同时还可以作为输出口,不过要通过不同的锁存器与不同的器件相连接,通过程序实现各种功能。 图3.2 中央处理器(SST89E516RD)引脚图 本次设计通过中央处理模块(SST89E516RD)对各个接口进行赋初值,并确定定时器、工作方式、中断等等,以下是详细介绍: ①本电路应用定时器0方式1工作方式,该方式是一个16 位计数器的计时中断法。所以工作方式寄存器TMOD的M1M0两位为01。 ②设置定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。比如,12M的晶振每秒可产生1M的机器周期[1],50ms就是50000个机器周期,定时器0工作方式1工作,计数长度为=65536个外部脉冲,65536-50000周期=初值15536,从15536开始计数,总共累加50000次计数器产生一次溢出,所以定时器的高八位和低八位TH0和TL0的值为: TH0 = (65536-TIME)/256; TL0 = (65536-TIME)%256;其中TIME=50000; 其中TL0是低八位当达到256的时候,向高八位进1,然后低八位重新计数,所以高八位对差值求整,低八位对差值求余。 ③由于采用的是定时器0所以TMOD的高四位为0000;选通控制只要用软件使TR0就启动了定时器,所以门控位GATE为0;表示设置为定时方式。所以工作方式TMOD=0000 0001H=0X01H。 3.2.2 单片机的复位电路设计 复位电路产生复位信号,复位信号送入 RST 后还要送至片内的施密特触发器,由片内复位电路在每个机器周器的S5P2 时刻对触发器输出采样信号,然后由内部复位电路产生复位操作所要的信号[11]。 一般的复位电路可分为上电自动复位和按键复位,在本次设计中选用的是按键复位。 单片机的第九脚RES为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如上图3-2所示。 图中由按键RESET以及电解电容C3构成了复位电路。由于单片机是高电平复位,所以当按下RESET时,单片机的9脚RESET管脚处于高电平,此时单片机处于复位状态。当上电后,由于电容缓慢充电,单片机的9脚电压逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上复位完毕,系统程序从0000H开始执行。值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值。 3.3锁存器 锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。只有在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号。通常只有0和1两个值。 在本次设计中,芯片SST89E516RD通过锁存器DM74LS573N(当锁存端LE与P1.0相接时)与LED数码管的段相接时,对数码管的段进行控制(当SEG7~SEG0=0111 1001时,如果选择第一位数码管亮的话,应该显示数字E)。当段选锁存器使能端LE=1(高电平)时,打开锁存器,此时SEG0~SEG7的值分别等于D0~D7(即P0.0~P0.7)的值,然后将使能端LE置为低电平,此时便将SEG0~SEG7的值锁定为刚才的值,不再随着D0~D7值的变而改变。 同理,芯片SST89E516RD通过锁存器DM74LS573N(当锁存端LE与P1.1相接时)与LED数码管的位相接时,控制数码管的位进行控制(当DIG7~DIG0=0111 1101时,此时则表示选择第二位数码管显示数据),确定是哪一位数码管显示数据。 其中当锁存器使能端LE与P1.1相连时的原理图见图3.3,当LE与P1.0相连的时候原理图基本一致。 图3.3 DM74LS573N使能端LE与P1.1相连时的原理图 而锁存器SN74LS244N所完成的功能是配合完成键盘扫描原理。如图3-4所示,锁存器的是锁存器的使能端,本设计是将P1.3与相连。当时,表示打开该锁存器,此时锁存器的输入值等于输出值(即A1~A4的值等于D0~D3的值);当时,表示关闭该锁存器,此时锁存器的输出端的值不再随输入端值的改变而改变,完成一次操作。 图3.4 SN74LS244N使能端与P1.3相连时的原理图 3.4 矩阵键盘 矩阵键盘又称为行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率,从而节约系统资源[12]。 图3.5 实验板键盘布局 实验板的键盘布局如图3.5所示,本次倒计时系统的设计一共用到了0~9号、C号、F号共12个按键。其中: 0~9号键——其中0~8号键分别代表数字1~9,9号键代表数字0,这10个键用来设置初值,键盘代号为K0~K9。 C号键——等待初值设置键,即无论在任何倒计时的过程中,若按下改建,则数码显示器四位清0,等待设置初值,键盘代号为KC。 F号键——开始键,即当初值设置后,按下该键,则开始减1倒计时,键盘代号为KF。 本设计实验板的4*4矩阵键盘的内部电路如图3.6示,矩阵键盘的行线直接与DIG0~DIG3口相连接,列线A1~A4是通过锁存器SN74LS244N的输出口Y1~Y4与芯片SST89E516RD的P0.0~P0.3(即D0~D3)口相连,通过锁存器的控制实现矩阵键盘扫描原理。 图3.6 本设计的矩阵键盘图 当无按键闭合时,A1~A4与DIG0~DIG3之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是: ①扫描第一行:置行线DIG3~DIG0输入为1110,观察列线输出数据A4~A1的值,如果输出的A4~A1为1110,则表示K0键被按下,如果值为1101,则表示K1键被按下……,这样即确定了第一行是否有键按下。 ②用扫描第一行的的方法进行逐行扫描,确定16个按键哪些键被按下,每次扫描出现按下的键的时候,返回扫描值,完成相应的操作和显示。 ③虽然综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。 3.5 LED数码显示模块 单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。 3.5.1 LED 数码显示器的结构 LED 数码显示器是一种有 LED 发光二极管组合显示字符的显示器件。它使用了 8 个 LED 发光二极管,其中 7 个用于显示字符,剩下的一个用于显示小数点,故通常称之为 7 段发光二极管数码器。在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。如图3.7所示。 图3.7 (a)为a到g在数码管的编排,(b)分别为共阴极、共阳极电路 当发光二极管导通时,它就会发光。每个二极管就是一个笔画,若干个二极管发光时,就构成了一个显示字符。若将单片机的I/O口与数码管的a——g及h相连,高电平的位对应的发光二极管亮,即I/O输出不同的代码,就可以控制数码管显示不同的字符。例如:当I/O输出得代码为0011 1111时,数码管显示的字符为0。这样形成的显示字符的代码称为显示代码或者段选码。本次设计的实验板用的共阴LED显示器,根据电路连接图16进制数字的显示代码如表3.1所示[2]。 表3.1 16进制数字的显示代码 16进制 h g f e d c b a 显示代码 0 0 0 1 1 1 1 1 1 3FH 1 0 0 0 0 0 1 1 0 06H 2 0 1 0 1 1 0 1 1 5BH 3 0 1 0 0 1 1 1 1 4FH 4 0 1 1 0 0 1 1 0 66H 5 0 1 1 0 1 1 0 1 6DH 6 0 1 1 1 1 1 0 1 7DH 7 0 0 0 0 0 1 1 1 07H 8 0 1 1 1 1 1 1 1 7FH 9 0 1 1 0 1 1 1 1 6FH A 0 1 1 1 0 1 1 1 77H B 0 1 1 1 1 1 0 0 7CH C 0 0 1 1 1 0 0 1 39H D 0 1 0 1 1 1 1 0 5EH E 0 1 1 1 1 0 0 1 79H F 0 1 1 1 0 0 0 1 71H . 1 0 0 0 0 0 0 0 80H 3.5.2 LED数码管显示方式 LED显示器工作方式有两种:静态显示方式和动态显示方式。 静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。 本次设计采用的是动态显示方式。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 3.6 软件设计 倒计时器的设计时可采用模块化程序设计的方法,模块化程序设计时应注意以下事项:首先,每个模块应具有独立的功能,能产生一个明确的结果;其次,模块之间的控制参数应尽量简单,数据参数应该尽量少。控制参数是指模块进入和退出的条件和方式,数据参数是指模块间的信息交换方式、交换量的多少及交换的频繁程度。最后,模块长度适中。模块语句长度通常在20~100条适合。如果模块太长时,分析和调试比较困难,失去了模块化程序的功能性;如果模块太短则信息交换太频繁,也不合适[16]。 由以上原则,本次设计的倒计时软件系统如下图3.8所示: 图3.8 倒计时设计软件框图 由上述硬件电路分析可知,本次设计采用的是定时器0、工作方式1,MAXTIME为9999秒的倒计时计数器。其中最重要的就是主程序的设计,因为无论多少个子程序模块,如果主程序没有能够合理正确的调用子程序的话,那么子程序就如同虚设。主程序的设计分为: ①主程序的初始化内容。所谓初始化,就是对用到的单片机内部部件或者扩展芯片进行工作状态设定,本设计调用了一个初始化的子程序init()。 ②引入键盘扫描程序,对按键key进行判断,判断哪个按键被按下,本系统设计调用的键盘扫描程序是keyscan()。然后对返回值进行判断:若key=0x18,则表示按下的键是KC(设置初值键)。然后关定时器0,等待初值并与最大值相比进行判断,引入初值设置子程序set-func()。若key=0x88,则表示按下的键是KF,开始计数。 ③调用显示子程序display()对以上操作和后面的倒计时进行显示。display()对倒计时在数码管上显示出来,引入中断子程序,根据中断子程序和主程序的语句开始进行倒计时。最后,根据主程序语句判断倒计时是否自减到0,并进行相应的操作。主程序流程图如图3.9所示。 图3.9 主程序流程图 3.6.1 程序准备 通过程序开始的赋初值和主程序的赋初值函数init()对系统进行赋值: TMOD = 0x01; TH0 = (65536-TIME)/256; TL0 = (65536-TIME)%256; //设置初值 ET0 = 1; //允许T0中断 EA = 1; //开总中断 TR0 = 1; //开定时器T0 由前面可知工作方式寄存器TMOD的值和TH0、TL0的值,ET0是T0溢出中断允许位,所以ET0=1表示允许T0中断;要引入中断,所以必须开总中断,所以EA=1;TR0是T0定时器运行控制位,置1表示启动T0。 3.6.2 键盘扫描程序设计 矩阵键盘的扫描程序keyscan()设计: if((P0&0x0f)!=0x0f) //判断是否有有键按下 { delay(1); if((P0&0x0f)!=0x0f) //再次判断列中是否是干扰信号,不是则向下执行 { sccode = 0xfe; //逐行扫描初值(即先扫描第1行) while((sccode&0x10)!=0) //行扫描完成时(即4行已经全部扫描完成)sccode为1110 1111停止while {…} 首先,根据列判断是否有键按下,没有返回则为0。若有值返回,则逐行扫描以确定按键所在的行,再确定按键所在列,从而最终确定该按键。其次,若有键按下,则延时去建抖动(delay(1);),然后进行扫描,找到闭合键并计算键值。最后,返回键值,并进行判断,建立有效标志,以对主程序的进行。流程图见图3.10[14]所示。 图3.10 键盘扫描程序 3.6.3 倒计时初值设置 倒计时初值设置程序中重要语句: case 0x11: //1->K0 temp = temp*10 + 1; break; 通过键盘扫描的返回值,确定即将执行的状态。若返回值为0x18,则表示按下的键为KC,由前面阐述可知,此时数码管四位清0,等待设置初值。同时,通过返回值也可以确定倒计时系统的初值,比如,返回值为0x11,则表示按下的键为K0,K0键表示数字1,则数码管显示数字1。同理,若返回值为0x21,则表示按下的键为K1,代表的值为2。但是由于之前,所以此时,则显示12……完成初值设置,数码管上显示已设置好的初值。此时若返回值为0x88,则按下的位开始键KF,此时开始进行减1倒计时。 3.7 倒计时模块子程序设计 中断程序: void timer0() interrupt 1 { TH0 = (65536-TIME)/256; //50ms产生一次中断 TL0 = (65536-TIME)%256; count++; } 倒计时程序模块: if(count == 20) { count = 0; data_set--; if(data_set == 0) { stop_timer0(); } } 倒计时模块设计:首先,初值设置。对计数值count赋初值0,对定时器0的高八位TH0和低八位TL0设置初值,然后开中断。其次,根据中断子程序及初值,50ms产生一次中断,计数器则加1,当计数器count加到20的时候,倒计时器减1,并且count清0依次循环程序。判断值是否为0,如果不为0,继续倒计时;如果为0,则关中断程序stop-timer0(),倒计时结束。倒计时模块设计流程图如图3.11所示。 图3.11 倒计时流程图 3.8 其他子程序设计 本次设计的倒计时系统,除了上述的子程序外,还有显示子程序、延时子程序delay()、锁存器的正确控制等。 其中显示子程序display()的编写很简单,以下语句实现了显示的四位数字: …… led_data[3] = Data/1000; led_data[2] = (Data/100)%10; led_data[1] = (Data/10)%10; led_data[0] = Data%10; //将四位数字分别赋给led_data[3]~ led_data[0] temp = 0xfe; for(i=0;i<4;i++) { …… P0 = table[led_data[i]]; LEDS = 0; temp = (temp<<1)+0x01; delay(5); } 首先将初值的四位通过程序分别赋给led_data[3]~ led_data[0],然后通过for语句的调用将四位数字在数码管上呈现出来。比如,当i=0时,通过前面的数组定义可知,P0= table[Data%10],显示个位。然后通过temp = (temp<<1)+0x01语句可知,接下来显示十位…… 每个子程序在主程序的调用过程中完成不同的功能,从而使主程序能够顺利的执行,以顺利完成9999秒的倒计时器的设计。 结 论 通过对MCS-51单片机原理和接口技术的初步了解,结合自己的专业知识和对C语言的基本认识,在导师的帮助指导下完成了基于单片机控制的9999秒倒计时系统的设计和这篇论文,本论文完成了以下几个方面的工作: ①介绍了本次倒计时系统的设计目的、设计方案和开发意义。 ②对MCS-51单片机的部分基本原理和接口技术进行了阐述,其中大部分都是本次设计需要用到,比如中断原理、定时器等; ③首先介绍了本次倒计时系统设计的硬件电路设计,包括中央处理模块、LED数码显示器模块、锁存器模块、矩阵键盘模块的设计;其次是软件程序设计,包括主程序设计和各个模块的子程序设计;最后是Keil uVision3软件系统调试的步骤和方法,以完成系统设计。 系统功能:一切就绪后,通过KC键等待初值设置
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服