1、湖南铁路科技职业技术学院毕业(设计)论文说明书摘要在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越重要。在工业生产的很多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的控制问题。本设计是一个典型的智能电子系统设计。以AD590为采集器、89S51为处中央理器、空调机相应电路,结合相关的元器件(共阴极LED数码显示器、BC
2、D-锁存/7段译码/ A/D转换器等)为执行器来完成设计任务提出的温度控制要求。该设计分总体方案设计、硬件设计、软件设计、系统调试几个部分,设计过程流畅,所设计的电路单元较为合理。该设计在硬件方案设计、单元电路设计、元器件选择等方面较有特色。【关键词】89C51单片机,AD590为采集器,LED数码显示器,A/D转换器。第39页目录摘要1第一章 设计方案41.1设计任务41.2设计总方案4第二章 硬件设计62.1 硬件各单元方案设计与选择62.2单元电路设计10第三章 软件设计153.1 程序流程图153.2 主程序清单193.3 系统调试25第四章 设计主要芯片介绍274.1 89S5127
3、4.2 ADC0809294.3 AD59032总结与体会36谢辞37参考文献38第一章 设计方案1.1 设计方案任务设计一个空调机的温度控制单元。用单片机技术及相应仿真平台进行开发,通过数据采集系统,对温度进行采集并作A/D转换,再传输给单片机。以空调机为执行器件,通过单片机程序来完成对室内温度的控制。设计的主要要求如下:1, 温度设定范围为-1045摄氏度,最小区分温度为1摄氏度,标定温度小于等于1摄氏度。2, 用二位十进制数码显示当前温度。3, 能根据设定的温度实现自动加热或降温处理。4, 设计出控制系统电路单元。1.2设计总方案选用89S51单片机为中央处理器,通过温度传感器对空气进行
4、温度采集,将采集到的温度信号传输给单片机,再由单片机控制显示器,并比较采集温度与设定温度是否一致,然后再驱动空调机的加热或降温循环对空气进行处理,从而模拟实现空调温度控制单元的工作情况。总方案结构图1所示输入部分显示部分89S51A/D转换器驱动控制驱动控制温度传感器(加热)(制泠)空气图1 空调温度控制单元结构图实现方案的技术路线为:用按钮输入标准温度值,用LED实时显示环境空气温度,用驱动电路控制压缩机完成加热和制冷空调,用汇编语言完成软件编程。第二章 硬件设计硬件设计部分将寻找单元电路最合适的设计方案,再进行单元电路设计,最后介绍所用到的特殊元器件。2.1硬件各单元方案设计与选择2.1.
5、1 温度传感部分要求对温度和与温度有关的参量进行检测,应该考虑用热电阻传感器。按照热电阻的性质可以分为半导体热电阻和金属热电阻两大类,前者通常称为热敏电阻,后者称为热电阻。方案1 采用热敏电阻,这种电阻是利用对温度敏感度的半导体材料制成,其阻值随温度变化有明显的改变。负温度系数热敏电阻器通常是由锰,钴的氧化物烧制成半导体陶瓷制成。其特点是,在工作温度范围内电阻阻值随温度的升高而降低。课满足4090摄氏度测量范围,但热敏电阻精度,重复性,可靠性比较差,不适用于检测小于1摄氏度的信号,而且线性度很差,不能直接用于A/D转换,应该用硬件或软件对其进行线性化补偿。方案2采用温度传感器铂电阻Pt1000
6、.铂热电阻的物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且元件线性较好。在0100摄氏度时,最大非线性偏差小于0.5摄氏度。铂热电阻与温度的关系式,Rt=R0(1+At+Bt.t);其中Rt是温度为t摄氏度时的电阻;R0是温度为0摄氏度时的电阻;t为任意电阻值,A,B为温度系数。但其成本太贵,不适合做普通设计。方案3 采用集成温度传感器,如常用的AD590和LM35。AD590是电流型温度传感器。这种传感器以电流作为输出量至室温度,其典型的电流温度灵敏度是1uA/K.它是二端器件,使用非常方便,作为一种高阻电流源,它不需要要个考虑传输线上的电压信号损失和噪声干扰问题,因此特别
7、适合作为远距离测量或控制用。另外,AD590也特别适合用于多点温度测量系统,而不必考虑选择开关或CMOS多路转换开关所引起的附加电阻造成的误差。应用电路简单,便于设计。方案选择:选择方案3 理由:电路简单稳定可靠,无须调试,与A/D连接方便。2.1.2 A/D转换部分模/数转化器是一种将连续的模拟量转化成离散的数字量的一种电路或器件。模拟信号转换为数字信号一般需要经过采样保持和量化编码两个过程。针对不同的采样对象,有不同的A/D转换器(ADC)可供选择,其中有通用的也有专用的。有些ADC还包含其他功能,在选择ADC器件时要考虑多种因素,除了关键参数,分辨率和转换速度以外,还应考虑其他因素,如静
8、态与动态精度,数据接口类型,控制接口与定时,采样保持性能,基本要求,校准能力,通道数量,功耗,使用环境要求,封装形式以及与软件有关的问题。ADC按功能划分,可以分为直接转换和非直接转换两大类,其中非直接转换又有逐次分级转换和积分式转换等类型。A/D转换器在实际应用时,除了要设计适当的采样/保持电路、基准电路和多路模拟开关等电路外,还应根据时机选择的具体芯片进行输入模拟信号极性转换等设计。方案1采用分级式转化器,这种转换采用两步或多步进行分辨的闪烁是转换,进而快速的完成“模拟-数字”信号的转换,同时可以实现较高的分辨率。方案2采用双积分型A/D转换器。双积分型A/D转换器转换精度高,但是转换速度
9、不太快,若用于温度测量,不能及时地反映当前的温度值,而且多数双积分型A/D转换器其输出端都不是二进制码,而是直接驱动数码管的。所以,若直接将其输出端接I/O接口会给软件设计带来激动的不方便。方案3采用逐次逼近式转换器,对于这种转换方式,通常是用一个比较输入信号与作为基准的n位DAC输出进行比较,并执行n次1位转换这种方法类似于天平上的二进制砝码称量物质。采用逐次逼近寄存器,输入信号仅与最高位(MSB)比较,确定DAC的最高位(DAC满量程的一半)。确定后结果(0或1)被锁存,同时加到DAC上,以决定DAC的输出(0或1/2)。逐次逼近型A/D转换器,如ADC0809、AD574等,其特点是转换
10、速度快精度也比较高,输出为二进制码,直接接I/O口,软件设计方便。ADC0809芯片内包含8位模/数转换器、8通道多路转换器与微控制兼容的控制逻辑。8通道多路转换器能直接连通8个单端输入信号中任何一个。由于ADC0809设计时考虑到若干种模/数转换技术的优点,所以该芯片非常适合于过程控制、微控制器输入通道的结合口电路、智能仪器和机床控制等应用场合,并且价格低廉,降低设计成本。方案选择:选择方案3 理由:用ADC0809采样速度快,配合温度传感器应用方便,价格低廉,降低设计成本。2.1.3数字显示部分通常的LED显示器有段或8段和“米”字段之分。这种显示器有共阳极和共阴极两种。共阴极LED显示器
11、的发光二极管的阴极连接在一起,通常此公阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的工作原理也是一样的。方案1采用静态显示方式。在这种方式下,各位LED显示器共阳极或共阴极连接在一起并接地或电源正,每位的段选线分别与一个8位的锁存器输出相连,各个LED的显示符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止,正因为如此,静态显示器的亮度都较高。若用I/O口接口,这需要占用N.8位I/O口(LED显示器的个数N)。这样的话,如果显示器的个数较多,那使用的I/O接口就更多,因此在显示位数较多的情况下,一般都不用静态显示。方案2采用
12、动态显示方式。当多位LED显示时,通常将所有位的段选线相应的并联在一起,由一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别有相应的I/O口控制,实现各位的分时选通。其中段选线占用一个8位I/O,而位选线占用N个I/O口(N为LED显示器的个数)。由于各位的选段线并联,段码的输出对各位来说都是相同的,因此,同一时刻,如果各位选线都处于选通状态的话,那LED显示器将显示相同的字符。若要各位LED能显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段选线上输出端相应位要显示字符的段码。这种显示方式
13、占用的I/O个数为8+N(N为LED显示器的个数),相对静态显示少了很多,但需要占用大量的CPU资源,当CPU处理别的事情时,显示可能出现闪烁或者不显示的情况。方案3采用移位寄存器扩展I/O口,只需要占用3个I/O口,即数据(DATE)、时钟(CLOCK)、输出使能(OUTPUT ENABLE),从理论上讲就无限制地扩展I/O口,而且显示数据静态显示,几乎不占用CPU资源。采用扩展口后,又能采用静态显示,这样,既解决了静态显示占用I/O口多的问题,也解决了动态显示不稳定、容易闪烁、占用CPU资源过多的问题。方案选择:选择方案3 理由:非常节约I/O口,又有静态显示的特点,亮度高,节约CPU的使
14、用率。2.1.4加热降温驱动控制电路采用开关量控制,如继电器、双向可控硅、光耦等。控温快速,但是双向可控硅驱动电路比较麻烦,调试也麻烦,若用现成的固态继电器(其实就是把双向可控硅和驱动电路做在一起的)价格比较贵。若用继电器时要注意其电感的反向电动势,和开关触点对电源的影响,以及开关脉冲对整个电路的影响等。应该加入必要的防干扰的措施。方案1:采用单向晶闸管,这是一种大功率半导体器件,它既有单向导电的整流作用,又有可以控制开关作用。利用它可以用较小的功率控制较大功率。在交、直流电动机调速系统、调功系统、随动系统和无触点开关等方面均获得了广泛的应用。这种晶闸管与二极管不同的是,当其两端加上正向电压而
15、控制极不加电压时,晶闸管并不导通,其正向电流很小,处于正向阻断状态;当加上正向电压、且控制极上(与阴极)也加上一正向电压时,晶闸管便进入导通状态,这时管压降很小(1V左右)。这时即使控制电压消失,仍然保持导通状态,所以控制电压没有必要一直存在,通常采用脉冲形式,以降低触发功耗。它不具有自关断能力,要切断负载电流,只有使阳极电流减小到维持电流以下,或加上反向电压实现关断。若在交流回路中应用,当电流过零和进入负半周时,自动关断,为了使其再次导通,必须重加控制信号。方案2:采用光耦合双向可控硅驱动电路,这种器件是一种单片机输出与双向可控硅之间较理想的接口器件,它由输入和输出两部分组成,输入部分是一个
16、砷化镓发光二极管,该二极管在5毫安-15毫安正向电流作用下发出足够强度的红外光,触发输出部分。输出部分是一个桂光敏双向可控硅,在红外线作用下可双向导通。光电耦合器也常用于较远距离的信号隔离传送。一方面光耦合可以起到隔离两个系统地线线的作用,使两个系统的电源相互独立,消除地电位不同所产生的影响。另一方面,光耦合器的发光二极管是电流驱动器件,可以形成电流环路的传送形式。由于电流环电路时低阻抗电路,对噪音的敏感度低,因此提高通讯系统的抗干扰能力。常用于有噪音干扰的环境里传输信号。方案选择:选择方案2 理由:达到同样的加热效果,开关控制容易,驱动简单,通讯系统的抗干扰能力强。2.2单元电路设计2.2.
17、1温度采集电路温度采集系统主要由AD590,OP07 ,ICL8069组成。选用温度传感器AD590, AD590具体较高精度和重复性(重复性优于0.1摄氏度,其良好的非线性可以保证优于0.1摄氏度的测量精度,利用其重复性较好的特点,通过非线形补偿,可以达到0.1摄氏度测量精度)。超低温飘逸高精度运算放大器OP-07将“温度-电压”信号进行放大,便于A/D进行转换,以提高温度采集电路的可靠性。集成温度传感器的输出形式分为电压输出和电流输出两种。电压输出型的灵敏度一般为10mv/k,温度0摄氏度时输出为0,温度25摄氏度时输出为2.982V。电流输出型的灵敏度一般为1ua/k。这样便于A/D转换
18、器采集数据。2.2.2 A/D转换电路选用89S51作为中央处理器,A/D转换器选用ADC0809。 图3 A/D转换电路用单片机控制ADC时,多数采用查询和中断控制两种方式。查询法事在单片机把启动命令送到ADC之后,执行别的程序,同时对ADC的状态进行查询,以检查ADC变换是否已经完成,如查询到变换已结束,则读入转换完毕的数据。中断控制是在启动信号送到ADC之后,单片机执行别的程序。当ADC转换转换结束并向单片机发出中断请求信号时,单片机响应此中断请求,进入终端服务程序,读入转换数据,并进行必要的数据处理,然后返回到原程序。这种方法单片机无需进行转换时间管理,CPU效率高,所以特别适合与变换
19、时间较长的ADC。本设计采用查询方式进行数据收集。由于ADC0809片内无时钟,故利用8051提供的地址所存使能信号ALE经D触发器二分频后获得时钟。因为ALE信号的频率是单片机始终频率的六分之一,如果始终频率为6MHz,则ALE信号的频率为1MHz,经二分频后为500kHZ,与AD0809时钟频率的典型值吻合。由于AD0809具有三态输出锁存器,故其数据输出引脚可直接与单片机的数据总线相连。地址码引脚ADDAC分别与地址总线的低三位A0,A1,A2相连,以选通IN0IN7中的一个通道。采用单片机的P2.7(地址总线最高位A15)作为A/D的片选信号。并将A/D的ALE和START脚连在一起,
20、以实现在锁存通道地址的同时启动ADC0809转换。启动信号由单片机的写信号WR和P2.7经或非门而产生。在读取转换结果时,用单片机的读信号RE和P2.7经或非门加工得到的正脉冲作为OE信号去打开三态输出锁存器。编写的软件按下列顺序动作:令P2.7=A15=0,并用A0、A1、A2的组合制定模拟通道的地址;执行一条输出指令,启动A/D转换;然后根据所选用的是查询、中断、等待延时三种方式之一的条件去执行一条输入指令,读取A/D转换结果。ADC0809是一个8路8位逐次逼近的A/D转换器。ADC0809的转换时间为100us。在CPU发出启动A/D命令后,便执行一个固定的延时程序,延时时间应略大于A
21、/D的转换时间;延时程序一结束,便执行数据读入指令,读取转换结果。我们只用了其一路AD转换,参考电压2.56V,即一位数字量对应10mV即1摄氏度。所以用起来很方便。2.2.3显示电路显示电路由P2.0 P2.1 和P2.2担任.位控电流较大,每一位用一只小型PNP三极管连接在数码管的俩个公共端,当P2.0 P2.1 和P2.2中的一个引脚为低电平时,相应的数码管就会显示P1口送来的内容 图5 显示电路2.2.4驱动控制电路光耦合双向可控硅驱动器是一种单片机输出与双向可控硅之间较理想的接口器件,它由输入和输出两部分组成,输入部分为砷化镓发光二极管,该二极管在5ma15ma正向电流作用下发出足够
22、强度的红外光,触发输出部分。输出部分为硅光敏双向可控硅,在红外线作用下可双向导通。该器件为六引脚双列直插式封装。光耦合器是以光为媒介传输电信号的一种“电-光-电”转换器件。它由发光源和受光器两部分组成。把发光源和受光器组装在同一密闭的壳体内,彼此间用透明绝缘体隔离。发光源的引脚为输入端,受光器的因较为输出端,常见的发光源为发光二极管,受光器为光敏二极管、光敏三极管等。光耦合器的种类较多,常见的有光电二极管型、光电三极管型、光敏电阻型、光控晶闸管型、光电达林顿型、集成电路型等。在光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流大小,此光照射到封装在一起的受光器上后,因为电效应而产生了
23、光电流,有受光器输出端引出,这样就实现了“电-光-电”的装换。在光耦合器内部,由于发光管和受光器之间的耦合电容很小,所以共模输入电压通过极间耦合电容对输出电流的影响很小,因而共模抑制比很高。在发光二极管上提供一个偏置电流,再把信号电压通过电阻耦合到发光二极管上,这样光电晶体管接收到的是在偏置电流上增减变化的光信号,其输出电流将随输入的信号电压作线性变化。光电耦合器也可工作于开关状态,传输脉冲信号。在传输脉冲信号时,输入信号和输出信号之间存在一定的延时时间,不同结构的光耦合器输入、输出延时时间相差很大。空调通电后,制冷系统内制冷剂的低压蒸汽被压缩机吸入并压缩为高压蒸汽后排至冷凝器。同时轴流风扇吸
24、入的室外空气流经冷凝器,带走制冷剂放出的热量,使高压制冷剂蒸汽凝结为高压液体。高压液体经过滤器、节流机构后喷入蒸发器,并在相应的低压下蒸发,吸取周围的热量。同时贯流风扇使空气不断进入蒸发器的肋片间进行热交换,并将放热后变冷的空气向室内。如此室内空气不断循环流动,达到降温的目的。2.2.5 键盘电路采用独立式按键设计,每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。软件设计采用查询方式和外部中断相结合的方法设计,低电平有效。按键直接与89S51的I/O口线相连接,通过读I/O口,判定各I/O的电平状态,即可识别出按下的按键。4个按键分别接到P1.0、P1.1、P
25、1.2、RST。对于这种键各程序可以采用中断查询的方法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相信的键处理。其功能很简单,4个键定义如下。P1.0:功能转换键,按此键则开始键盘控制。P1.1:按此键则温度设定加1度。P1.2:按此键则温度设定减1度。RST:复位键,使系统复位。第三章 软件设计 软件设计从主程序流程图设计开始,一次编制出各子程序。3.1程序流程图3.1.1主程序流程图 本设计主程序流程如图6所示。程序启动后,首先清理系统内存,然后对温度进行采集,并通过A/D转换后,传输到单片机,再由单片机控制显示设备,然后系统进入待机状态,等待键盘输入设定温度,然
26、后系统将设定温度与现在温度进行比较,得出结果后,启动制冷系统或是加热系统。 主程序开始采集温度和设定值比较键盘输入设定值调显示程度调A/D程度查询温度启动加热/降温温度采集和比较要控制温度?与比较值相等?是否否是图6 主程序流程图3.1.2 A/D转换子程序 图7是A/D转换子程序流程图。89S51给出一个脉冲信号启动A/D转换后,ADC0809对接受到的模拟信号进行转换,这个转换过程大约需要100us,系统采用的是固定延时程序,所以在预先设定的延时后,89S51直接从ADC0809中读取数据。 A/D入口读取转换数据压缩BCD码作未压缩处理查询EOC启动A/D转换子程序结束调整好的十位和个位
27、分别存入某地址单元图7 A/D转换子程序A/D转换原则: 根据前向通道总误差选精度及分辨率 根据信号变化率选转换速度 环境参数 微机接口要求3.1.3显示子程序 当系统传送一个字节数给74LS164时,利用UART模式0。把DISPLAY-DATA中的初始数显示到LED1和LED2,十位数值显示到LED1,个位数值显示到LED2;当是为数值为0时LED1不显示。每个数值的显示时间由DISPLAY-TIME确定。程序流程如图8显示子程序入口送设定值(70)到A带C标志移位送采集值(71H)到A送C到I/O口带C标志移位送C到I/O口(8次)字节送完?(8次)字节送完?是否否是子程序结束图8显示子
28、程序流程图3.2主程序清单主程序 ORG 0000H MOV P0,#0FFH ;初始化 MOV P1,#00H MOV P2,#01011000B MOV P3,#0FFH CLR P3.4 LCALL DATAO8O9 ;调用AD MOV 70H ,#0FFH LCALL XS ;调用显示 LCALL YS700MS ;调用延时 MOV A,6CH MOV P1,6CH LCALLY FY MOV P1,#09H LCALLY FY MAIN00:SETB P3.1 ;停止预置数DELAY43: MOV R6,#50DELAY53: MOV R7,#100DELAY63: JB P2.4,
29、QIDONG DJNZ R7,DELAY63 DJNZ R6,DELAY53 DJNZ R5,DELAY43 LCALLY DATA0809 LCALLY XS AJMP MAIN ;等待键盘输入 LCALLY YS10S ;调用延时 LJMP STOPMAIN: MOV R5,#5O LCALLY KEYPROCTEMC:MOVP1, 00000001B 温度控制请按1 LCALLY KEYPROC ;调用键盘子程序 CLR P3.6 LCALLY YS2MS CLR P3.7 LCALLY YS20MS CLR P3.6 LCALLY YS2MS CLR P3.7 LCALLY YS20M
30、S LCALLY YY0 MOV R5,#50SRWD: MOV R4,#03HSRWD1:MOV P2,#00000011B ;请输入温度值 LCALLY KEYPROC ;调用键盘子程序 CLR P3.6 LCALLY YS2MS CLR P3.7DELAY18: MOV R5,#53DELAY28: MOV R6,#50DELAY38: JB P2.3,HERE22 DJNZ R7,DELAY38 DJNZ R6,DELAY28 DJNZ R5,DELAY18 SETB P3.7 SETB P3.6 LCALLY YS20MS LCALLY DATA0809DELAY40: MOV R6
31、,#50DELAY50: MOV R7,#200DELAY60: JB P2.3,HERE25 DJNZ R7,DELAY60 DJNZ R6,DELAY50 DJNZ R5,DELAY40 DJNZ R4,TEML1 LJMP STOPHERE17: JNB P2.3,HERE17HERE25: LCALLY YS20MS MOV A,P3 ANL A,#0FHHERE26: JB P2.3,HERE26 CJNE A,#01H,BJ1 LCALL TEM AJMP TEMCBJ1: CJNE A,#02H,STOP AJMP SRWDSTOP: MOV P1,#00000010B ;按2键
32、确定 LCALL KEYPROC ;调用键盘子程序 CLR P2.7 LCALLY YS20MS SETB P2.7 AJMP QUDONGQUDONG: LCALL DATAO8O9 ;调用AD LCALL XS ;调用显示 MOV A,70H CJNE A,#0FFH,AAA1 LJMP MAINAAA1: CJNE A,71H,HERE7 ;比较两数大小不相等则跳CLR P1.6 ;清零两口 CLR P1.7 AJMP DD1HERE7: JNC JIARE ;实时检测 JC JIANGWENJIARE: SETB P1.7 CLR P1.6 AJMP DD1 JIANGWEN: SET
33、B P1.6 CLR P1.7 AJMP DD1 LCALL DATAO8O9 ;调用AD MOV 70H,#0FFH LCALL XS ;调用显示 LCALL YS700MS ;调用延时DD1: MOV R5,#50DL11: MOV R6,#50DL21: MOV R7,#100DL31: JB P2.4,HERE8 DJNZ R7,Dl31 DJNZ R6,Dl21 DJNZ R5,Dl11 AJMP QUDONGHERE8: JB P2.4,AA1 AJMP DL3AA1: LCALL YS700MS JB P2.4,AA2 AJMP DL3AA2: LJMP MAINHERE9:LC
34、ALL YS10S ;调用延时DATA8870: MOV R5,#100 DELAY19: MOV R6,#50DELAY29: MOV R7,#200DELAY39: JB P2.3,WAIT1 DJNZ R7,DELAY39 DJNZ R6,DELAY29 DJNZ R5,DELAY19 DJNZ R4,SRWD3 LJMP START ;重新复位启动 显示子程序XS: MOV R0,#08HSTART: CLR P2.0 CLR P2.1 CLR P2.2 MOV A,70H LCALL YW MOV A,71H LCALL YW SETB P2.2 LCALL YS1MS RETYW:
35、 RLC A ;移位送数 MOV P2.1,C CLR P2.0 SETB P2.0 DJNZ R0,YW MOV R0,#08H RETYY0: MOV R5,#74DELAY15: MOV R6,#50DELAY25: MOV R7,#200DELAY35: JB P2.3,HERE10 DJNZ R7,DELAY35 DJNZ R6,DELAY25 DJNZ R5,DELAY15 SETB P3.7 SETB P3.6 LCALL YS20MS RET 延时子程序YS2MS: MOV R6,#20HL11: MOV R7,#20HL22: DJNZ R7,L22 DJNZ R6,L11
36、RETYS700MS: MOV R5,#8DL1: MOV R6,#210DL2: MOV R7,#200DL3: DJNZ R7,DL3 DJNZ R6,DL2 DJNZ R5,DL1 RETYS20MS: MOV R6,#50YDL1: MOV R7,#200YDL2: DJNZ R7,YDL2 DJNZ R6,YDL1 RETYS10S: MOV R5,#100DELAY12: MOV R6,#140DELAY22: MOV R7,#200DELAY32: DJNZ R7,DELAY32 DJNZ R6,DELAY22 DJNZ R5,DELAY12 RET A/D转换DATA0809:
37、 SETB P2.6 NOP NOP SETB P2.5 ;启动AD NOP NOP CLR P2.5 HERE1: JB P2.6,HERE1 ;低电平检测HERE2: JNB P2.6,HERE2 ;数据调整 LCALL YSIMS MOV A,P0 ANL A,#O1111111B MOV B,#1OO DIV AB MOV A,B MOV B,#1O DIV AB MOV 6CH, A SWAP A MOV 6BH,B ORL A,6BH MOV 71H,A RET键盘子程序KEYPROC: MOV A,B ;从B寄存器中获取键值 JB ACC.2,KEYSTART ;分析键的代码,某
38、位被按下,则该为1(因为在键 ;盘程序中已取反) JB ACC.3,KEYOVER JB ACC.4,KEYUP JB ACC.5,KEYDOWN AJMP KEY-RETKEYTTART: SETB STARTEND ;第一个键按下后的处理AJMP KEY-RETKEYOVER: CLR STARTEND ;第二个键按下后的处理AJMP KEY-RETKEYUP: SETB UPDOWN ;第三个键按下后的处理AJMP KEY-RETKEYDOWN: CLR UPDOWN ;第四个键按下后的处理KEY-RET: RET KEY: CLR F0 ;清F0,表示无键按下 ORL P3,#00111100B ;将P3口的接有键的4位置1 MOV A,P3 ;取P3的值 ORL A,#11000011B ;将其取余四位置1 CPL A ;取反 JZ K-RET ;如果为0则一定无键按下ACALL DELAY