单片机应用系统设计.ppt_第1页
单片机应用系统设计.ppt_第2页
单片机应用系统设计.ppt_第3页
单片机应用系统设计.ppt_第4页
单片机应用系统设计.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、第12章 单片机应用系统设计,12.1.1 单片机应用系统开发的基本过程,一系统需求与方案调研,系统需求与方案调研的目的是通过市场或用户了解用户对拟开发应用系统的设计目标和技术指标。通过查找资料,分析研究,解决以下问题: 1)了解国内外同类系统的开发水平、器材、设备水平、供应状态;对接收委托研制项目,还应充分了解对方技术要求、环境状况、技术水平,以确定课题的技术难度。 2)了解可移植的硬、软件技术。能移植的尽量移植,以防止大量低水平重复劳动。 3)摸清硬、软件技术难度,明确技术主攻方向。 4)综合考虑硬、软件分工与配合方案。单片机应用系统设计中,硬、软件工作具有密切的相关性。,可行性分析的目的

2、是对系统开发研制的必要性及可行性作出明确的判定结论。根据这一结论决定系统的开发研制工作是否进行下去。 可行性分析通常从以下几个方面进行论证: 1)市场或用户的需求情况。 2)经济效益和社会效益。 3)技术支持与开发环境。 4)现在的竞争力与未来的生命力。,二可行性分析,系统功能设计包括系统总体目标功能的确定及系统硬、软件模块功能的划分与协调关系。 系统功能设计是根据系统硬件、软件功能的划分及其协调关系,确定系统硬件结构和软件结构。 系统硬件结构设计的主要内容包括单片机系统扩展方案和外围设备的配置及其接口电路方案,最后要以逻辑框图形式描述出来。 系统软件结构设计主要完成的任务是确定出系统软件功能

3、模块的划分及各功能模块的程序实现的技术方法,最后以结构框图或流程图描述出来。,三系统功能设计,12.12.1 单片机应用系统的硬件组成,系统详细设计与制作就是将前面的系统方案付诸实施,将硬件框图转化成具体电路,并制作成电路板,软件框图或流程图用程序加以实现。,四系统详细设计与制作,系统调试是检测所设计系统的正确性与可靠性的必要过程。单片机应用系统设计是一个相当复杂的劳动过程,在设计、制作中,难免存在一些局部性问题或错误。系统调试可发现存在的问题和错误,以便及时地进行修改。调试与修改的过程可能要反复多次,最终使系统试运行成功,并达到设计要求。,五系统调试与修改,硬件调试是利用开发系统、基本测试仪

4、器(万用表、示波器等),通过执行开发系统有关命令或测试程序,检查用户系统硬件中存在的故障。它又可分为静态调试和动态调试两步:, 静态调试即用户系统未工作时的一种硬件检查。一般采用目测、万用表测试、加电测试等方法对印制电路板及各芯片、器件进行检查。 动态调试是在用户系统工作时发现和排除硬件故障的一种硬件检查。其一般方法是先进行各单元电路调试再进行全系统调试。,仿真调试 仿真调试分硬件调试、软件调试和系统联调三个阶段。(1)硬件调试,(2)软件调试 软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。 软件调试的一般方法是先独立后联机、先分块后组合、

5、先单步后连续。,(3)系统联调 系统联调是指让用户系统的软件在其硬件上实际运行,并进行软、硬件联合调试。,4程序固化及独立运行5文件编制阶段 文件应包括:,任务描述; 设计的指导思想及设计方案论证; 性能测定及现场试用报告与说明; 使用指南; 软件资料(流程图、子程序使用说明、地址分配、程序清单); 硬件资料(电路原理图、元件布置图及接线图、接插件引脚图、印制线路板图、注意事项等)。,系统硬件、软件调试通过后,就可以把调试完毕的软件固化在EPROM中,然后脱机(脱离开发系统)运行。如果脱机运行正常,再在真实环境或模拟真实环境下运行,经反复运行正常,开发过程即告结束。,六生成正式系统或产品,12

6、.2 单片机应用系统的硬件设计,12.2.1 硬件系统设计原则,一个单片机应用系统的硬件电路设计包括三个部分内容:一是单片机芯片的选择,二是单片机系统扩展,三是系统配置。,一、单片机芯片的选择,二、单片机系统扩展,单片机系统扩展是指单片机内部的功能单元(如程序存储器、数据存储器、I/O口、定时器/计数器、中断系统等)的容量不能满足应用系统的要求时,必须在片外进行扩展,这时应选择适当的芯片,设计相应的扩展连接电路;系统配置是按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D转换器、D/A转换器等,设计相应的接口电路。,单片机的选型原则,1.单片机的系统适应性 所谓系统适应性是指能否用这

7、个单片机完成对应用系统的控制任务。 主要考虑以下几点: 是否有所需的I/O端口数 是否有所需的中断源及定时器 是否有所需的外围端口部件 是否有合适的计算处理能力 是否有足够的极限性能,2单片机的可开发性(1)开发环境 包括汇编程序、编译、连接程序。 (2)调试工具 包括在线仿真器、逻辑分析工具、调试监控程序。,(3)在线BBS服务 包括实时执行、应用案例、缺陷故障报告、实用软件、样本源码。 (4)应用支持 包括是否存在专职的应用支持机构?是否存在应用工程师及销售人员的支持?支持人员的学识水平如何?是否有便利的通信工具,是否及时得到支持?,3制造商历史及可购买性 产品的性价比以及是否可靠? 购买

8、途径是否顺畅? 供货量是否充足稳定? 是否停产? 是否在改进之中?,总结 依据上述三个原则进行单片机的选型,应可以选择出最能适用于具体应用系统的单片机,同时可以保证应用系统具有高可靠性、高性价比、高使用寿命及可升级换代性。,三、系统扩展和配置设计遵循的原则,(1)尽可能选择典型通用的电路,并符合单片机的常规用法。 (2)系统的扩展与外围设备配置的水平应充分满足应用系统当前的功能要求,并留有适当余地,便于以后进行功能的扩充。 (3)硬件结构应结合应用软件方案一并考虑。 (4)整个系统中相关的器件要尽可能做到性能匹配。 (5)可靠性及抗干扰设计是硬件设计中不可忽视的一部分。 (6)单片机外接电路较

9、多时,必须考虑其驱动能力。,12.2.2 硬件设计,一程序存储器,二数据存储器,三I/O接口,四译码电路,五总线驱动器,六抗干扰电路,12.3 单片机应用系统的软件设计,一个应用系统中的软件一般是由系统监控程序和应用程序两部分构成的。其中: 应用程序是用来完成诸如测量、计算、显示、打印、输出控制等各种实质性功能的软件; 系统监控程序是控制单片机系统按预定操作方式运行的程序,它负责组织调度各应用程序模块,完成系统自检、初始化、处理键盘命令、处理接口命令、处理条件触发和显示等功能。,软件设计时,应根据系统软件功能要求,将软件分成若干个相对独立的部分,并根据它们之间的联系和时间上的关系,设计出软件的

10、总体结构,画出程序流程框图。画流程框图时还要对系统资源作具体的分配和说明。根据系统特点和用户的了解情况选择编程语言,现在一般用汇编语言和C语言。 汇编语言编写程序对硬件操作很方便,编写的程序代码短,以前单片机应用系统软件主要用汇编语言编写; C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,现在单片机应用系统开发很多都用C语言来进行开发和设计。,12.3.1 软件设计的特点,一个优秀的应用系统的软件应具有以下特点: (1)软件结构清晰、简捷、流程合理。 (2)各功能程序实现模块化,系统化。这样,既便于调试、连接,又便于移植、修改和维护。 (3)程序存储区、数据存储

11、区规划合理,既能节约存储容量,又能给程序设计与操作带来方便。 (4)运行状态实现标志化管理。各个功能程序运行状态、运行结果以及运行需求都设置状态标志以便查询,程序的转移、运行、控制都可通过状态标志来控制。,(5)经过调试修改后的程序应进行规范化,除去修改“痕迹”。规范化的程序便于交流、借鉴,也为今后的软件模块化、标准化打下基础。 (6)实现全面软件抗干扰设计。软件抗干扰是计算机应用系统提高可靠性的有力措施。 (7)为了提高运行的可靠性,在应用软件中设置自诊断程序,在系统运行前先运行自诊断程序,用以检查系统各特征参数是否正常。,12.3.2 资源分配,一程序存储器ROM/EPROM资源的分配,在

12、这些资源分配中,定时/计数器、中断、串行口等分配比较容易,这里介绍程序存储器和数据存储器的分配。,程序存储器ROM/EPROM用于存放程序和数据表格。按照MCS-51单片机的复位及中断入口的规定,002FH以前的地址单元作为中断、复位入口地址区。在这些单元中一般都设置了转移指令,用于转移到相应的中断服务程序或复位启动程序。当程序存储器中存放的功能程序及子程序数量较多时,应尽可能为它们设置入口地址表。一般的常数、表格集中设置在表格区。二次开发,扩展部分尽可能放在高位地址区。,RAM分为片内RAM和片外RAM。片外RAM的容量比较大,通常用来存放批量大的数据,如采样结果数据;片内RAM容量较少,应

13、尽量重叠使用,比如数据暂存区与显示、打印缓冲区重叠。 对于MCS-51单片机来说,片内RAM是指00H7FH单元,这128个单元的功能并不完全相同,分配时应注意发挥各自的特点,做到物尽其用。,二数据RAM资源分配,12.3.3 单片机应用系统开发工具,一个单片机应用系统经过总体设计,完成硬件开发和软件设计,就进行硬件安装。硬件安装好后,把编制好的程序写入存储器中,调试好后系统就可以运行了。但用户设计的应用系统本身并不具备自开发的能力,不能够写入程序和调试程序,这必须借助于单片机开发系统才能完成这些工作。单片机开发系统是能够模拟用户实际的单片机,并且能随时观察运行的中间过程和结果,从而能对现场进

14、行模仿的仿真开发系统。通过它能很方便的对硬件电路进行诊断和调试,得到正确的结果。,目前国内使用的通用单片机的仿真开发系统很多,如复旦大学研制的SICE系列、启东计算机厂制造的DVCC系列、中国科大研制的KDV系列、南京伟福实业有限公司的伟福E6000以及西安唐都科教仪器公司的TDS51开发及教学实验系统。它们都具有对用户程序进行输入、编辑、汇编和调试的功能。此外,有些还具备在线仿真功能,能够直接将程序固化到EEPROM中。一般都支持汇编语言编程,有的可以通过开发软件,支持C语言编程。例如可通过Keil C51软件来编写C语言源程序,编译连接生成目标文件、可执行文件,仿真、调试、生成代码并下载到

15、应用系统中。,12.4 单片机应用系统的抗干扰设计,1. 干扰源及干扰途径 单片机系统中的干扰有多种类型。 一种是来自空间辐射的干扰。可控硅逆变电源、变频调速器、发射机等特殊设备在工作时会产生很强的干扰,在这种环境中单片机系统难以正常运行; 另一种是来自电源的干扰。各种开关的通断、火花干扰、大电机启停等现象在工业现场很常见,这些来自交流电源的干扰对单片机系统的正常运行危害极大; 还有一种就是来自信号通道的干扰。在实际的应用系统中,测控信号的输入/输出是必不可少的。在工业现场中,这些I/O信号线、控制线有时长达几百米,不可避免地会把干扰引入到系统中。如果受控对象是强干扰源,如可控硅、电焊机等,则

16、单片机系统根本就无法运行。,2、硬件抗干扰措施 根据干扰的产生及传输特点,在硬件上可以采取以下措施: (1)硬件屏蔽。将系统安装在对电磁辐射干扰具有屏蔽作用的金属机箱中,并进行正确接地,可以有效地抑制强电设备产生的空间辐射干扰。 (2)光电隔离。对于开关量信号用光电耦合器隔离以后再进行输入/输出,对于模拟量信号可选用光电隔离器或变压器隔离后再进行输入/输出,并使用双绞线或屏蔽线进行信号传输,这样就可以有效地克服信号传输通道带来的干扰。 (3)电源滤波。对于来自电源的干扰,可采用低通滤波器以及带有屏蔽层的电源变压器来进行抑制。,(4)电源去耦。对于系统中每一片集成电路,在电源和地之间都加上去耦电

17、容,既是本芯片的蓄能电容,还能抑制高频噪声。 (5)在满足要求的前提下尽量用较低的时钟频率和低频的器件。 (6)合理布置元件在线路板上的位置,把模拟电路、高速数字电路和产生噪声的功率驱动部分合理地分开,各部件之间的引线尽量短,对各种输入/输出线分类打把,以减少寄生电容的干扰。 (7)系统中芯片的未用端不要悬空,应根据实际情况接到电源端、地端或已用端。 (8)尽量不用IC插座,而将集成电路直接焊接在电路板上。,3、软件抗干扰措施 (1)在程序中插入空操作指令实现指令冗余。系统在工作时容易因干扰而使PC指向程序存储器的非代码区,从而导致“死机”。为此可以在程序中插入一些单字节的空操作指令NOP,失

18、控的程序遇到该指令后得到调整而转入正常。 (2)对未用的中断向量进行处理。在程序中对未用的中断都编写出相应的错误处理程序,若因干扰触发了这些中断,则执行完简单的出错处理程序后可以正常返回。 (3)采用超时判断克服程序的死锁。在系统的数据采集部分,如A/D转换结果采用查询方式读取,若因干扰使A/D转换结束标志无效,程序就会进入死循环。针对类似情况,可在程序中采用超时判断,若系统在一定的时间内采不到有效的标志,就自动放弃本次采样,从而避免程序死锁的发生。,(4)采用软件陷阱。当程序因干扰而“跑飞”时,可在非程序区设置陷阱,强迫PC进入一个指定的地址,执行一段专门对死机进行处理的程序,使系统恢复正常

19、。软件陷阱可安排在未使用的中断区和未使用的大片ROM空间,可由以下三条指令构成: NOP NOP LJMP ERR,(5)采用看门狗。当程序“跑飞”而前述方法又没有捕捉到时,可以用看门狗来恢复系统的正常运行。具体设计时可以用软件实现,也可以用专用的看门狗芯片如MAX693、X25045等来实现。软件方法利是用单片机中未用的定时器进行定时,在主程序每一次循环的特定时刻刷新定时器的时间常数,若定时器因系统死机而得不到刷新,就会产生溢出而引起中断,在其中断服务程序中进行出错处理后转入正常运行。看门狗芯片也相当于定时器,系统在每一次循环中用一根口线使芯片复位,若芯片因系统异常而得不到复位,其接到MCU

20、复位端的溢出信号就能使系统恢复正常运行。,(6)采用数字滤波。为了提高数据采集的可靠性,减小虚假信息的影响,可以采用数字滤波的方法,如程序判断滤波、中值滤波、滑动平均值滤波、防脉冲干扰平均值滤波、一阶滞后滤波等。也可以对数据进行非线性补偿和误差修正,提高数据精度。,单片机系统的故障诊断,(1)同类比较法。 (2)分段检查法。 (3)隔离压缩法。 (4)故障跟踪法。 (5)振动加固法。 (6)拉偏检测法。 (7)直接查找法。,系统级故障诊断,在单片机系统的电气连接没有问题的条件下,可以进一步利用程序存储器中固化的系统自检程序对系统进行预定的几项检查。对系统故障进行检查时,一个十分有效的办法是利用

21、系统本身的自检功能,包括指令系统自检、数据存储器自检、程序存储器自检、I/O接口自检、传感器装置自检、调节机构自检等。自检手段不仅可用自检软件,而且还可以配置一定的自检硬件电路来实现系统自检。尤其是对于控制系统的末级部分,利用硬件手段效果更好。,12.5 设计实例:多功能数字钟,12.5.1 设计要求,设计制作具有下列功能的数字钟: l 自动计时,由6位LED显示器显示时、分和秒; l 具备校准功能,可以直接由0-9数字键设置当前时间; l 具备定时闹钟功能。,12.5.2 设计方案,1. 计时方案 利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分和秒的计时。 2. 键盘/显示

22、方案 设计方案中采用43键盘实现输入设置,采用动态显示方式实现LED显示,如图所示。,3、控制方案 (1)时间显示 上电后系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间。 (2)时间调整 按下C/R键(时间设定/启动计时键),系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间,按下09数字键可以顺序设置时、分和秒,并在相应的LED上显示设置值,6位设置完毕后系统将从设定后的时间开始计时显示。,(3)闹钟设置 按下ALM键(闹钟设置/启闹/停闹键),系统继续计时,显示00:00:00,进入闹钟设置状态,等待键入启闹时间,按下0-9数字键可以顺序进行相应的时

23、间设置,并在相应的LED上显示设置值,6位设置完毕后系统启动定时启闹功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下ALM键停闹,并取消闹钟设置。,12.5.3 硬件原理,数字钟电路由单片机、可编程I/O接口芯片8155、43键盘输入电路、6位LED显示输出电路及蜂鸣器启闹电路组成,如图125所示为系统电路原理图。 12.单片机:选用89C51可满足要求。 2I/O接口电路: 采用8155作为键盘/显示接口电路,其中8155的A口作为6位LED显示的位选口(低电平有效),B口作为段选口(高电平有效),C口的低3位为键盘输入口,对应02行,A口同时用做键盘的列扫描口。由系统电路原理图可

24、知:,8155的地址分配如下: 控制寄存器:8000H,定义为PORT A口:8001H,定义为PORTA B口:8002H,定义为PORTB C口:8003H,定义为PORTC,3 43键盘输入电路: 采用43键盘,包括09十个数字键(键号为00H09H)、C/R键(时间设定/启动计时键,键号为0AH)和ALM键(闹钟设置/启闹/停闹键,键号为0BH)。 4 LED数码显示电路: 采用共阴极数码管实现时钟显示,6位LED从左到右依次显示时、分和秒,采用24小时计时。 5 蜂鸣器启闹电路: 由89C51的P12.0控制驱动蜂鸣器(低电平有效)。,图125 数字钟硬件电路图,12.5.4 程序设

25、计,1.系统资源分配 定时器T0按照定时方式1工作,片内RAM及标志位的分配与定义见表121。,2主要程序设计 (1)主程序 实现初始化与键盘监控,流程图如图126所示。 (2)定时器T0中断服务程序 实现计时功能,同时刷新计时缓冲区。流程图如图127所示。 定时器T0每隔100 ms溢出中断一次(设系统使用6 MHz晶振,定时器T0工作在方式1的定时器初值为3CB0H,即TH0=3CH,TL0=0B0H),每循环中断10次则延时时间为1s,重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:00。,图126 主程序流程图,图127 计时流程图,(3)时间设置与闹钟

26、设置子程序 实现当前时间及定时启闹时间的键盘输入设置。流程图如图128所示。,图128 时间设置/闹钟定时流程图,其功能是用键盘设置子程序将键入的6位时间值送入键盘设置缓冲区,用合字子程序将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,送入计时缓冲区或闹钟值寄存区。若键盘输入的小时值大于23,分和秒值大于59,则不合法,将取消本次设置,清零重新开始计时。,(4)键盘扫描子程序,图129 键盘扫描程序流程图,作用: 判断是否有键按下,无键按下则循环等待,有键按下则求取键号后返回。流程图如图129所示。,图1210 显示程序流程图,(5)显示子程序 实现显示缓冲区的6位BCD码的动态扫描方

27、式显示。,(6)定时比较子程序 实现当前时间(计时缓冲区的值)与预设的启闹时间(闹钟设置寄存区的值)的比较,若二者完全相同时,启动蜂鸣器鸣叫并置位闹钟标志位。当重新按下ALM键时,停闹并清零闹钟标志。流程图如右图所示。,(7)其它辅助功能子程序 键盘设置子程序:将键入的6位时间值送入键盘设置缓冲区,流程图见图1212所示。 拆字子程序:将3字节计时缓冲区中时、分和秒压缩BCD码拆分为6字节BCD码并刷新显示缓冲区。 合字子程序:将键盘设置缓冲区中6位BCD码合并为3位压缩BCD码,送入计时缓冲区或闹钟值寄存区,同时检测时间值的合法性。,图1212 键盘设置子程序流程图,3源程序清单 主程序:

28、ORG0000H AJMP MAIN ORG 000BH AJMP CLOCK ORG 0030H PORT EQU 8000H PORTA EQU8001H PORTB EQU8002H PORTCEQU 8003H DISP0 EQU 30H DISP1 EQU 31H,DISP2 EQU 32H DISP3 EQU 33H DISP4 EQU 34H DISP5 EQU 35H HOUR EQU 3CH MIN EQU 3DH SEC EQU 3EH MSEC EQU 3FH AHOUR EQU 40H AMINEQU 41H ASEC EQU 42H F1 BIT PSW.1,MAIN

29、:MOV SP,#50H ;设置堆栈区 MOVX DPTR,#PORT ;8155初始化 MOVA,#03H MOVX DPTR,A CLR F1 ;清零闹钟标志位 CLRF0 ;允许计时显示 MOV AHOUR,#0FFH ;闹钟值寄存区置初值 MOV AMIN,#0FFH MOV ASEC,#0FFH MOV R7,#10H ;显示缓冲区、计时缓冲区清零 MOV R0,#DISP0 CLR A,LOOP: MOV R0,A INCR0 DJNZ R7,LOOP MOV TMOD,#01H ;定时器T0初始化 MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 ;启动定时

30、器 SETB EA ;开中断 SETB ET0 BEGIN:ACALLALARM ;调用定时比较 ACALLKEYSCAN;调用键盘扫描 CJNEA,#0AH,NEXT1;是C/R键否? CLR TR0 ;暂时停止计时,MOV R1,#HOUR ;地址指针指向计时 缓冲区首地址 AJMPMOD,NEXT1:CJNE A,#0BH,BEGIN;是ALM键否? JBF1,NEXT2;闹钟正在闹响否? MOV R1,#AHOUR;地址指针指向闹钟值寄存区 首地址 MOD: SETBF0;禁止显示计时时间 ACALL MODIFY ;调用时间设置/闹钟定时程序 SETBTR0 ;重新开始计时 CLR

31、F0 ;恢复显示计时时间 AJMP BEGIN,NEXT2: SETBP12.0 ;闹钟正在闹响,停闹 CLRF1;清零闹钟标志 AJMPBEGIN 定时器T0中断服务子程序: CLOCK:PUSHPSW PUSHACC;保护现场 MOV TL0,#0B7H MOVTH0,#3CH;重装初值,时间校正 INCMSEC MOVA,MSEC CJNEA,#0AH,DONE MOVMSEC,#00H,MOVA,SEC INCA DAA;二十进制转换 MOVSEC,A CJNEA,#60H,DONE MOVSEC,#00H MOVA,MIN INCA DAA MOVMIN,A CJNEA,#60H,D

32、ONE,MOVMIN,#00H MOVA,HOUR INCA DAA MOVHOUR,A CJNEA,#24H,DONE MOVHOUR,#00H DONE:POPACC POPPSW RETI,时间设置/闹钟定时子程序: MODIFY:ACALL KEYIN;调用键盘设置子程序 ACALL COMB ;调用合字子程序 RET 键盘设置子程序: KEYIN:PUSHPSW ;保护现场 PUSH ACC SETB RS1 MOVR0,#DISP0 ;R0指向显示 MOVR7,#06H ;设置键盘输入次数 L1: CLR RS1 ACALL KEYSCAN ;调用键盘扫描程序取按下键号 SETBR

33、S1,CJNEA,#0AH,L2;键入数合法性检测(是否大于9) L2: JNC L1 ;大于9,重新键入 MOVR0,A ;键号送显示缓冲区 INCR0 DJNZ R7,L1 ;6位时间输入完否?未完继续 CLR RS1 ;恢复现场 POPACC POPPSW RET,键盘扫描子程序: KEYSCAN: ACALLTEST ;调判按键是否按下子程序TEST JNZ REMOV ;有键按下调消抖延时 ACALLDISPLAY ACALLALARM AJMPKEYSCAN ;无键按下继续判是否按键 REMOV: ACALL DISPLAY ;调用显示子程序延时消抖 ACALLTEST ;再判是否

34、有键按下 JNZ LIST ;有键按下转逐列扫描 ACALLDISPLAY ACALL ALARM AJMPKEYSCAN ;无键按下继续判是否按键 LIST: MOVR2,#0FEH ;首列扫描字送R2 MOVR3,#00H ;首列键号送R3,LINE0: MOVDPTR,#PORTA ;DPTR指针指向 ; 8155的A口 MOV A,R2 ;首列扫描字送R2 MOVX DPTR,A ;首列扫描字送8155的A口 MOV DPTR,#PORTC ;DPTR指针指向8155的C口 MOVX A,DPTR ;读入C口的行状态 JB ACC.0,LINE1 ;第0行键无键按下,转第1行 MOVA

35、,#00H ;第0行有键按下,行首键号送A AJMPTRYK ;求键号 LINE1: JBACC.1,LINE2 ;第1行键无键按下,转第2行 MOV A, #04H ;第1行有键按下,行首键号送A AJMPTRYK ;求键号 LINE2: JB ACC.2,NEXT ;第2行键无键按下,转下一列 MOV A,#08H ;第2行有键按下,行首键号送A,AJMPTRYK ;求键号 NEXT: INCR3 ;扫描下一列 MOV A,R2 ;列扫描字送A JNB ACC.3,EXIT ;4列扫描完,重新进行下一轮扫描 RL A ;4列未扫描完,扫描字左移扫描下一列 MOV R2,A ;扫描字送A A

36、JMP LINE0 ;转向扫描下一列 EXIT: AJMP KEYSCAN ;等待下一次按键 TRYK: ADDA, R3 ;按公式计算键码,求得键号 PUSH ACC ;键号入栈保护 LETK: ACALLTEST ;等待按键释放 JNZ LETK ;按键未释放,继续等待 POP ACC ;按键释放,键号出栈 RET,TEST: MOVDPTR,#PORTA ;DPTR指针指向8155的A口 MOV A,#00H MOVX DPTR,A ;全扫描字00H送8155的A口 MOVDPTR,#PORTC ;DPTR指针指向8155的C口 MOVXA,DPTR ;读入C口行状态 CPL A ;A取

37、反,以高电平表示有键按下 ANL A,#07H ;屏蔽高5位 RET,显示子程序: DISPLAY:JB F0,DISP ;允许时间显示标志F0=1转DISP ACALL SEPA ;否则调用SEPA刷新显示缓冲区 DISP:PUSHPSW ;动态扫描显示子程序 PUSH ACC SETB RS0 MOV DPTR,#PORTA ;关显示 MOV A,#0FFH MOVX DPTR,A MOV R0,#DISP0 MOV R7,#00H MOV R6,#06H MOV R5,#0FEH DIS1: MOVDPTR,#TAB,MOVA,R0 MOVC A,A+ DPTR MOVDPTR,# PORTB MOVX DPTR,A MOV DPTR,# PORTA MOVA,R5 MOVXDPTR,A HERE: DJNZ R7,HERE INC R0,MOV A,R5 RLA MOV R5,A DJNZR6,DIS1 CLR RS0 POP ACC POP PSW RET TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH

温馨提示

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

评论

0/150

提交评论