资源描述
电气工程课程设计报告1设计任务书12基于单片机消毒柜控制电路设计22.1 系统的组成及工作原理22.1.1 系统设计要求222.1.2 系统组成框图22.1.3 系统工作原理322.2 硬件电路设计32.2.1 方案论证32.2.2 方案确定52.2.3 单片机最小系统设计52.2.4 温度转换与放大电路62.2.5 数模转换电路112.2.6 温度控制电路122.2.7 显示模块132.3 系统软件设计152.3.1 系统软件设计原理7152.3.2 中断服务程序设计8162.3.3 系统子程序设计172.4仿真结果与分析22参考文献:26附录3:271设计任务书1.设计任务设计一台消毒柜控制系统2.设计要求(1) 显示消毒柜温度、保持时间;(2) 可以键盘设定消毒柜温度、定时时间;(3) 可以实现实时中断功能;(4) 消毒后自动关机;(5) 测温误差:0.5:(6) 定时误差:f 20 s月。2基于单片机消毒柜控制电路设计2.1 系统的组成及工作原理 2.1.1 系统设计要求2 A. 设置三个功能键:消毒、保温、停止; B. 按下消毒键,加热装置进行加热,当温度达到125度时,停止加热,其加热的时间可通过键盘设定; C. 按下保温键,在50度以下接通加热器,达到70度关闭,一直持续工作,其加热的时间可通过键盘设定; D. 按下停止键,就停止工作; E. 采用的是PT-100铂热电阻测温,A/D转换采用的是ADC0809; F采用的是7279芯片管理键盘显示。 2.1.2 系统组成框图电桥电路电压放大A/D功能键盘单片机数码显示加热装置图2-1 系统组成框图2.1.3 系统工作原理3 本次设计采用铂热电阻PT-100温度传感器实现从温度到电阻值的转换,PT-100的温度每上升1度,其阻值就增大0.38欧姆,电桥将PT-100电阻值的变化转换成电压变化、再经集成运放TL084放大成0-5V的电压(值不会超过5),然后经ADC0809转换成8位数字的信号送89C51单片机系统, 89C51单片机对所采集的数据经滤波、变换等处理后送入7279显示模块中进行显示,从而完成对温度的采集。89C51单片机再对键盘的扫描结果和即时温度值的处理,实现对温度的控制,系统设计了加热,保温,停止三键,按下加热功能键时,单片机控制加热器,开始进行加热,当温度到达125度时停止加热,按下保温键时,温度小于50度,加热器开始加热,温度超过70度,停止加热,当按下停止键时,一切程序停止运作。在此基础上,设置了一个校时键,当按下校时键时,无论加热器加热与否,要到达设定的时间才停止工作。如此达到实验要求。完成实验。2.2硬件电路设计 2.2.1 方案论证 方案一:本方案采用的是新型的温度传感器LM35构成前端温度传感电路,LM35输出可以从0度开始,该器件采用的是塑料封装TO992,工作的电压430V。LM35前端电路直接与ADC0809温度采样电路相连接。系统采用的是以51单片机为核心的微电脑控制,主要通过单片机启动ADC0809电路,对前端电路直接进行采样,得到采样的数字值由单片机将其经数学变换处理,转换成真正的温度值。 键盘控制则采用的是以HD7279为核心的键盘显示电路,由它来控制消毒、保温、停止等功能,并设置校时键,随时设置当前工作状态和需要保持的时间。7279键盘显示电路带有8个数码管,用来显示当前系统工作情况,如倒计时时间,实时温度等。加热器与单片机用继电器来隔开,继电器用来智能控制消毒柜的加热。 本方案的特点是:前端温度电路直接采用LM35温度传感器,具有转换速度快,灵敏度高的特点,但是测量精度不够,抗干扰性能差的,受工作环境因素的影响较大。 方案一电路原理图如下所示: 图2-2 方案一电路原理图 方案二: 在此次实验中也可以采用铂热电阻温度传感器PT-100,由含铂热电阻PT-100为桥臂的电桥,过程中其温度的变化将引起PT-100电阻值的改变,最终转变成电压的变化,但电桥输出的电压最多只能有几十毫伏,所以必须经ICL7650放大后才能输出05V的电压,达到实验所要求的电压,再经ADC0809转换成8位数字信号送至单片机。 单片机开发系统对所采集的数据经过滤波、变换等处理后送到7279进行显示,以实现对温度的测量。测量出即时温度值之后要进行的就是根据温度的值和7279对键盘的扫描结果进行相应的处理,比如加热、保温、停止等,这些就需要靠软件程序来辅助完成,还要通过加热装置来进行相应的操作,从而完成此次设计的要求。加热器是由单片机控制,安全管理加热器的启动与停止,加热装置将单片机核心系统与加热器隔离,防止加热器的高温对系统造成损伤,起到了以小电流控制大电流而安全控制的作用。 2.2.2 方案确定 由于设计要求最高的温度需要达到了125,而LM35系列传感器达不到要求的这个温度,而且价格也高。所以不采用这一方案。而在实验中已经采用过方案二,并且成功的测量出了温度值,因此对用PT-100测温的性能及参数都比较了解,做起来也是得心应手,对整个电路如何调试,分析,工作原理都比较熟悉,就算是出现了什么问题也能很好的得到解决,所以我最终决定采用方案二。 2.2.3 单片机最小系统设计 主控机系统采用了Atmel 公司的89C51 单片机,它包含有128 字节数据存储器,内置4K的电可擦除FLASH ROM,可以进行重复的编程,大小可以满足主控机软件系统设计,故不必再扩展程序存储器。复位电路和晶振电路是89C51 工作所需的最简的外围电路。 单片机最小系统电路图如图2-3所示。 89C51 的复位端是一个史密特触发输入,高电平有效,而系统中的时钟接口和CAN 总线接口的复位信号都是低电平有效。在复位电路中,按一下复位开关就使在RS端出现一段时间的高电平,经过74LS14 的一次反相整形,提供给单片机复位端。再经过一次反相整形,通过I/ORST 端提供给外部接口电路。外接12M 晶振和两个20P 电容组成系统的内部时钟电路。图2-3 单片机最小系统电路图 2.2.4 温度转换与放大电路 温度转换与放大电路模块如图2-4所示,它主要由电桥电路和放大电路构成。本电路主要采用的是以PT-100为核心的电桥电路,将当前温度的变化转换成电阻的变化,从而造成电桥的不平衡,使得电桥输出在一定范围的微小且精确电压,再由放大电路对这个微小电压进行放大,放大之后才送到ADC0809的IN0口进行采样转换。4图2-4 温度转换与放大电路电桥电路如图2-5中所示,电桥电路中采用的是PT100铂热电阻作为一条桥臂,构成温度传感器,PT100铂热电阻是利用阻值随温度而变化的特性来测量温度,PT-100的温度每上升1度,其阻值相应增大0.38欧姆,且在0500范围内的电阻温度曲线的线性度都比较好。消毒柜要求的温度范围是0-130之间,在这范围之内PT-100的线性度是最好的,它有很好的稳定性和测量精度,测温范围比较宽。5图2-5 电桥电路铂热电阻与温度之间的关系近似线性关系如下:在200 0范围,温度为t时的阻值Rt的表达式为: (2-1)在温度为0 650范围内: (2-2)式中的分度常数为:A3.96847(/),5.847(/),422(/)是在0时阻值为100。下面列出铂热电阻在0100时的电阻值:表2-6 铂热电阻与温度之间的关系表01234567890100.0100.4100.8101.2101.6102.0102.3102.7103.1103.510103.9104.3104.7105.1105.5105.8106.2106.6107.0107.420107.8108.2108.6109.0109.3109.7110.1110.5110.9111.330111.7112.1112.4112.8113.2113.6114.0114.4114.8115.240115.5115.9116.3116.7117.1117.5117.9118.2118.6119.050119.4119.8120.2120.5120.9121.3121.7122.1122.5122.960123.2123.6124.0124.4124.8125.2125.5125.9126.3126.770127.1127.5127.8128.2128.6129.0129.4129.7130.1130.580130.9131.3131.7132.0132.4132.8133.2133.6133.9134.390134.7135.1135.5135.8136.2136.6137.0137.4137.7138.1100138.5电桥计算: (2-3)设(为100) (2-4)当T=0时,即,电桥处于平衡 (2-5) 时 (2-6)取T=100时,=138.5,=10K,=100,VDD = 12V (2-7)所以,当温度T变化在0100时,U的变化范围是 045.7mV。测量放大电路 三运放结构的测量放大器由两级组成,两个对称的同相放大器构成第一级,第二级为差动放大器减法器,如图2-7所示。图2-7 测量放大电路 设加在运放A1同相端的输入电压为V1,加在运放A2同相端的输入电压为V2,若A1、A2、A3都是理想运放,则V1=V4, V2=V5 (2-8) (2-9) (2-10)所以,测量放大器第一级的闭环放大倍数为: (2-11)整个放大器的输出电压为: (2-12)为了提高电路的抗共模干扰能力和抑制漂移的影响,应根据上下对称的原则选择电阻,若取R1=R2,R4=R6,R5=R7,则输出电压为: (2-13)第二级的闭环放大倍数: (2-14)整个放大器的闭环放大倍数为: (2-15) 若取Rk=R5=R6=R7,则Vo=V6-V3,Af2=-1 (2-16) 由上可看出,改变电阻RG的大小,可方便的调节放大器的增益,在集成化的测量放大器中,RG是外接电阻,用户可根据整机的增益要求来选择RG的大小。 此外,由上述推导可见,输出电压Vo与输入电压的差值是正比,所以在共模电压作用下,输出电压Vo为0,这是因共模电压作用在RG的两端不会产生电位差,故RG上不存在共模分量对应的电流,也就不会它的输出,即使共模输入电压发生了变化,也不会引起输出。因此,测量放大器具有比较高的共模抑制能力,通常选取R1=R2,其目的是为了抵消A1和A2本身共模抑制比不等造成的误差和克服失调参数及其漂移的影响。 然而,对高流共模电压,一般接法的测量放大器不能完全抑制,在实际应用中,常采用驱动屏蔽技术来克服高流共模电压的影响。 2.2.5 数模转换电路 数模转换电路是以ADC0809为核心的A/D转换电路,如图2-8所示。图2-8 数模转换电路 在使用ADC0809 进行模数转换时,应注意以下问题:A. ADC0809 的零点不用调整。满刻度调整时,先给输入端加入电压,使满刻度所对应的电压值是: (2-17)式中 VIN表示实际输入电压值;Vmax表示输入电压的最大值;Vmin表示输入电压的最小值;当输入电压与VIN+值相当时,调整VREF2端电压值使输出码为FEH 或者FH。B. 参考电压的调节。在使用A/D 转换器时,为保证其转换精度,要求输入电压满量程使用。如输入电压动态范围较小,则可调节参考电压,以保证小信号输入时ADC0809 芯片8位的转换精度。C. 接地。模数、数模转换电路中要特别注意到地线的正确连接,否则干扰很严重,以至影响转换结果的准确性。A/D、D/A及取样保持芯片上都提供了独立的模拟地(AGND)和数字地(DGND)的引脚。在线路设计中,必须将所有的器件的模拟地和数字地分别连接,然后将模拟地与数字地仅在一点上相连。其中:Vin(+)为模拟电压输入端,A-GND为模拟地,作为输入模拟电压和基准电压基地端的接地参考点。VREF 为基准电压输入端,接MC1403提供稳定的参考电压。WR和RD接89C51 的读写端。ADC0804在数据采集系统中的工作过程:采集数据时,首先微处理器执行一条传送指令,在该指令执行过程中,微处理器在控制总线的同时产生CS、WR 低电平信号,启动A/D 转换器工作,ADC0804经100us 后将输入模拟信号转换为数字信号存于输出锁存器,并在等待转换结束后,通知微处理器可来取数。微处理器立即执行输入指令,以产生CS、RD低电平信号到ADC0804 相应引脚,将数据取出并存入存储器中。整个数据采集过程中,由微处理器有序的执行若干指令完成。 本次设计在AD 采样部分电路设计没有选用中断方式,因为在加热装置选取的部分,选用的为小功率加热器,在一定时间内温度的变化不是很明显。在本系统实时要求不是很高情况下,采用延时方式对系统执行速度影响不是很大。 2.2.6 温度控制电路图2-9 温度控制电路 本设计采用的是单片机利用PWM波来控制加热的温控电路,其电路图如图2-9所示,由两级三极管放大电路组成,第一级放大采用9014三极管,其放大倍数可达1000以上,而第二级采用大功率的达林顿管TIP122,当P1.4脚输出低电平时,三极管导通,控制加热器进行加热6。 TIP122是大功率三极管,当Vce=3V,Ic=0.5A时,其放大倍数为Hfe=1000。其等效电路见图2-10。图2-10 TIP122等效电路2.2.7 显示模块图2-11 HD7279的管脚图 HD7279是一种管理键盘和LED显示器的专用智能控制芯片。HD7279的管脚图如图2-11。DIG0DIG7和SASG是64键盘的列线和行线端口,完成对键盘的监视,译码和键值的识别。在88阵列中每个键的键码是用十六进制表示的,可用读键盘数据指令读出,其范围是00H3FH。 HD7279与微处理器仅需4条接口线,其中CS为片选信号(低电平有效)。当微处理器访问HD7279(读键号或写指令)时,应将片选端置为低电平。DATA为串行数据端,当向HD7279发送数据时,DATA为输入端;当HD7279输出键盘代码时,DATA为输出端。CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。KEY为按键信号输出端,在无键按下时为高电平;而有键按下时此引脚变为低电平并且一直保持到键释放为止。 RC引脚用于连接HD7279的外接振荡元件,其典型值R=1.5k,C=15pF。RESET为复位端。该端口由低电平变成高电平并保持25ms即复位结束。通常,该端口接+5V即可。DIG0DIG7分别为8个LED管的位驱动输出端。SASG分别为LED数码管的A段G段的输出端。DP为小数点的驱动输出端。HD7279片内具有驱动电路,它可以直接驱动1英寸及以下的LED数码管,使外围电路变得简单可靠。A-G和DP为显示数据,分别对应7段LED数码管的各段。当对应的数据位为1时,该段点亮,为0时则不亮。此指令灵活,通过造字形表,可以显示用户所需的字符。字形码表如表2-12所示:表2-12 7279字形表显示字符显示码显示字符显示码07EH87FH130H97BH26DHg5FH379Ho1DH433Hd3DH55BHp67H 65FHL 16H770H 熄灭码00HHD7279键盘显示电路如图附录2。2.3系统软件设计 2.3.1 系统软件设计原理7本程序中使用T0定时器启动A/D转换0809,用T0产生100ms的定时,晶振为6MHz,记数脉冲周期T=2us,设定时初值为X,(216-X)*2us=100ms,X=3CB0H,所以TH0=3CH,TL0=0B0H。用INT1中断处理,当0809转换完成后,从P0口读数、再转换成十进制数、送显缓区、再根据键盘扫描的结果对温度值进行比较判断,当按下的键是加热功能键时,系统要控制加热器,开始加热,当温度到达125度时停止加热,当按下保温键时,当温度低于50度时,加热器开始加热,当温度高于70度,停止加热,当按下停止键时;一切动作停止。通过在主程序里面设立标志,中断程序查询标志的方法实现温度与按键的统一和“同步”,实时的控制加热器的工作,以达到人们所要求达到的效果。 主程序主要完成初始化、显示处理、送7279显示、键盘扫描以及键处理等功能,其中初始化又涉及内存单元,显缓区,堆栈,及各寄存器的初始化,其流程框图见图2-13。有键按下否?是加热键否?是消毒键否?是停止键否?是校时键否?开始初始化显示处理显示键盘扫描清保温标志,置消毒标志,启动加热器清加热标志,置保温标志清消毒、保温标志,关闭加热器rtrrtNNNYYYNN校正定时时间,并启动定时器YY图2-13 主程序框图 2.3.2 中断服务程序设计8 中断服务程序先保护现场后,再完成温度的采集与滤波,和加热器的控制,定时时间的控制,定时时间采用倒计时方式,使得定时时间易于控制。中断服务程序流程框图如图2-14。中断入口保护现场,定时器初值重装,中断次数加1控制分和秒的倒计时温度采样,再滤波调消毒子程序倒计时是否已到?消毒标志为1否?保温标志为1否?调保温子程序调停止子程序恢复现场中断返回NNNYYY图2-14 中断服务程序流程框图 2.3.3 系统子程序设计 本软件设计中,系统子程序的设计是整个程序设计的重中之重,子程序以模块化的方式实现各个独立功能,再通过主程序来调用功能子程序,使整个程序实现完整的功能。温度采样及滤波子程序温度采样及滤波子程序是先启动ADC0809并延时后对0通道采样,采样十次后,将采样值存放于以50H为首址的内存单元中。采样完成后,调用滤波子程序,先去最大值,去最小值,再求平均值,从而得到比较准确的采样值。其流程框图如图2-15所示。开始启动AD0809的0通道找出最大值并去掉找出最小值并去掉9个采样值求和后再求平均值平均值保存至5AH中返回采样次数R7=10存放指针R0=50启动采样,采样值送R0所指单元R7-1=0?R0-1R0NY图2-15 采样滤波子程序流程框图在滤波程序中,利用冒泡法,逐个比较找出最大值与最小值并去掉,将各个值移位到50H57H中,再将50H57H的8个采样值相加,求平均值,保存到5AH中,至此就得到了比较准确,消除了干扰后的稳定的温度采样值。显示处理子程序9显示处理主要完成将要显示的字符查表得到其字形码后送到7279显示模块显示出来。7279采用串行接口,每发送一位都要延时,且要对其初始化后才可能正确地显示。显示处理子程序流程框图如图2-16所示。开始显缓指针R0、显示码R1、循环次数R7初始化置CS为低电平,并延时50us延时8us,去除片选信号,修改R0和R1发显示码到7279,并延时25usR0单元内容查表,将得到的字形码发送至7279R7-1=0?返回YN图2-16 显示处理子程序流程框图 消毒子程序主要是将消毒标志置为1,将保温标志置为0,再点亮消毒指示灯,判断计时时间到达否,到达则关加热器,没到则开加热器。消毒子程序流程框图如图2-17所示。开始消毒标志置为1,保温标志置为0P1.5置为1,点亮消毒指示灯计时到达否?温度大于125度?启动加热,置P1.4为低停止加热,置P1.4高关消毒指示灯返回YNYN图2-17 消毒子程序流程框图 保温子程序主要用于当用户按下保温键时对系统进行保温。先点亮保温指示灯,置保温标志为1,再判断倒计时是否到0,若没到则再检测当前系统的温度是否在50-70度之间,大于70度时关加热器,小于50度时开加热器。若倒计时归零时,直接停止保温,其流程框图如图2-18所示。开始返回启动加热,置P1.4为低温度小于50度?关消毒指示灯停止加热,置P1.4高NY温度大于70度?YNNY消毒标志置为0,保温标志置为1计时到达否?P1.6置为1,点亮保温指示灯图2-18 保温子程序流程框图 停止子程序主要在用户按下停止键以后被调用,停止子程序运行后将消毒、保温标志置零,将消毒、保温指示灯熄灭,关闭加热器,再让键盘重新显示PGOOD。其流程图如图2-19所示。开始标志03H、04H置零,清除消毒、保温标志TR0置零,停止计时关指示灯和加热器6AH送R0,45H送R1,04H送R7R0送R1R7-1=0?返回NY图2-19 停止子程序流程框图 键盘处理主要是不断的扫描7279模块中的键盘,若有键按下时,则根据得到的键值查表求出其键号,将键号存放于寄存器ACC中供主程序处理。其流程图如图2-20所示。 开始置7279的CS有效,并延时30us发送读键指令码15H到7279,并延时12us接收键值存于A中,CS信号置键标志00HA为FFH否清键标志00H由键值查键号返回NY图2-20 键盘处理子程序流程图2.4仿真结果与分析 HD7279键盘显示电路电路原理图 经过详细的硬件调试和软件调试之后,系统工作正常,7279模块8位数码管前三位实时显示当前温度在000-150范围内,第四位显示“-”,后四位倒计时显示分和秒。按下“消毒键”时,系统接通加热器,点亮加热指示灯,当温度到达到125度时,停止加热;按下“保温键”,当温度低于50度时,系统启动加热,当温度高于70度时,系统停止加热;按下“停止键”时,系统回到初始状态。 若按下“校时键”,输入2位数字后,再按“确认键”,则系统启动定时,倒计时显示当前时间,当时间走到00.00时,系统复位,停止消毒/保温。3参考文献:1 张友德:单片微型机原理、应用与实验,上海复旦大学出版社,2000.11,P7-P212 陈黎娟、聂鹏程:单片微型计算机实验教程,南昌航空大学,2006.2,P17-P323 沈美明、温冬婵:IMB PC汇编语言程序设计,清华大学出版社,1991.6, P12-P224 吴金戍、郭庭吉:89C51单片机实践与应用,清华大学出版社,2002.9,P132-P1435 王福瑞:单片微机测控系统设计大全,北京航空大学出版社,1998.4,P7-P156 何立民:单片机应用技术选编,北京航空航天大学出版社,2001,P18-P437 邬宽明:单片机外围器件实用手册,北京航空航天大学出版社,1998,P56-P76 8 鲍健等:用单片机直接驱动液晶显示器,量子电子学报,2005.02,P32-P42 9 王春林:中国电子报第四版.中国电子报社,2006.2, P43-P54 附录3:源程序ORG 0000H ;主程序入口地址LJMP MAIN_1 ;跳入主程序ORG 000BH ;中断入口地址LJMP INT_T0 ;跳入中断子程序 MAIN_1:MOV SP,#67H ;堆栈段地址 MOV R7,#50H MOV R0,#20HM_0: CLR A MOV R0,A INC R0 DJNZ R7,M_0 ;清工作单元 ACALL CHUSHI;调用初始化子程序 MOV TMOD,#01H;定时器T0 MOV TL0,#0B0H MOV TH0,#3CH ;定时器赋初值 MOV IE,#82H;开中断 CLR P1.6 ;指示灯初始化 CLR TR0 ;不启动定时MAIN_2:ACALL DIR_0 ;调显示处理子程序 LCALL DIR ;调显示程序 LCALL HOT_NOT ;调温度控制子程序 LCALL A_D ;调采样子程序 LCALL KEY ;调键盘扫描程序 CJNE A,#0FFH,M_1 ;判断是否有键按下,若有则跳M_1 SJMP MAIN_2 ;跳转到MAIN_2 M_1: CJNE A,#0AH,M_2 ;判断键号是否与0A相等,不相则转M_2M_2: JNC M_3 ;键号大于0A转M_3 ACALL SKEY ;小于则调用数键处理程序 SJMP MAIN_2 ;跳转到MAIN_2M_3: CJNE A,#0AH,M_4 ;判断键号是否与0A相等,不 等则转M_4 ACALL MKEY_1 ;调用定时键子程序 SJMP MAIN_2 ;跳转至MAIN_2M_4: CJNE A,#0BH,M_5 ;判断键号是否与0B相等,不 等则转M_5 ACALL MKEY_2 ;相等则调用确定键子程序 SJMP MAIN_2 ;跳转到MAIN_2M_5: CJNE A,#0CH,M_6 ;判断键号是否与0C相等, 不等则转M_6 ACALL XIAODU ;若相等则跳转到消毒子程序 SJMP MAIN_2 ;跳转到MAIN_2 M_6: CJNE A,#0DH,M_7 ;判断键号是否与0D相等,不 等则跳转到M_7 ACALL BAOWEN ;若相等则调用保温子程序 SJMP MAIN_2 跳转到MAIN_2 M_7: CJNE A,#0EH,M_8 ;判断键号是否与0E相等,不 等则转到M_8 ACALL STOP ;调用停止子程序M_8: SJMP MAIN_2 ;跳转到MAIN_2A_D: MOV R0,#50H ;建立存放采样值单元首地址 MOV R7,#0AH ;采样次数 MOV DPTR,#0A000H ;0通道地址LP7: MOVX DPTR,A ;启动A/D转换 MOV R6,#1EH DJNZ R6,$ ;延时120微秒 MOVX A,DPTR ;采样 MOV R0,A ;采样值放R0所指单元 INC R0 ;修改地址 DJNZ R7,LP7 ;采样10次 ACALL FMAX ;调用去最大值子程序 ACALL FMIN ;调用去最小值子程序 ACALL AVG ;调用求平均值子程序 MOV A,5AH ;滤波值存放于A中 MOV B,#100 ;最高温度设为100度 MUL AB ;0到100显示 MOV A,B MOV 60H,A ;采集的温度值存放于A中 LCALL ER_SHI ;二进制转化为十进制 RET ;返回ER_SHI: MOV A,60H ;温度值送A MOV R0,#42H ;显缓区首地址 MOV R7,#3 ;循环次数为3LP: MOV B,#0AH ;10送寄存器B DIV AB XCH A,B MOV R0,A XCH A,B DEC R0 ;修改指针 DJNZ R7,LP ;循环3次 RETFMAX: MOV R7,#09H ;循环次数为9 MOV R0,#50H ;滤波值放入以50H为首的单元LP11: MOV A,R0 ;取第一个数放A中 INC R0 ;指向第二个数 CLR C ;清进位标志 SUBB A,R0 ;第1、2个数比较 JC DONE ;若小于则转到DONE MOV A,R0 DEC R0 ;修改指针 XCH A,R0 ;交换 INC R0 MOV R0,ADONE: DJNZ R7,LP11 ;循环比较 RET ;子程序结束 FMIN: MOV R7,#08H ;去最小值程序 MOV R0,#50H ;取数LP1: MOV A,R0 ;第1个数放入A中 INC R0 ;地址加1 CLR C ;清借位 SUBB A,R0 ;比较第1、2个数 JNC DONE1 ;A中数大,没借位转 MOV A,R0 ;大数放A中 DEC R0 ;地址减1 XCH A,R0 ;大数放A中 INC R0 ;地址再加1 MOV R0,ADONE1: DJNZ R7,LP1 ;记数值不为零,继续比较 RETAVG: MOV R7,#08H ;求平均值子程序 MOV R6,#03H MOV R0,#50H ;取数 MOV R3,#00H ;清存放和的单元 MOV R4,#00HLP2: MOV A,R0 ;取第1个数 ADD A,R4 ;把第1个数放R4中 MOV R4,A ;4中放和的底位 MOV A,R3 ADDC A,#00H ;加进位 MOV R3,A ;和放入R3中 INC R0 ;地址加1 DJNZ R7,LP2 ;记数器不为零,循环LP3: MOV A, R3 RRC A MOV R3,A MOV A,R4 RRC A MOV R4,A DJNZ R6,LP3 MOV 5AH,R4 RET CHUSHI: CLR P1.0 MOV R6,#0CH DJNZ R6,$ MOV A,#0A4H ACALL STFS MOV R6,#2 DJNZ R6,$ SETB P1.0 MOV 43H,#0AH ;查-字符 MOV 44H,#0BH ;查good字符 MOV 45H,#0AH MOV 46H,#0DH MOV 47H,#0EH MOV 35H,#60H ;初始化定时单元 CLR P1.5 ;初始化加热指示灯 RETDIR_0: JB 01H,D_1 ;显示处理 JNB 02H,D_1 CLR 02H MOV R0,#44H MOV A,35H ACALL A_R0 MOV A,31H ACALL A_R0D_1: RETA_R0 : MOV R2,A SWAP A ANL A,#0FH MOV R0,A INC R0 MOV A,R2 ANL A,#0FH MOV R0,A INC R0 RETSKEY: JNB 01H,S_2 MOV R0,22H MOV R0,A ;A中放键值 INC 22H ;指向下一个数码管 MOV A,22H CJNE A,#46H,S_1 S_1: JC S_2 MOV 22H,#44HS_2: RET STOP: CLR TR0 ;停止定时 CLR 03H ;停止加热 CLR 04H ;停止保温 CLR P1.5 ;指示灯熄灭 SETB P1.4 ;加热膜停止加热 CLR P1.6 CLR P1.7 MOV 44H,#0BH ;显示good MOV 45H,#0AH MOV 46H,#0DH MOV 47H,#0EH RETMKEY_1:SETB TR0 SETB 01H MOV 22H, #44HRETXIAODU:SETB 03H ;键按下,执行消毒 CLR 04H CLR P1.4 SETB P1.5 SETB P1.7RETBAOWEN: SETB 04H ;保温键按下,执行保温 CLR 03H CLR 05H SETB P1.6RETMKEY_2: JNB 01H,ML0 MOV R0, #44H MOV A,R0 ANL A,#0FH SWAP A MOV R2, A INC R0 MOV A, R0 ANL A, #0FH ORL A, R2 MOV 35H,A CLR 01H DEC 35H MOV 31H,#59H SETB TR0 ML0: RET INT_T0: PUSH ACC PUSH PSW MOV PSW, #08H ;换区 MOV TL0,#0B0H MOV TH0,#3CH INC 30H ;中断次数加1 MOV A,30H CJNE A,#0AH,L2 L2: JC L6 SETB 02H MOV 30H,#00H MOV A,31H ADD A,#99H ;秒减1 DA A MOV 31H,A JNZ L6 MOV 31H,#59H MOV A,35H ADD A,#99H DA A ;分减1 MOV 35H,AJNZ L6 CLR 02H MOV 35H,#00H LCALL STOP L6: POP PSW POP ACC RETIHOT_NOT: JB 03H,LL0 ;加热标志为1则转LL0 JB 04H,LL2 ;保温标志为1则转LL2 AJMP LL8 ;跳转到LL8LL0: MOV A,60H ;温度值送A CJNE A,#50H,LL1 ;温度值与80度比较,不相等LL1LL1: JC LL 9 ;小于则转LL9 SJMP LL7 ;跳转到LL7LL2: MOV A,60H ;温度值送A CJNE A,#3CH,LL3 ;温度值与60度比较,不相等转 LL3LL3: JC LL4 ;小于则转到LL4 SETB P1.4 ;p1.4置1,不加热 CLR P1.5 ;p1.5置0,加热指示灯熄灭 CLR 05H ;停止标志为0 SJMP LL8 ;跳转到LL8LL4: MOV A,60H ;温度值送A CJNE A,#28H,LL5 ;温度值与40度比较,不相等转 LL5LL5: JNC LL6 ;温度大于40转LL6 CLR P1.4 ;小于则执行加热 CLR 05H SETB P1.5 ;加热指示灯点亮 SJMP LL8 ;跳转到LL8LL6: CLR 05H SJMP LL8LL7: CLR P1.5 SETB P1.4 SJMP LL8LL9: CLR P1.4 SETB P1.5LL8: RETKEY: ACALL KEY1 ;调用读键值子程序 CJNE A,#0FFH,LPP1 CLR 00H RETLPP1: JB 00H,LPP2 SETB 00H ACALL KEYNUM RETLPP2: MOV A,#0FFH RET;读键值子程序KEY1: CLR P1.0 MOV R6,#0CH DJNZ R6,$ MOV A,#15H ACALL STFS MOV R6,#6 DJNZ R6,$ ACALL STJS SETB P1.0 RETSTJS: MOV R7,#08HS_0: SETB P1.1 SETB P1.2 MOV R6,#02H DJNZ R6,$ MOV C,P1.2 RLC A CLR P1.1 MOV R6,#1 DJNZ R6,$ DJNZ R7,S_0 RET;根据键值求键号KEYNUM :MOV B,A MOV R2,#00H MOV R7,#0FHKEY_0: MOV A,R2 ADD A,#0AH MOVC A,A+PC CJNE A,B,KEY_1 SJMP KEY_2KEY_1: INC R2 DJNZ R7,KEY_0KEY_2: MOV A,R2 RETTAB0: DB 1CH,1DH,1EH,1FH,14H DB 15H,16H,17H,0CH,0DH DB 0EH,0FH,04H,05H,06H STFS: MOV R6,#50 DJNZ R6,$ MOV R7,#8ST_1: RLC AMOV P1.2,C SETB P1.1 MOV R6,#2 DJNZ R6,$ CLR P1.1 MOV R6,#2 DJNZ R6,$ DJNZ R7,ST_1 RETDIR: MOV R5,#08H MOV R0,#40H MOV R1,#97HDIR1: CLR P1.0 MOV R6,#0C0H DJNZ R6,$ MOV A,R1 ACALL STFS MOV R6,#04H DJNZ R6,$ CJNE R0,#45H,DIR2 MOV A,R0 ADD A,#1CH AJMP DIR3DIR2: MOV A,R0 ADD A,#0DHDIR3:
展开阅读全文