《课程设计论文基于单片机的太阳能热水器智能控制器的设计(汇编语言).doc》由会员分享,可在线阅读,更多相关《课程设计论文基于单片机的太阳能热水器智能控制器的设计(汇编语言).doc(22页珍藏版)》请在三一办公上搜索。
1、论文摘要太阳能热水器以其诸多的优点受到人们的欢迎。本文结合实际太阳能热水器的具体应用,在介绍太阳能、传感器、单片机的特点基础上,详细描述了太阳能热水器的工作原理和设计方案。这里根据太阳能热水器对控制器的要求与特点,提出了一种基于DS12887的太阳能热水器智能控制器的设计方法,给出了系统硬件设计及软件实现方法。全文分三大部分。第一部分包括第一章,描述太阳能的利用和前景发展状况。第二部分包括第二章,描述太阳能系统组成及工作原理。第三部分包括第三、四章硬件设计及电路原理和软件设计,分别介绍了传感器的特点及应用、一般的太阳能热水器及循环系统、单片机发展和原理,这也是此款太阳能热水器的理论基础和必要前
2、提。关键词: 太阳能热水器;传感器; 模糊控制; 实时时钟;单片机 1绪论1.1太阳能热水器的发展概况及市场竞争分析目前,中国已成为世界上最大的太阳能热水器生产国,年产量约为世界各国之和,已有一百多家太阳能热水器生产厂。但是与之配套的太阳能热水器控制器却一直处在研究与开发阶段。这种控制器只具有温度和液位显示功能, 而且为分段显示,温度显示误差为10%,水位显示误差为25%。这种显示器(还称不上控制器)不具有温度控制功能,当由于天气原因而光强不足时,就会给热水器用户带来不便;即使热水器具有辅助加热功能,由于加热时间不能控制而产生过烧,从而浪费大量的电能。本文设计的太阳能热水器控制器以80C51单
3、片机为检测控制核心,采用DS12887 实时时钟,不仅实现了时间、温度和水位三种参数实时显示和FUZZY控制功能,而且具有时间设定、温度设定与控制功能。温度控制采用模糊控制, 控制器可以根据天气情况利用辅助加热装置使蓄水箱内的水温在设定时间达到预先设定的温度,从而达到24小时供应热水的目的。太阳能热水器是太阳能利用中最常见的一种装置,经济效益明显,正在迅速的推广应用,太阳能热水器能够将太阳辐射能转换热能,供生产和生活使用。他主要由平板集热器、蓄水器和连接管道等部件组成,可分循环式、直流式和闷晒式。 此款热水器包括主、从两大系统:主系统的特点是在晴好的天气利用太阳光能为热水器加热;从系统相当于电
4、热水器,它在无光照的情况下利用电辅助加热。它充分利用太阳能的丰富的免费的资源的优势,同时考虑到在阴天及夜间无法利用太阳能的缺点,充分发挥太阳能热水器和电热水器的各自优势,这是世面上大部分热水器所不能比拟的。1.2太阳能热水器的应用及意义众所周知,太阳能是取之不尽,用之不竭,没有污染的巨大能源。随着世界上煤、油、气的储量日益减少,能源危机已日益增长,环境污染的危机已威胁着生态平衡,太阳能开发利用的课题已提到人类的面前。有人预测:二十一世纪太阳能将由辅助能源上升为主要能源。但由于太阳能的分散性、季节性和地区性又给太阳能利用带来重重困难,有些技术难点尚未突破,产品造价偏高(如光电池)。因而尚未被人们
5、大规模的使用。在太阳能热利用技术中,太阳能热水器是技术上比较成熟、造价比较低廉的产品,同时给人民提供不耗能源、保护环境、绝对安全的热水而受到人们的欢迎。太阳能热水器是以太阳能光热转换,利用温室效应和虹吸原理使水加热的装置,此装置分为两个不同的概念:1.太阳能热水工程系统,这种系统由太阳能集热器、储水箱管线、补水箱组成不同形式的热水系统,包括自然循环式、定温放水式等等,可构成提供热水10吨到100吨的装置,大多提供集体单位使用。2.太阳能热水器是指将上述各种不见组装成一个小系统,提供家庭或需要产热水1吨以下的单位使用,此种装置算为太阳能热水器。太阳能热水器(或系统)均以其采光面积作为计量单位,一
6、般1平方米光面积可产热水100升,采光面积每种型号不同,一般在1.52.0平方米。国内外太阳能热水器使用量增长如此之快,其根本原因是:能源问题、环保问题是当今世界各国面临的主要问题之一。太阳能热水器是节能、环保产品,故受到广泛重视,发展极快,预计今后每年将以15%20%的速度发展。2太阳能热水器的组成及工作原理2.1 系统总体结构设计 排气管 不锈钢保温水箱图2-1系统结构图图2-1为系统设计的结构图,该图的系统控制原理图如下图2-2: T3 T2 F 3 热 集 水 热 太阳光 F1 箱 器 T1 D 自来水 F2图2-2 系统控制原理图注释:T1:热水箱的温度传感器T2:循环水管中的温度传
7、感器T3:集热器中的温度传感器F1:循环水阀门F2:冷水阀门F3:热水阀门此款热水器利用微机控制主要有以下几种控制功能:晨水加热控制、温水循环控制、冷水集热控制、水箱加热控制。2.3 主要芯片的结构与特点1.主要技术特点DS12887/DS12C887 具有下列主要技术特点:(1) 具有完备的时钟、闹钟及到2100年的日历功能,可选择12小时制或24小时制计时,有AM和PM、星期、夏令时间操作,闰年自动补偿等功能。(2) 具有可编程选择的周期性中断方式和多频率输出的方波发生器功能。(3) DS12887内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114bit作掉电保护用的
8、低功耗RAM。(4) 由于该芯片具有多种周期中断速率时钟中断功能,因此可以满足各种不同的待机要求,最长可达24小时,使用非常方便。(5) 时标可选择二进制或BCD码表示。(6) 工作电压: + 4. 55. 5V、工作电流:715mA。(7) 工作温度范围:070C。2.3.2 80C51单片机结构特点微型计算机的出现与发展已广泛应用到各行各业中,使人们的日常生活工作都发生了重大变化,如果没有微型计算机,人们的工作生活的质量都受到很大的损失。单片微型计算机是微型计算机发展中的一个重要分支,其独特的结构与性能,越来越普及地应用于国民经济的各个领域,以下主要介绍80C51单片机,它与微型计算机的区
9、别是什么,单片机发展概况;它的特点和应用,通过对本节的学习,使大家对单片微型计算机有个初步的认识和了解。一、单片机的组成单片微型计算机简称单片机,它在一块芯片上集成了各种功能部件:中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、定时器/计数器、和各种输入/输出(I/O)接口(如并行I/O口、串行I/O口和A/D转换器)等。他们之间相互连接图如2-6图,构成一个完整的微型计算机。图2-6 单片机结构框图二、 80C51单片机的引脚描述及片外总线结构1.芯片的引脚描述CHMOS制造工艺的80C51单片机采用40引脚的双列直插封装(DIP方式),在单片机的40条引脚中有2条专用
10、于主电源的引脚,2条外接晶体的引脚,4条控制与其它电源复用的引脚,32条输入/输出(I/O)引脚。下面按其引脚功能为四部分叙述这40条引脚功能。(1) 电源引脚VCC和VSS。其中:VCC(40脚)接+5V电压。VSS(20脚)接地。(2) 接晶体引脚XTAL1和XTAL2。 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对CHMOS单片机,此引脚作为驱动端。XTAL2(18脚)接外部晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对CHMOS单片机,该引脚悬浮。(3) 控制
11、或与其他电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP。ST/VPD(9脚):当振荡器运行时,在此引脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚接一个约8.2K的下拉电阻,与VCC引脚之间连接一个约10uf的电容,以保证可靠地复位。(4)VCC掉电期间,此引脚可接上备用电源,以保持内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围内,VPD就向内部RAM提供备用电源。(5)ALE/PROG(30脚):当访问外部存储器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频
12、率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。对于EPROM型的单片机,在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。(6)RSEN(29脚):此脚的输出是外部程序存储器的读写选通信号。在从外部程序存储器取令(或常数)期间,每个机器周期两次PESN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现,PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。(7)EA/VPP:当E
13、A端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH时,将自动转向执行外部程序存储器内的程序,当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器,对于常用的80C51来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。对于EPROM型单片机,在EPROM编程期间,此引脚也用于施加21伏的编程电源(VPP)。输入/输出I/O引脚P0、P1、P2、P3共32根。a)P0口(39脚32脚):是双向8位三态I/O口,外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LSTTL负载。b)P1口(1脚8脚):是8位准
14、双向I/O口由于这种接口输出没有高阻状态,输入也不能琐存,故不是 真正的I/O口。门口能驱动(吸收或输出电流)4个LSTTL负载,对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它的接收低8位地址。c)P2口(21脚28脚):是8位准双向I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址,在对EPROM编程和程序验证期间,它的接收高8位地址。P2可以驱动(吸收或输出电流)4个LSTTL负载。d)P3口(10脚17脚):是8位准双向I/O口,在80
15、c51中,这8个引脚还用于专门功能,是复用双功能口,P3能驱动(吸收或输出电流)4个LSTTL负载。作为第一功能用时,就作为普通的I/O口用,功能和操作方法与P1口相同。2.3.3 数字温度传感器DS18B20主要特性及测温原理 一线式数字温度传感器DS18B20是DS1820的更新换代产品(由美国DA IIAS公司生产)。它具有体积小,分辨率高,转换快等优点。由于每片DS18B20 含有唯一的硅串行数, 所以在一条总线上可以挂接多达248 2181014只DS18B20,再加上DS18B20 独特的单线总线结构,决定了DS18B20 特别适合于大型的多路温度实时测控系统的温度检测。温度实时测
16、控集装箱的设计, 在实现测控系统的温度检测方面就较好地利用了DS18B20 的独到特点,使系统得到了极大的简化。一、DS18B20的特性(1) 独特的单线接口方式。DS18B20 在I/O处理器连接时,仅需要一个I/O 口即可实现微处理器同DS18B20的双向通讯。(2) DS18B20支持组网功能,多个DS18B20可以并联在唯一的单线上,实现多点测温。(3) DS18B20 的测温范围为: - 55+125,在-10+ 85时, 其精度为+ 015。(4) DS18B20的测温结果的数字量位数从912位,可编程进行选择。(5) DS18B20内含寄生电源,器件既可以由单线总线供电,也可用外
17、部的电源(310V515V )供电。, 3太阳能热水器硬件设计3.1.太阳能控制器硬件结构根据控制要求,采用80C51单片机的智能控制器结构框图如图1所示。由于本系统运算量不是很大, 没有太多的中间数据需要处理、保存,因此不再外扩数据存储器。仅使用80C51 内部RAM已完全能够满足要求。系统的硬件接口电路包括:控制器实时时钟接口电路,蓄水箱温度和水位检测接口电路、设定键和串行显示接口电路、看门狗和复位接口电路以及继电器输出接口电路等。 图3-1 太阳能控制器硬件结构图3.2. 控制器实时时钟接口电路为实现热水器24小时供应热水的目的,控制器必须有一个实时时钟来为系统提供准确的基准时间;在软件
18、设计上则要实时地读出当前时间,同设定时间比较,以决定系统工作状态。本系统采用美国DALLA S半导体公司最新推出的时钟芯片DS12887,该芯片采用CMOS 技术,把时钟芯片所需的晶振和电池以及相关的电路集成到芯片内部,并与MC146818管脚完全兼容。DS12887芯片具有微功耗、外围接口简单、精度高,工作稳定可靠等优点。它与80C51单片机的接口电路见下图3-2。 8 +5V 5.1K +5V 1K C 图3-2 DS12887与单片机接口电路模式选择脚MOT接地, 选择IN TEL时序。DS12887 的高位地址用80C51 的P2.4 选择,则时钟芯片的高8位地址为EFH,而其低8 位
19、地址则由芯片内部各单元的地址来决定(00H80H),DS12887 的中断输出端IRQ 接上拉电阻,同80C51中断线IN TO相连,为单片机提供中断信号。SQW端口编程为2Hz方波输出,经二分频后,驱动两个LED发光二极管作为时钟的秒闪烁显示。3.3.水位检测和温度检测接口电路蓄水箱水位和温度检测部分是实现温度智能控制的重要环节,只有准确地检测出水位和温度,才能通过软件计算提前开始辅助加热的预加热时间。要实现辅助加热提前时间的精确计算,最好是采用连续液位传感器,但考虑系统成本,本设计仍采用分段式液位传感器(通过软件来提高精度),在水位显示上也仍采用分段显示。水位检测部分的硬件连接如图3所示。
20、图3-3 水位监测及显示接口电路检测原理如下:当水箱中无水时,8个非门均由1M欧姆电阻上拉成高电平, 所以图中各“非”门(CD4069) 输出均为低电平,LED1 LED8 均不亮。当水位高于“非”门1 的输入探针时,由于水的导电作用,使“非”门1 的输入变为低电平,所以其输出变为高电平,LED点亮,依此类推。随着水位的上升,各“非”门输出相继为高电平,LED依次点亮。这里要注意的是上拉电阻不能选择太小,因为水的电阻在100k8 左右,所以上拉电阻选择太小的话,将在水位升高时,无法把“非”门输入端拉成低电平。实验表明, 上拉电阻选择在500k1M欧姆左右能很好地满足电路的工作要求。为了使80C
21、51 随时能够读出当前的水位情况,这里选用74L S244 作为状态输入缓冲器。蓄水箱温度检测电路采用DS18B20芯片使其换成脉冲信号,送到80C51的I/O 口(编程为计数器工作模式),通过测量输出脉冲频率的大小来换算成水温高低信号。3.5 键盘和显示接口电路的设计3.5.1 键盘电路 下图为80C51单片机P1口构成的中断方式4*4键盘电路。P1.0-P1.3为行线,P1.4-P1.7为列线,行线与4输入与门74HC21的一组输入端相连,输出端与外部中断INT1相连。16个键号Ki(I=0-15)次序如图中标注。 时 钟 INT1 74HC2110K*4VCC P1.0 A B C D
22、P1.1 P1.2 P1.3复 位、 P1.4 P1.5 P1.6 P1.7 80C51图3-4 80C51 P1口构成的4*4中断方式键盘 行列式键盘处理程序较为复杂,当有键按下时74HC21输出端出现低电平请求中断;在中断服务程序中要再次确认是否真有键按下,真有键按下时,再查出是哪个键按下,把该键的键号送入堆栈保护,等待键释放后再将键号弹出A中。该键盘输入处理程序的出口状态是键号在A中。设计中断程序时,先在主程序中将中断系统初始化,并开中断。在试验演示中通常开中断都设置循环等待。3.5.3 显示接口电路的设计键盘和显示电路是人机交互的重要手段。控制键是用户干预系统运行的唯一接口,也是用户比
23、较关心的问题。为了实现控制器对时间与温度的设定及显示功能,串行显示电路采用串入并出芯片74LS164驱动4位数码管实现时间与温度的静态显示。该电路只使用80C51的3个端口,配接4片串入并出移位寄存器74LS164 与1片三端可调稳压器LM317T。其中74LS164 的引脚Q0Q7为8位并行输出端;引脚A、B 为串行输入端;引脚CL K为时钟脉冲输入端,在CLK 脉冲的上升沿作用下实现移位,在CLK = 0 、清除端MR =1时,74LS164保持原来数据状态;MR =0 时,74LS164输出清零,其显示电路如3.5.3图。图3-5 串行口扩展的4位LED显示电路其工作过程如下:80C51
24、的串行口设定在方式0移位寄存器状态下,串行数据由P3.0发送,移位时钟由P3.1 送出。在移位时钟的作用下,串行口发送缓冲器的数据一位一位地移入74LS164中。4片74LS164 串级扩展为4个8 位并行输出口,分别连接到4个LED显示器的段选端作静态显示。需要指出的是,由于74LS164 无并行输出控制端,因而在串行输入过程中,其输出端的状态会不断变化,造成不应显示的字段仍有较暗的亮度,影响了显示的效果。以往的做法是在74LS164 的输出端加接4片锁存器或三态门,使移位寄存器串行输入数据时其输出端的变化不反映到LED上,待串行输入结束后再打开锁存器或三态门,将稳定的显示数据送给LED。3
25、控制器的软件设计4.1 主程序设计热水器不论在什么样的天气里,都能够在设定的时间向用户提供设定温度的热水,从而给用户带来便利。当控制器在设定的时间使水温达到设定温度时,将通过声光报警提醒用户。根据这一要求,控制器软件设计采用模块化结构,包括主程序、键盘中断子程序、DS12887更新周期结束中断子程序、LED显示子程序和提前加热时间计算子程序等。系统主程序主要完成温度和水位的检测以及进行辅助加热时间预算和一些初始化功能。在主程序中采用了查表方法进行辅助加热提前量预算。系统主程序流程图如图4所示。图4-1 系统程序流程图对于温度和时间设定, 每次设定结束后, 就将设定值存入DS12887 的非易失
26、性RAM中,下次开机时进行读取。这样作至少有两个优点:一是系统在不进行设定时,就认定该设定值和先前一次一样,解决了每次开机总要从头设定的问题,另一个是若系统在运行中间停电而再次来电时,可以不用重新设定, 就能按原设定值对温度进行控制,增强了控制器适应外界变化的能力。对提前加热时间的计算,则是系统能否实现预定功能的重要一环。因为系统采用分段式水位检测,若采用能量守恒的方法对提前加热时间进行预算,也同样得不到精确的结果。为了避开繁琐的计算过程,本系统中采用了模糊控制思想,使用了如下一些控制语句:IF 水位高AND 温度差大THEN 加热时间长IF 水位适中AND 温度差适中THEN 加热时间适中I
27、F 水位低AND 温度差低THEN 加热时间少4.2显示子程序分析表明,移位寄存器74LS164仅有串入并出作用没有译码功能。因此,在编写显示驱动程序之前,首先需要计算列写出与本电路对应的LED段选码 ,然后由80C51的P3.0口送入74LS164的串行输入端,再并行输出到LED 的段选端。需要指出的是,上面显示电路采用TOS28106BHK型号的共阳极LED显示器,根据PCB印制线路板的连线方便,其LED的8个段选端与74LS164的并行输出口即8根段选线的连接没有遵照通常的规律,而是如图3-5所示的段排列为7、6、4、2、1、9、10、5,相应的段选码也要重新计算,如显示字符0的段选码为
28、11H,显示字符1的段选码为D7H等。另外,这种稳定的静态显示方式也省去了CPU的动态扫描过程,此为上述电路的又一特点。电路中设计了4位LED显示器,其功能为:左首位为百位数或标志位,左二位为十位数,左三位为个位数,左四位为小数点后的十分位数。据此,给出如图4-3所示的显示子程序框图。 结束语该控制器和以往显示仪相比具有性能价格比高、温度控制与显示精度高、使用方便和性能稳定等优点。单片机控制系统具有低价、智能的优势,能够根据需求的不同而作相应的调整,更加个性化。同时,使用单片机控制系统能够节约能源,保护设备,延长设备的使用时间。该热水器具备以下特点:1 结构简单、运行可靠、操作维护简便。2 热
29、源取之不尽用之不竭,不需要运输,节省燃料。3 无污染,不会对周围环境造成任何影响。4 热水产量受季节、地区纬度、采热面积、采热器类型、环境温度、供水温度、风速、日照实际等因素影响较大。5 该系统加装减压阀后可与锅炉配套使用,解决冬季用水。6 不用考虑玻璃盖的防冻装置。参考文献 1 刘福才、 刘丰、刘立伟 AVR单片机在太阳能热水器智能控制器中的应用。微计算机信息, 1999, 4。 2 王长胤、 文军 单片单板机原理及应用M 。 武汉:武汉大学出版社, 1993。 3 向奇汝 多功能温度控制器J 自动化与仪器仪表,1999 4 Tom Fox Build the Intelligent The
30、rmometer J 。Computer & Electronics。 January, 1983。4 何立民 单片机中、高级教程 北京航空航天出版社 19995 郭廷玮 太阳能利用和前景 科学普及出版社 19866万福君、潘松峰 单片机原理系统设计与应用 科学技术大学出版社 20017 潘永雄、沙河、刘向河 电子线路CAD实用教程西安电子科技出版社20018 何克忠、李伟 计算机控制系统 清华大学出版社 19989 周政新 电子设计自动化实践与训练 中国民航出版社 199810丁志刚、李刚民 单片微型计算机原理与应用 北京电子工业出版社 199011王福瑞 单片微机测控系统设计大全M . 北
31、京:北京航空航天大学出版社,1999.12金伟正 单线数字温度传感器的原理及应用 电子技术应用,200013王建萍 串行LED显示驱动器及应用 电子技术应用 1996主程序:ORG 000HJMP STARTSTART: Curtemp EQU 10H ;Curtemp存储地址 Pretemp EQU 11H ;Pretemp存储地址MOV TMOD, #53H LCALL InitDS12887 ;初始化DS12887时钟芯片 SETB EA ;开CPU中断 LCALL ReadTempandTime ;读温度时间设定值 LCALL ReadWaterandPosition;读水位高度 CL
32、R C ;C清零 SUB Curtemp,pretemp JC OffheatHeatcontinue: LCALL FUZZY ;预算提前加热时间 LCALL DELAY LCALL Heat SJMP $OffHeat:CLR P2.1 RETI Heat: SETB P2.1 LCALL DELAY CLR C LCALL ReadTemp MOV A, Curtemp ADD A, #2H SUB A, Pretemp JNC KeepTemp JMP Heatcontinue LCALL KeeptempCON RETIInitDS12887: SETB P2。1 MOV DPTR,
33、 #0BH ;初始化DS12887B寄存器 MOV A, #22H ;置DS12887 24小时模式 MOVX DPTR, A ;允许报警中断禁止其它中断 MOV DPTR, #0AH ;初始化DS12887 A寄存器 MOVX A, #20H ;时钟频率52.628KHZ,禁止SQW MOV DPTR, #00H ;初始化时钟 MOV A, #00H MOVX DPTR, A ;秒 MOV DPTR, #02H ;分 MOV DPTR, A MOV DPTR, #04H ;时 MOV A, #12H MOV DPTR, A RETIReadTempandTime: LCALL ReadTem
34、p LCALL ReadTime RETI ORG 0013H JMP KeyBoardINTKeyBoardINT:LED显示子程序:DISI:SETB P1.7 ;灭显示MOV R0, #SBCDMOV A, R0 ;取出要显示的数ADD A, #2DH ;加上偏移量MOVC A , A+PC ;查表取出段选码MOV SBUF, A ;送出显示DL1:JNB TI, DL1 ;输出完否?CLR TI ;完,清中断标志INC R0MOV A, R0ADD A, #21HMOVC A, A + PCANL A, #OEFH ;个位加小数点MOV SBUF, ADL2: JNB TI, DL2C
35、LR TIINC R0MOV A, R0ADD A, #13HMOVC A, A+PCMOV SBUF, ADL3: JNB TI, DL3CLR TIMOV A, #0FFHMOV SBUF, ADL4: JNB TI, DL4CLR TICLR P1.7 ;亮显示RETSEGTAB:DB 11H,0D7H,32HDB 92H,0D4H,98HDB 18H,0D3H,10H,0D0H键盘输入主程序:MOV P1, #0FH ;键盘初始化,P1.0P1.3置输入方式,P1.4P1.7为0状态MOV IE, #84H ;开CPU中断,开INT1中断SJMP $ ;中断等待中断服务程序:ORG 0
36、013 ;INT1中断入口地址LJMP IO51K16 ;从中断入口转移键盘处理程序IO51K16IO51K16: CALL D10MS ;延时10秒LCALL KEYIN ;调键输入检查子程序JNZ LKOUT ;有键输入,转查键号RETI ;无键输入,中断返回LKOUT: MOV R2, #0EFH ;首列扫描字写如R2MOV R4, #00H ;首列偏移值如R4CONU: MOV P1, R2 ;列扫描字写入列线中MOV A, P1 ;读入P1口状态到A中JB ACC.0,LONE ;检查第0行是否为0状态,不为0表示按下键不在此行,转下行MOV A, #00H ;第0行为0状态,表明按
37、下键在此行,首列号如AAJMP LKP ;转求键号LONE: JB ACC1.1, LTWO ;检查第1行有无键按下MOV A, #04H ;有键按下,该行首列号入AAJMP LKP ;转求键号LTWO: JB ACC.2, LTHR MOV A, #08H AJMP LKPLTHR: JB ACC.3, NEXT ;该列所有行都无键按下,转NEXT MOV A, #0CH ;有键按下,该行首列号入A中LKP: ADD A, R4 ;求键号,键号位首列号加列偏移值 PUSH A ;键号入栈保护WKFE: LACLL KEYIN ;等待键释放 JNZ WKFE ;键未释放转WKFE等待 POP A ;键释放,键号如A LJMP KJMP ;转键操作转处理 NEXT: INC R4 ;转查下一列,列偏移值加1 MOV A, R2 JNB ACC.7, KND ;最后一列查完?查完中断返回 RL A ;未查完,列扫描字左移1位 MOV R2, A ;扫描字如R2继续查找 LJMP CONUKND: