基于AT89S52单片机水温控制器的设计.doc

上传人:laozhun 文档编号:4148042 上传时间:2023-04-07 格式:DOC 页数:28 大小:1.41MB
返回 下载 相关 举报
基于AT89S52单片机水温控制器的设计.doc_第1页
第1页 / 共28页
基于AT89S52单片机水温控制器的设计.doc_第2页
第2页 / 共28页
基于AT89S52单片机水温控制器的设计.doc_第3页
第3页 / 共28页
基于AT89S52单片机水温控制器的设计.doc_第4页
第4页 / 共28页
基于AT89S52单片机水温控制器的设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于AT89S52单片机水温控制器的设计.doc》由会员分享,可在线阅读,更多相关《基于AT89S52单片机水温控制器的设计.doc(28页珍藏版)》请在三一办公上搜索。

1、课程设计成绩操作报告总成绩指导教师签名湖南理工学院南湖学院单片机应用系统设计报告 基于AT89S52单片机水温控制器的设计 姓 名 学 号 同 组 者 系 别 专 业 电子信息工程 班 级 N电信091F 完成时间 2012年 5月 23日目 录1 绪论- 3 -2 系统总体设计- 4 -2.1硬件总体设计- 4 -2.1.1硬件系统子模块- 4 -2.2 软件总体设计- 4 -3 硬件系统设计- 5 -3.1硬件电路分析和设计报告- 5 -3.1.1单片机最小系统电路- 5 -3.1.2 键盘电路- 6 -3.1.3 数码管及指示灯显示电路- 7 -3.1.4 电源电路- 8 -3.1.5报

2、警电路设计- 9 -4 系统软件设计- 9 -4.1主程序流程图- 9 -4.2各个模块的流程图- 11 -4.2.1读取温度DS18B20模块的流程- 11 -4.2.2键盘扫描处理流程- 13 -4.2.3 报警处理流程- 13 -5 系统调试- 15 -5.1 硬件电路调试- 15 -5.2 软件调试- 15 -5.3 系统操作说明- 16 -总 结- 16 -6同组分工.- 17 -参考文献- 17 -附录一:系统源程序- 18 -附录二:系统硬件原理图与PCB图- 27 -基于单片机的水温控制器的设计1 绪论本系统的设计可以用于水温控制系统和电饭煲等各种电器电路中。它以单片机AT89

3、S52为核心,通过数码管显示温度实现人机对话,使用温度转换芯片DS18B20实时采集温度并通过数码管显示,并提供各种运行指示灯用来指示系统现在所处状态,如:温度设置、加热、停止加热等,整个系统通过三个按键来设置加热温度和控制运行模式。温度控制系统可以说是无所不在,热水器系统、空调系统、冰箱、电饭煲、电风扇等家电产品以至手持式高速高效的计算机和电子设备,均需要提供温度控制功能。以计算机为例,当中的中央处理器的运行速度愈快,所耗散的热量便愈多,为免计算机系统过热而受损,有关系统必须加强温度过高保护功能。传统的温度采集电路相当复杂,需要经过温度采集、信号放大、滤波、AD转换等一系列工作才能得到温度的

4、数字量,并且这种方式不仅电路复杂,元器件个数多,而且线性度和准确度都不理想,抗干扰能力弱。现在常用的温度传感器芯片不但功率消耗低、准确率高,而且比传统的温度传感器有更好的线性表现,最重要的一点是使用起来方便。自动控制仪器仪表总的发展趋势是高性能、数字化、集成化、智能化和网络化。智能温度控制系统的设计是为了满足市场对成本低、性能稳定、可远程监测、控制现场温度的需求而做的课题,具有较为广阔的市场前景。本系统的核心控制芯片选用的是51系列单片机AT89S52,单片机在各个技术领域中的迅猛发展,与单片机所构成的计算机应用系统的特点有关: 单片机构成的应用系统有较大的可靠性。 系统构建简洁、易行,能方便

5、的实现系统功能。 由于构成的系统是一个计算机系统,相当多的功能由软件实现,故具有柔性特点。 有优异的性能价格比。2 系统总体设计2.1硬件总体设计设计并制作一个基于单片机的热水器温度控制系统的电路,其结构框图如图2-1:5V电源单片机AT89S52数码管显示测温传感器等我DS18B20DS18B20复位电路加热装置按键光电隔离图 21 系统结构框图2.1.1硬件系统子模块(1) 单片机最小系统电路部分(2) 键盘扫描电路部分(3) 数码管温度显示和运行指示灯电路部分(4) 温度采集电路部分(5) 继电器控制部分(6) 报警部分2.2 软件总体设计良好的设计方案可以减少软件设计的工作量,提高软件

6、的通用性,扩展性和可读性。本系统的设计方案和步骤如下:(1) 根据需求按照系统的功能要求,逐级划分模块。(2) 明确各模块之间的数据流传递关系,力求数据传递少,以增强各模块的独立性,便于软件编制和调试。(3) 确定软件开发环境,选择设计语言,完成模块功能设计,并分别调试通过。(4) 按照开发式软件设计结构,将各模块有机的结合起来,即成一个较完善的系统。首先接通电源系统开始工作,系统开始工作后,通过按键设定温度值的上限值和下限值,确定按键将设定的温度值存储到指定的地址空间,温度传感器开始实时检测,调用显示子程序显示检测结果,调用比较当前显示温度值与开始设定的温度值比较,如果当前显示值低于设定值就

7、通过继电器起动加热装置,直到达到设定值停止加热,之后进行保温,如果温度高于上限进行报警。3 硬件系统设计3.1硬件电路分析和设计报告本次设计主要思路是通过对单片机编程将由温度传感器DS18B20采集的温度外加驱动电路显示出来,包括对继电器的控制,进行升温,当温度达到上下限蜂鸣器进行报警。P1.7开关按钮是用于确认设定温度的,初始按下表示开始进入温度设定状态,然后通过P1.5和P1.6设置温度的升降,再次按下P1.7时,表示确认所设定的温度,然后转入升温或降温。P2.3所接的发光二极管用于表示加热状态,P2.5所接的发光二极管用于表示保温状态。P2.3接继电器。P3.1是温度信号线。整个电路都是

8、通过软件控制实现设计要求。3.1.1单片机最小系统电路因为89S52单片机内部自带8K的ROM和256字节的RAM,因此不必构建单片机系统的扩展电路。如图31,单片机最小系统有复位电路和振荡器电路。值得注意的一点是单片机的31脚必须接高电平,否则系统将不能运行。因为该脚不接时为低电平,单片机将直接读取外部程序存储器,而系统没有外部程序存储器,所以必须接VCC。在按键两端并联一个电解电容,滤除交流干扰,增加系统抗干扰能力。图31 单片机最小系统图3.1.2 键盘电路键盘是单片机应用系统中的主要输入设备,单片机使用的键盘分为编码键盘和非编码键盘。编码键盘采用硬件线路来实现键盘的编码,每按下一个键,

9、键盘能够自动生成按键代码,并有去抖功能。因此使用方便,但硬件较复杂。非编码键盘仅仅提供键开关状态,由程序来识别闭合键,消除抖动,产生相应的代码,转入执行该键的功能程序。非编码键盘中键的数量较少,硬件简单,在单片机中应用非常广泛。图为按键和AT89S52的接线图,检测仪共设有3个按键,每个按键由软件来决定其功能,3个按键功能分别为:(1) S1:加法按键(当前位加5)(2) S2:减法按键(当前位减5)(3) S3:退出设置键(系统初始化) 图32 单片机最小系统3.1.3 数码管及指示灯显示电路(1)数码管显示说明各个数码管的段码都是单片机的数据口输出,即各个数码管输入的段码都是一样的,为了使

10、其分别显示不同的数字,可采用动态显示的方式,即先只让最低位显示0(含点),经过一段延时,再只让次低位显示1,如此类推。由视觉暂留,只要我们的延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚,过程如表3-1。表3-1 数码管编码表段码位码显示器状态08H01H0abH02H112H04H222H08H3a1H10H424H20H504H40H6aaH80H7本论文中使用了2个数码管,两个使用动态扫描显示实测温度,在设置加热温度的时候,两个数码管是闪烁,以提示目前处在温度设置状态。(2)运行指示灯说明本热水器温度控制系统中共使用到3个LED指示灯和2个数码管。右上角的红色LED是电源指示灯

11、;数码管右边的红色LED是加热指示灯,当刚开机或温度降到设定温度5以下时,该灯会亮,表示目前处于加热状态;当温度上升到设定温度时,该LED灭,同时数码管右边的绿色LED亮,表示目前处于保温状态,用户可以使用热水器;当温度再次下降到设定温度5以下时,绿色LED灭,红色加热的LED灯亮,不断循环。图33 LED数码管显示电路图3.1.4 电源电路采用L7805稳压块,输出为5V。电子组件要正常运作都需要电源电压供电,一般常用的电源电压为+5V或+12V,因为数字IC (Ingegrated Circuit:集成电路)所供给的电压为+5V,而CMOS IC所供给的电压为+12V,7805是一个稳压块

12、。7805稳压管把高电压转换到低电压,7805稳压管具有保护单片机的作用。L7805输出端要并联上一个电解电容,滤除交流电干扰,防止损坏单片机系统。本设计采用两种供电方式,一种为DC718V直流稳压电源变换成5V的直流电;另一种为四节干电池共6V经二极管加压后得到将近5V的直流电源,电源配以开关和指示灯,以方便使用。黄色发光二极管表示保温,红色的表示加热状态。图3-11 系统电源设计图3.1.5报警电路设计同时可以在系统里设定温度上限值,由于加热停止后,加热管还有余热当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。报警电路原理图如图所示。图3-12 报

13、警电路图图中的三极管8550的作用是增加驱动能力,比9012的驱动电流还大些,因此选用8550。当程序进入报警子程序时,把P2.7置0,就会触发蜂鸣器,为了使报警声音效果更好,对P2.7取反,发出报警嘟噜声音。4 系统软件设计本系统采用的是循环查询方式,来显示和控制温度的。主要包括四段程序的设计:DS18B20读温度程序,数码管的驱动程序,键盘扫描程序,以及抱经处理程序。4.1主程序流程图 图 4-1 主程序流程4.2各个模块的流程图4.2.1读取温度DS18B20模块的流程由于DS18B20采用的是一根数据线实现数据的双向传输,而对AT89S52单片机来说,硬件上并不支持单总线协议,因此,我

14、们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。DS18B20单线通信功能是分时完成的,它有严格的时隙概念。因此系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点, DS18B20必须首先调用启动温度转换函数,根据数据手册上对应转换时间来超作,如为12位转换,则应该是最大750mS,另外在对DS18B20超作时,时序要求非常严格,因此最好禁止系统中断。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数

15、据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的读时序:(1)对于DS18B20的读时序分为读0时序和读1时序两个过程。 (2)对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60u

16、s才能完成。DS18B20的写时序:(1)对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 (2)对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。 系统程序设计主要包括三部分:读出温度子程序、温度转换命令子程序、显示温度子程序。图4-2读取温度DS18B20模块的流程图程序代码为:GET_TEMPER:SETBDQ;读出转换后的温度值LCALLINIT_1820;先复位DS18B20JBFL

17、AG1,TSS2RET;判断DS1820是否存在?若DS18B20不存在则返回TSS2:MOVA,#0CCH;DS18B20已经被检测到!跳过ROM匹配LCALLWRITE_1820MOVA,#44H;发出温度转换命令LCALLWRITE_1820LCALL DISPLAY;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALLINIT_1820;准备读温度前先复位MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820MOVA,#0BEH;发出读温度命令LCALLWRITE_1820LCALLREAD_18200;将读出的温度数据保存到35H/36

18、HRET4.2.2键盘扫描处理流程此流程为键盘扫描处理,CPU通过检测各数据线的状态(0或1)就能知道是否有按键闭合以及哪个按键闭合。键盘管理程序的功能是检测是否有按键闭合,如果有按键闭合,消除抖动,根据键号转到相应的键处理程序,按键流程图如图4-3所示。 图 4-3键盘扫描子程序流程图4.2.3 报警处理流程运行程序后,温度传感器DS18B20即可对环境进行温度采集,并送LED数码管显示。我们可以在程序里设定温度上限值,当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。其程序流程图如图4-4所示。图4-4 报警子程序流程图5 系统调试5.1 硬件电路调

19、试仔细检查所接电路,按照硬件原理图接线,理论上是能实现的,如果数码管不显示,则应该检查线路是否正确,或是因为单片机没有工作,还有集电极和发射极是否接对。如果只显示两个八,则可能是DS18B20没有接正确,检查上拉电路是否接好。另外要注意的是,由单片机输出的控制信号比较小,需要进行放大才能驱动继电器工作,否则就不能实现升温过程,通常选用8550三极管来进行放大。还有220V交流电绿色接头和加热管黄色接头必须接正确,否则导致电路烧坏。蜂鸣器是低电平有效。如果能注意这些问题,电路基本不会出错。5.2 软件调试如果硬件电路检查后,没有问题却实现不了设计要求,则可能是软件编程的问题,首先应检查初始化程序

20、,然后是读温度程序,显示程序,以及继电器控制程序,对这些分段程序,要注意逻辑顺序,调用关系,以及涉及到了标号,有时会因为一个标号而影响程序的执行,除此之外,还要熟悉各指令的用法,以免出错。还有一个容易忽略的问题就是,源程序生成的代码是否烧入到单片机中,如果这一过程出错,那不能实现设计要求也是情理之中的事。本人在设计的时候在伟福仿真软件进行调试,通过此软件进行调试可以很方便的观察单片机内部各个寄存器及内部存储器变化情况,以方便进行调试。图为单片机功能调试图。图5-1 单片机功能调试图硬件与软件调试相结合,仔细检查各个模块的设计,旧能顺利完成任务,实现设计要求,在调试过程中必须认真耐心,不能有一点

21、马虎,否则遗漏一个小的问题就会导致整个设计的失败。5.3 系统操作说明本系统上电后数码管显示当前测量温度,此时加热指示灯和保温指示灯均不点亮;若此时按“自动加热”键,则单片机自动将预加热温度设置为80并开始加热,送出一个加热信号,并点亮加热指示灯;若按“温度设置”键,则进入预加热温度设置界面,此时数码管闪烁显示预设置温度,此时通过按键“”和“”进行设置温度,预设置温度按“5”递增或递减,设置好温度后再按一次“温度设置”键确定,单片机保存预设置温度,并开始加热。此时单片机通过数码管显示实时检测的温度并和预设置温度进行对比,如果实测温度大于或等于预设置温度,则单片机发出停止加热信号并熄灭加热指示灯

22、,点亮保温指示灯,且当超过预设温度时发出报警;当温度下降到预设置温度以下5度时,单片机再次发出加热信号,同时熄灭保温指示灯,点亮加热指示灯,依次循环控制。总 结 通过本次的设计,使我们不仅对单片机这门课程有了更深刻的认识,懂得了如何运用课本知识结合实际来完成定时器的显示和编程方法以及数码显示电路的驱动方法,使我们能够很快的适应现代控制技术发展的需求,同时也提高了我们的思维能力和实际操作能力,为以后更好的走上工作岗位奠定了坚实的基础。 另外,这次的设计还让我更进一步的认识了关于AT89S52等芯片的引脚功能以及使用方法,使我学会了应用不同的芯片来配合完成整个设计的操作。 在做硬件电路的这段时间里

23、,从思考设计到对电路的调试经过了许多困难。同样在对软件进行设计时,也可为一路坎坷。但是通过对软硬件不断撞墙,不断思考解决问题的过程中,我学会了很多东西,同时对单片机也有了更深的认识。在做设计的时候,很需要耐心和对事物的细心,很多时候一个简单问题的一个简单的疏忽就会导致整个电路的不工作,只有不断的检查不断的调试,才能真正完成一个设计的制作。只有不断的发现问题解决问题,才能从问题中改变自己,提升自己对单片机的能力。 此设计虽然能够完成温度的显示和控制,但功能和精度有待于进一步提高。以后可以通过加入PID算法优化控制功能,并通过液晶显示屏实时显示温度。6.同组分工: 楊景强:负责画原理图和PCB图

24、李 京:负责做板子 张海雪:负责软件 参考文献l 杨居义 主编单片机课程设计指导 清华大学出版社附录一:系统源程序EMPER_LEQU29H;用于保存读出温度的低8位TEMPER_HEQU28H;用于保存读出温度的高8位FLAG1EQU38H;是否检测到DS18B20标志位A_BITEQU20H;数码管个位数存放内存位置B_BITEQU21H;数码管十位数存放内存位置B1EQU70H;温度小数点位A1EQU71H;设定温度值DQEQUP3.1;DQ为DS18B20数据位BELLEQUP2.7;/蜂鸣报警ORG0000H;单片机内存分配申明!AJMPMAIN0;/前面的都是定义MAIN:MOVR

25、0,#10M1:CPLP2.3ACALLDELAY125DJNZR0,M1;/此段为灯闪5次,无实际意义;/MAIN0:MOVA1,#80;默认加热为80度MAIN1:LCALLD1820;调用读温度子程序 LCALLDISPLAY;调用数码管显示子程序 MOVA,29H CLRC CJNEA,A1,MAIN1_1 SETBBELL;/温度相等,关闭蜂鸣器 AJMPMAIN1_1_A;/下等不用叫蜂鸣器MAIN1_1:JCMAIN1_2;为1转移,表示小于设定温度 CPLBELL;蜂鸣器断续鸣叫MAIN1_1_A:CLRP2.3;/下面是表示没达到温度 SETBP2.5 AJMPMAIN2;/

26、主要是检测温度是否小于设定的温度,小于,则开发热管CLRP2.3MAIN1_2:SETBBELL;/关闭蜂鸣器 CLRP2.5;/开发热管 SETBP2.3;/上面的是大于,关发热管MAIN2:JBP1.0,MAIN1;/看P1.0有否按下 ACALLDELAY125;/延时防抖动,常用的手法,网上很多介绍的 JBP1.0,MAIN1;/再次查看 CLRP2.3 JNBP1.0,$;/等按键完全松手才进入! SETBP2.3 SETBP2.5;/检测到P1.0按键后后进入设定温度MAIN2_1:ACALLDISPLAY1 JBP1.2,MAIN2_2 ACALLDELAY125 JBP1.2,

27、MAIN2_2 JNBP1.2,$ MOVA,#5 ADDA,A1 CLRC CJNEA,#100,MAIN2_1_1 MOVA,#99 AJMPMAIN2_1_3;/上面这一段是+5度按键,按下+5度MAIN2_1_1:JCMAIN2_1_3MAIN2_1_2:CLRCMOVA,#99MAIN2_1_3:MOVA1,AMAIN2_2:JBP1.4,MAIN2_3ACALLDELAY125JBP1.4,MAIN2_3JNBP1.4,$MOVA,A1CJNEA,#99,ZY1MOVB,#4AJMPZY2ZY1:MOVB,#5ZY2:CLRCMOVA,A1SUBBA,BMAIN2_2_1:JNCM

28、AIN2_2_2MOVA1,#0AJMPMAIN2_3;/上面这一段是-5度按键,按下-5度MAIN2_2_2:MOVA1,AMAIN2_3:JBP1.6,MAIN2_1ACALLDELAY125JBP1.6,MAIN2_1CLRP2.3JNBP1.6,$SETBP2.3AJMPMAIN1;/上面这一段是退出的意思的!D1820:LCALLGET_TEMPER;调用读温度子程序MOVB1,29HMOVA,29HMOVC,40H;将28H中的最低位移入CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,AMOVA,B1MOVB,#10HMULABMOV

29、B,#10HDIVABMOVB,#10MULABMOVB,#10HDIVABMOVB1,ARET;/上面这一段是读取温度后进行转换的意思!;/;/;/INIT_1820:SETBDQ;这是DS18B20复位初始化子程序NOPCLRDQ;主机发出延时537微秒的复位低脉冲MOVR1,#3TSR1:MOVR0,#107DJNZR0,$DJNZR1,TSR1SETBDQ;然后拉高数据线NOPNOPNOPNOPMOVR0,#25HTSR2:JNBDQ,TSR3;等待DS18B20回应DJNZR0,TSR2LJMPTSR4;延时TSR3:SETBFLAG1;置标志位,表示DS1820存在LJMPTSR5

30、TSR4:CLRFLAG1;清标志位,表示DS1820不存在LJMPTSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;时序要求延时一段时间TSR7:SETBDQRETGET_TEMPER:SETBDQ;读出转换后的温度值LCALLINIT_1820;先复位DS18B20JBFLAG1,TSS2RET;判断DS1820是否存在?若DS18B20不存在则返回TSS2:MOVA,#0CCH;DS18B20已经被检测到!跳过ROM匹配LCALLWRITE_1820MOVA,#44H;发出温度转换命令LCALLWRITE_1820LCALLDISPLAY;这里通过调用显示子程序实现

31、延时一段时间,等待AD转换结束,12位的话750微秒LCALLINIT_1820;准备读温度前先复位MOVA,#0CCH;跳过ROM匹配LCALLWRITE_1820MOVA,#0BEH;发出读温度命令LCALLWRITE_1820LCALLREAD_18200;将读出的温度数据保存到35H/36HRETWRITE_1820:MOVR2,#8;一共8位数据CLRC;写DS18B20的子程序(有具体的时序要求)WR1:CLRDQMOVR3,#6DJNZR3,$RRCAMOVDQ,CMOVR3,#23DJNZR3,$SETBDQNOPDJNZR2,WR1SETBDQRETREAD_18200:MO

32、VR4,#2;将温度高位和低位从DS18B20中读出MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOVR2,#8;数据一共有8位RE01:CLRC;读DS18B20的程序,从DS18B20中读出两个字节的温度数据SETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR3,#9RE10:DJNZR3,RE10MOVC,DQMOVR3,#23RE20:DJNZR3,RE20RRCADJNZR2,RE01MOVR1,ADECR1DJNZR4,RE00RET;/上面的这些都是温度采集的!DISPLAY:MOVA,29H;将29H

33、中的十六进制数转换成10进制MOVB,#10;10进制/10=10进制DIVAB;显示子程序MOVA_BIT,A;十位在AMOVB_BIT,B;个位在BMOVDPTR,#NUMTAB;指定查表启始地址MOVR0,#1DPL1:MOVR1,#25;显示1000次DPLOP:MOVA,B_BIT;取个位数MOVCA,A+DPTR;查个位数的7段代码MOVP0,A;送出个位的7段代码CLRP2.2;开个位显示ACALLD1MS;显示1MSSETBP2.2MOVA,A_BIT;取十位数MOVCA,A+DPTR;查十位数的7段代码MOVP0,A;送出十位的7段代码CLRP2.1;开十位显示ACALLD1

34、MS;显示1MSSETBP2.1MOVP0,#0FFHDJNZR1,DPLOP;100次没完循环DJNZR0,DPL1;4个100次没完循环RET;/上面这段显示实时温度;/DISPLAY1:MOVA,A1;将29H中的十六进制数转换成10进制MOVB,#10;10进制/10=10进制DIVAB;显示子程序MOVA_BIT,A;十位在AMOVB_BIT,B;个位在BMOVDPTR,#NUMTAB;指定查表启始地址MOVR0,#1DPL11:MOVR1,#25;显示1000次DPLOP1:MOVA,B_BIT;取个位数MOVCA,A+DPTR;查个位数的7段代码MOVP0,A;送出个位的7段代码

35、CLRP2.2;开个位显示ACALLD1MS;显示1MSSETBP2.2MOVA,A_BIT;取十位数MOVCA,A+DPTR;查十位数的7段代码MOVP0,A;送出十位的7段代码CLRP2.1;开十位显示ACALLD1MS;显示1MSSETBP2.1MOVP0,#0FFHDJNZR1,DPLOP1;100次没完循环DJNZR0,DPL11;4个100次没完循环RET;/上面这段显示设置温度D1MS:MOVR7,#50;1MS延时DJNZR7,$RETDELAY10:MOVR6,#20;10MS延时D3:MOVR5,#255DJNZR5,$DJNZR6,D3RETDELAY125:MOVR6,#255;125MS延时D1:MOVR5,#255DJNZR5,$DJNZR6,D1RETDELAY1S:MOVR7,#8;1S延时D2:LCALLDELAY125DJNZR7,D2RET;/这些都是延时,长短而已NUMTAB:DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,88H,83HDB0C6H,0A1H,86H,8EH;/数码管的具体值END附录二:系统硬件总图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号