怎么用单片机实现播报功能水温的控制

基于单片机的水温控制制器系统设计
我的图书馆
基于单片机的水温控制制器系统设计
基于单片机的水温控制制器系统设计
基于单片机的水温控制制器系统设计
摘要:本文介绍了用51单片机设计的一种多功能水温控制器,具有自动和手动加水、设置水温、实时显示水量及温度和报警功能,并且具有结构简单、可靠性高、成本低等特点。
当前市场上的水温控制器基本上采用双金属片温控,控温精度低、可靠性差、功能单一。随着微电子技术的发展,单片微处理器功能日益增强,价格低廉,在各方面得到广泛应用。在水温控制器中应用单片机,具有设计简单、可靠性高、功能易扩展等优点。
本文着重于水温器在智能控制方面的探讨。
关键词:单片机,水温器,51,加热
1&&&&&&&& 整体设计方案 1.1&&&& 设计要求
完成基于单片机的水温控制器系统的设计,能够实现水温的自动加热,并检测水温大小,对温度进行显示。
o&&&&&&& 程序设计合理、简洁。
o&&&&&&& 自行设计检测及相关处理电路。
o&&&&&&& 完成单片机数据采集及处理的硬件电路设计及相关软件编程。
o&&&&&&& 辅助电路及元器件自选。
o&&&&&&& 自选传感器类型
o&&&&&&& 加热范围20~60摄氏度1.2&&&& 设计目的
现代科技飞速发展,拥有渊博的知识是今后一展鸿图的基础.实践也同知识一样重要,如果不在学生的实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节,学习与应用脱节的局面。任随书本上把单片微机技术介绍得多么重要、多么实用、多么好用,同学们仍然会感到那只是空中楼阁,离自己十分遥远,或者会因此而对它失去兴趣,或者会感到它高深莫测无从下手,这些情况都会令课堂教学的效果大打折扣。
“单片机课程设计”的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。2&&&&&&&& 设计方案
本文介绍了用51单片机设计的一种多功能水温控制器,具有自动和手动加水、设置水温、实时显示水量及温度和报警功能,并且具有结构简单、可靠性高、成本低等特点。
当前市场上的水温控制器基本上采用双金属片温控,控温精度低、可靠性差、功能单一。随着微电子技术的发展,单片微处理器功能日益增强,价格低廉,在各方面得到广泛应用。在水温控制器中应用单片机,具有设计简单、可靠性高、功能易扩展等优点。
&&& 水温控制器主要实现对水温的控制,并满足不同用户的个性需求。因此一个较完善的控制器应具有以下功能:
  水温的测量与显示;水量的测量与显示;用户设定功能(如水温设定,定时设定等);对电加热管的控制功能;一些功能键(如定时自动加水,恒温控制,手动加水,手动加热等)。
&SHAPE& \* MERGEFORMAT
图1 原理框图3&&&&&&&& 硬件电路设计
  根据水温控制器的功能要求,并结合对51系列单片机的资源分析,采用此系列中的主流型号89C51作为电路系统的控制核心。电水温控制器的总体布局如图1所示。基本硬件电路图如图2(a)~(c)所示。在本系统中,P0.0~P0.3用于七段码显示,P2.6控制水闸开关,P2.7控制电加热管,P3.3~P3.5用于按键设计和读取水量,P3.0~P3.2用于跟DS1820通信进行水温测量,P2.0~P2.1对七段码进行扫描,P2.2~P2.5 LED指示灯显示,P3.7控制扬声器用于报警和指示。
1.水温测量电路
水温测量电路如图4所示,测温元件采用DALLAS的单线数字温度传感器DS1820。DS1820提供九位温度读数,测量范围-55℃~125℃,采用独特1-WIRE 总线协议,只需一根口线即实现与MCU的双向通讯,具有连接简单,高精度,高可靠性等特点。在工作时,通过总线向其提供电源,单片机发出指令码读取温度值。3.1&&&& DS1820的工作原理
DS1820采用3脚PR-35封装或8脚SOIC封装,管脚排列如图2所示。图中3号引脚为GND,2号引脚I/O为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平。1号引脚VDD是外部+5V电源端,不用时应接地。NC为空脚。图3所示为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL解发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。
图2 DS1820引脚图
图3 DS18B20内部结构图3.2&&&& 寄生电源电路
寄生电源由二极管VD1、VD2和寄生电容C组成。电源检测电路用于判定供电方式。寄生电源供电时,VDD端接地,器件从单线总线上获取电源。在I/O线呈低电平时,改由C上的电压Vc继续向器件供电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读ROM。若采用外部电源VDD,则通过VD2向器件供电。3.3&&&& 温度测量原理
DS1820测量温度时使用特有的温度测量技术。其测量电路框图如图3所示。DS1820内部的低温度系数振荡器能产生稳定的频率信号f0,高温度系数振荡器则将被测温度转换成频率信号f。当计数门打开时,DS1820对f0计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以被偿。测量结果存入温度寄存器中。一般情况下的温度值应为9位(符号点1位),但因符号位扩展成高8位,故以16位被码读出。
图4 &DS1820测温原理框图
高速暂存器
在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后现用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:
Ts=(Tz-0.25℃)+(CD-Cs)/CD3.4&&&& 高温自动报警电路
DS1820完成温度转换后,就把测得的温度值与TH、TL作比较。若T&TH或T&TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS1820同时测量温度并进行告警搜索。一旦某测温点越限,主机利用告警搜索命令即可识别正在告警的器件,并读出其序号,而不必考虑非告警器件。
&&&&& CRC的产生
在64位ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS1820中的CRC值作比较,以判断主机收到的ROM数据是否正确。CRC的函数表达式为:CRC=X8+X5+X3+1。此外,DS1820尚需依上式为暂存器中的数据来产生一个8位CRC送给主机,以确保暂存器数据传送无误。3.5&&&& 基本温度水温测量电路
 基本温度水温测量电路如图5所示,本系统中,一个DS18B20温度传感器,三个七段码显示与四个LED灯指示,四个功能按键与水量设定按键使用同一组按键。按键的优先权高于水量信号,水量高档位信号优先权高于低档位信号,以保证能优先响应按键。
图5& 基本温度水温测量、键盘电路
3.6&&&& 显示电路及键盘电路
显示电路如图6所示,温度采用二位七段码显示,显示范围0℃~99℃。水量采用一位七段显示,显示1、2、3、4,四档水位。对温度和水量进行循环扫描显示。四个LED用于当前按键功能设定。
设置按键两个,一个十位按键,一个个位按键。
图6 基本显示电路图图
3.7&&&& 水温和水量控制电路
水温和水量控制电路如图7所示,单片机通过光电耦合对继电器进行控制,用来切断或接通加热管电源,关闭或打开水阀,从而达到对水温和水量的控制。
& 图7& 水温和水量控制电路4&&&&&&&& 系统软件设计
  系统软件采用汇编语言精简指令编写。本系统中键盘扫描、漏电检测等子程序都通过查询实现,并采用12MHz的时钟频率,对指令的运行时间进行了精确计算和设计,保证软件的可靠性和稳定性。系统主程序框图如图7所示,DS1820工作程序流程图如图8所示。4.1&&&& 键盘和显示
本系统中,有四个功能按键:定时加水、恒温控制、手动加水和手动加热;三个七段码显示与四个LED灯指示。
(1) 按下定时加水按钮时,定时LED变亮,并以当前时间为定时时标,每24小时自动加水至设定水量;若长按此钮超过5秒,定时LED灭,并听到“嘟”一声进行水量设定,此后每按一下钮,水量显示加一档,1~4档循环显示,不按此钮超过5秒,再次听到“嘟”一声,水量设定完毕。系统的定时功能主要通过软件完成。
(2)按下恒温控制钮,恒温LED变亮,表示进行恒温控制,再按一下LED灭,取消恒温控制。与水量设定类似,长按后,进行温度设定。
(3)按下手动加热钮时,加热LED变亮,加热至65℃,如水量少于1档,则先加水到1档,再按一次取消加热。
(4)按下手动加水钮时,加水至设定水量值,长按可设定水量。手动加水过程中,再次按下取消加水。正常情况下,两个七段码显示当前水温,另一个显示当前水位。4.2&&&& 水温测量
温度读取是通过与DS1820通信完成。DS1820通信功能是分时完成的,它有严格的时隙概念。因此系统对DS1820的各种操作必须按协议进行。DS1820是美国DALLAS公司生产的单线数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,特别适合于构成多点温度测控系统,可直接将温度转化成串行数字信号供微机处理,而且每片DS1820都有唯一的产品号并可存入其ROM中,以使在构成大型温度测控系统时在单线上挂任意多个DS1820芯片。从DS1820读出或写入DS1820信息仅需要一根口线,共读写及温度变换功率来源于数据总线,该总线本身也可以向所挂接的DS1820供电,而无需额处电源。DS1820能提供九位温度读数,它无需任何外围硬件即可方便地构成温度检测系统。
5&&&&&&&& 结论
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。&&& 回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在我的努力和同学下,终于游逆而解。电水温器单片机控制器具有新颖、价廉、安全、实用等优点,并且在国产电水温器上获得了成功应用。本文的一些方法也适用于冰箱、空调等家用电器的电脑控制设计中。此次设计之后的到一些设计体会:
1.在设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机片内有哪些资源,它的引脚功能都要了解
2.设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图.
3.在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路.
4.在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题.
读取键盘状态&&SHAPE& \* MERGEFORMAT
&SHAPE& \* MERGEFORMAT
图8 主程序流程图
&&&&&&&&&&&&&&&&&&&&&&&&&&
6&&&&&&&& 参考文献
[1]苏长赞主编:《实用遥控技术手册》,北京:人民邮电出版社,1996年。
[2]陈永甫主编:《红外探测与控制电路》,北京:人民邮电出版社,2004年。
[3]无线电爱好者丛书编委会,黄继昌等主编:《实用识别电路》,北京:&&&& 人民邮电出版社,2005年。
[4]华中理工电子学教研室编,康华光主编:《电子技术基础》(模拟部分)(第四版),北京:高等教育出版社,1999年。
[5]华中理工电子学教研室编,康华光主编:《电子技术基础》(数字部分)(第四版),北京:高等教育出版社,2000年。
[6]秦曾煌主编:《电工学》上册,电工技术(第五版),北京:高等教育出版社,1999年。
[7]秦曾煌主编:《电工学》下册,电子技术(第五版),北京:高等教育出版社,1999年。
[8]万福君.单片机微机原理系统设计与应用.中国科学技术大学出版社,2003.
[9]宏晶科技.STC89CS1RC-RD+- GUIDE. http://www.stc-mcu.com.cn. 2005.
[10]基于Keil CS 1高级语言的TKS系列仿真器使用指南.广州致远电子有限公司,2004.
[11]袁希光.传感器技术手册.国防工业出版社,1986.
[12]强锡福.传感器.机械工业出版社,2000.
[13]徐爱均.Keil Cx51 V7.0单片机高级语言编程与u Vision2应用实践.电子工业出版社,2004.
[14]赖麒文.8051单片机C语言彻底应用.科学出版社,2002.
[15]周航慈.单片机应用程序设计技术.北京航空航天大学出版社,1991,
[16]马忠梅,籍顺心.单片机的C语言应用程序设计.北京航空航天大学出版社,1999.
[17]刘光斌,刘冬,姚志成.单片机系统实用抗干扰技术.人民邮电出版社,2003.
[18]张伟,王力,赵晶.Protel DXP入门与提高.人民邮电出版社,2003.
[19]阎石.数字电子技术基础.高等教育出版社,1998.7&&&&&&&& 致谢
首先感谢各位指导老师,各位同学给我的支持和帮助,感谢他们在这几个月份给与的关键性指导和提议。
同时我也感谢家里的父母,为我提供了一个很好的学习环境,和无微不至的关怀,在我感到困难和灰心时,他们对我的鼓励,我的成功有他们不可以或缺的功劳。
感谢我的指导老师,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。&
岁月如流,流走的是时光,流不动的是永存于心底的这份情愫!
8&&&&&&&& 附录 附录一:程序清单
ORG 0000H;系统主程序JMP MAIN
JMP& LEDINT0
JMP& LEDINT1
PP5:JMP PP1
PP7:JMP PP2
MAIN:& MOV 34H,#0FFH
&&&&&& MOV 35H,#0FFH
&&&&&& MOV 36H,#00H
&&&&&& MOV 37H,#00H
&&&&&& clr&& p1.6
&&&&&& setb& p1.7
MOV SP,#60H&&&& ;给堆栈指针赋初值
MOV TMOD,#51H&& ;定时器0工作于方式定时器1作为计数器
MOV TH0,#0ECH&& ;给计数寄存器的高8位赋初值
MOV TL0,#77H&&& ;给计数寄存器的低8位赋初值
&&&&& MOV&& 30H,#20
&&&&& mov&& 31h,#10
&&&&& MOV&& 32H,#20
&&&&& mov&& 33h,#10
&&&&& mov&& th1,#00h
&&&&& mov&& tl1,#00h
&&&&& MOV IE,#82H
&&& SETB&&& TR0&&&&&&&& ;计时开始
&&&&& setb& tr1&&&&&&&& ;开始计数
&&&&& mov r0,#0
& &&&&mov r1,#0
&&& & mov r2,#0
&&&&& mov r3,#0
&&&&& mov r4,#0
LOOP:& mov dptr,#0a100h& ;读取键盘状态
&&&& movx a,@dptr
&&&&&& MOV 21H,A&& ;把A的内容赋给缓冲区21H,再比较判断然后输出
&&&&&& JNB 21H.7,PP3&&&& ;加水到50
&&&&&& JNB 21H.6,PP7&&& ;加水到80
&&&&&& JNB 21H.5,PP5&&&& ;加水到100
&&&& MOV A,34H
&&&& CLR C
&&&& SUBB A,#1
&&&& JC PP3&&&&&&&&&&&&& ;C是1 转PP3
&&&& JZ TTL4&&&&&&&&&&&& ;A=0 转TTL4
&&&& AJMP BB&&&&&&&&&&&& ;无条件转移
&&& TTL4:MOV A,35H
&&&& CLR C
&&&& SUBB A,#10
&&&& JC PP3
&&& MOV A,36H
&&&& CLR C
&&&& SUBB A,#5
&&&& JC BB
&&&& JZ TTL5
&&&& AJMP PP6
& TTL5:MOV A,37H
&&&& CLR C
&&&& SUBB A,#10
&&&& JC BB
&&&& AJMP PP6
&& BB:&&& MOV A,R0
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A000h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,R1
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A001h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,R2
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A002h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,R3
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A003h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,R4
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A004h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& ajmp loop
&&&&& pp3:&
&&&&&& MOV A,#0
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A000h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&& &MOV A,#5
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A001h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,34H
&&&&&& CLR C
&&&&&& SUBB A,#1
&&&&&& JC PP3
&&&&&& JZ TTL&&&
&&&&&& TTL:MOV A,35H
&&&&&& CLR C
&&&&&& SUBB A,#55
&&&&&& JC PP3
&& JMP LOOP
pp2:& MOV A,#8
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A001h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,#0
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A000h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&& MOV A,34H
&&& SUBB A,#2
&&& JC PP2
&&& JZ TTL1
TTL1:MOV A,35H
&&& SUBB A,#55
&&& JC PP2
PP6:& MOV A,#10
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A002h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,#13
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A001h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,#13
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A000h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&& MOV A,34H
&&&&& CLR C
&&&&& SUBB A,#4
&&&&& JC PP6
&&&&& JZ TTL6
&&&&& JMP LOOP
&&&&& TTL6:MOV A,35H
&&&&& CLR C
&&&& SUBB A,#55
&&&& JC PP6
&&&& JMP LOOP
pp1:& MOV A,#9
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A000h
&&&&&& MOVx& @DPTR,A
&&&&&& lcall delay
&&&&&& MOV A,#9
&&&&&& LCALL XIANSHI
&&&&&& MOV&& DPTR ,&& #0A001h
&&&&&& MOVx& @DPTR,A
&&&& &&lcall delay
&&& MOV A,34H
&&& SUBB A,#4
&&& JC PP1
&&& JZ TTL2
TTL2:MOV A,35H
&&& SUBB A,#55
&&& JC PP1
&TEMPER_L&&&&EQU&&&&36H;DS1820温度测量子程序TEMPER_H&&&&EQU&&&&35HDQ&&&&&&&&BIT&&&&P3.2;&DS18B20初始化程序INIT_1820:&&&&SETB&&&&DQ&&&&NOP&&&&CLR&&&&DQ&&&&MOV&&&&R0,#06BHTSR1:&&&&DJNZ&&&&R0,TSR1&&&&&&&&;&延时&&&&SETB&&&&DQ&&&&MOV&&&&R0,#25HTSR2:&&&&JNB&&&&DQ,TSR3&&&&DJNZ&&&&R0,TSR2&&&&LJMP&&&&TSR4&&&&&&&&&&&&;&延时TSR3:&&&&SETB&&&&FLAG1&&&&&&&&&&&&;&置标志位,表示DS1820存在&&&&LJMP&&&&TSR5TSR4:&&&&CLR&&&&FLAG1&&&&&&&&&&&&;&清标志位,表示DS1820不存在&&&&LJMP&&&&TSR7TSR5:&&&&MOV&&&&R0,#06BHTSR6:&&&&DJNZ&&&&R0,TSR6&&&&&&&&;&延时TSR7:&&&&SETB&&&&DQ&&&&RET;//*****************************************//;&重新写DS18B20暂存存储器设定值;//*****************************************//RE_CONFIG:&&&&JB&&&&FLAG1,RE_CONFIG1&&&&;&若DS18B20存在,转RE_CONFIG1&&&&RETRE_CONFIG1:&&&&MOV&&&&A,#0CCH&&&&&&&&;&发SKIP&ROM命令&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#4EH&&&&&&&&;&发写暂存存储器命令&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#00H&&&&&&&&;&TH(报警上限)中写入00H&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#00H&&&&&&&&;&TL(报警下限)中写入00H&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#1FH&&&&&&&&;&选择9位温度分辨率&&&&LCALL&&&&WRITE_1820&&&&RET;//*****************************************//;&读出转换后的温度值;//*****************************************//GET_TEMPER:&&&&SETB&&&&DQ&&&&&&&&&&&&;&定时入口&&&&LCALL&&&&INIT_1820&&&&JB&&&&FLAG1,TSS2&&&&RET&&&&&&&&&&&&&&&&;&若DS18B20不存在则返回TSS2:&&&&MOV&&&&A,#0CCH&&&&&&&&;&跳过ROM匹配&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#44H&&&&&&&&;&发出温度转换命令&&&&LCALL&&&&WRITE_1820&&&&LCALL&&&&INIT_1820&&&&MOV&&&&A,#0CCH&&&&&&&&;&跳过ROM匹配&&&&LCALL&&&&WRITE_1820&&&&MOV&&&&A,#0BEH&&&&&&&&;&发出读温度命令&&&&LCALL&&&&WRITE_1820&&&&LCALL&&&&READ_1820&&&&MOV&&&&TEMPER_NUM,A&&&&;&将读出的温度数据保存&&&&RET;//*****************************************//;&读DS18B20的程序,从DS18B20中读出一个字节的数据;//*****************************************//READ_1820:&&&&MOV&&&&R2,#8RE1:&&&&CLR&&&&C&&&&SETB&&&&DQ&&&&NOP&&&&NOP&&&&CLR&&&&DQ&&&&NOP&&&&NOP&&&&NOP&&&&SETB&&&&DQ&&&&MOV&&&&R3,#7&&&&DJNZ&&&&R3,$&&&&MOV&&&&C,DQ&&&&MOV&&&&R3,#23&&&&DJNZ&&&&R3,$&&&&RRC&&&&A&&&&DJNZ&&&&R2,RE1&&&&RET;//*****************************************//;&写DS18B20的程序;//*****************************************//WRITE_1820:&&&&MOV&&&&R2,#8&&&&CLR&&&&CWR1:&&&&CLR&&&&DQ&&&&MOV&&&&R3,#6&&&&DJNZ&&&&R3,$&&&&RRC&&&&A&&&&MOV&&&&DQ,C&&&&MOV&&&&R3,#23&&&&DJNZ&&&&R3,$&&&&SETB&&&&DQ&&&&NOP&&&&DJNZ&&&&R2,WR1&&&&SETB&&&&DQ&&&&RET;//*****************************************//;&读DS18B20的程序,从DS18B20中读出两个字节的温度数据;//*****************************************//READ_18200:&&&&MOV&&&&R4,#2&&&&&&&&&&&&;&将温度高位和低位从DS18B20中读出&&&&MOV&&&&R1,#36H&&&&&&&&;&低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)RE00:&&&&MOV&&&&R2,#8RE01:&&&&CLR&&&&C&&&&SETB&&&&DQ&&&&NOP&&&&NOP&&&&CLR&&&&DQ&&&&NOP&&&&NOP&&&&NOP&&&&SETB&&&&DQ&&&&MOV&&&&R3,#7&&&&DJNZ&&&&R3,$&&&&MOV&&&&C,DQ&&&&MOV&&&&R3,#23&&&&DJNZ&&&&R3,$&&&&RRC&&&&A&&&&DJNZ&&&&R2,RE01&&&&MOV&&&&@R1,A&&&&DEC&&&&R1&&&&DJNZ&&&&R4,RE00&&&&RET;//*****************************************//;&将从DS18B20中读出的温度数据进行转换;//*****************************************//TEMPER_COV:&&&&MOV&&&&A,#0F0H&&&&ANL&&&&A,TEMPER_L&&&&&&&&;&舍去温度低位中小数点后的四位温度数值&&&&SWAP&&&&A&&&&MOV&&&&TEMPER_NUM,A&&&&MOV&&&&A,TEMPER_L&&&&JNB&&&&ACC.3,TEMPER_COV1&&&&;&四舍五入去温度值&&&&INC&&&&TEMPER_NUMTEMPER_COV1:&&&&MOV&&&&A,TEMPER_H&&&&ANL&&&&A,#07H&&&&SWAP&&&&A&&&&ORL&&&&A,TEMPER_NUM&&&&MOV&&&&TEMPER_NUM,A&&&&;&保存变换后的温度数据&&&&LCALL&&&&BIN_BCD&&&&RET;//*****************************************//;&将16进制的温度数据转换成压缩BCD码;//*****************************************//BIN_BCD:&&&&MOV&&&&DPTR,#TEMP_TAB&&&&MOV&&&&A,TEMPER_NUM&&&&MOVC&&&&A,@A+DPTR&&&&MOV&&&&TEMPER_NUM,A&&&&
;***********************
;定时器0中断服务子程序
;***********************
&&& PUSH&&& PSW&&&& ;压栈保护现场
&&& PUSH&&& ACC
clr&& ET0&&&&&& ;防止连续中断
CLR TR0&&&& && ;禁止定时器计数&&&& CLR&& TR1
MOV TH0,#3CH& ;重新给计数器赋初值
MOV TL0,#0B0H
DJNZ& 30H,LEDRET&&& ;定时1s到了吗?
djnz 31h,ibtd& ;水温水位分别显示20秒
MOV TMOD,#15H&& ;定时器1工作于方式定时器0作为计数器
MOV TH1,#0ECH&& ;给计数寄存器的高8位赋初值
MOV TL1,#77H&&& ;给计数寄存器的低8位赋初值
MOV&& 32H,#20
mov&& 33h,#10&&
mov&& th0,#00h
mov&& tl0,#00h
MOV IE,#88H&&&& ;IE是寄存器,88H的输入设置了中断----
setb& tr1&&&&&&&&&&&&&&&&&&&&&
SETB&&& TR0 &&&&&&&&&&& ;开始计数
IBTD:MOV 30H,#20&&& ;是,则重新赋初值
MOV R3,A&&
MOV TH1,#00H
MOV TL1,#00H&&&&&&&&&&&
CLR&&& A&&&&&&&&&&&&&&&&&&&&&&&
MOV R7,#16
PP0:&&& CLR C
&&&&&& MOV A,R3
&&&&&&& RLC A
&&&&&& MOV R3,A
RLC A&&&&& ;把十六进制数转换成十进制数
DA A&&&&&&&&&&&&&&&
DJNZ R7,PP0&&&& ;转换完毕
MOV A,R4&&&&&&& ;把R4,R5,R6中的十进制数一位一位的存放于R4,R3,R2,R1,R0中
ANL A,#0FH
ANL A,#0FH
ANL A,#0FH
ANL A,#0FH
LEDRET:SETB TR0
&&&&&& SETB TR1&&&&&&&& ;启动定时器
&&&&&&&&&&&&&&&&&&&&&&& ;启动计数器
MOV IE,#82H
POP ACC&&&&&&&& ;出栈
RETI&&&&&&&&&&&&&&& ;中断返回
PUSH&&& PSW&&&&&&&& ;压栈保护现场
PUSH&&& ACC
clr&& ET1&&&&&&&&&& &;防止连续中断
&&& CLR TR0&&&& &&&& ;禁止定时器计数
&&&&& CLR&& TR1
MOV TH1,#3CH&&& ;重新给计数器赋初值
MOV TL1,#0B0H
DJNZ& 32H,LEDRET1&& ;定时1s到了吗?
djnz 33h,IBTD1&&&&&& ;显示水位时间到了没有啊?
&;到就去显示水温
&MOV&&& TMOD,#51H&&&&&& ;定时器0工作于方式定时器1作为计数器
MOV TH0,#0ECH&&&&&& ;给计数寄存器的高8位赋初值
MOV TL0,#77H&&&&&&& ;给计数寄存器的低8位赋初值
MOV&& 30H,#20
mov&& 31h,#10&&
mov&& th1,#00h
mov&& tl1,#00h
MOV IE,#82H
SETB&&& TR0&&&&&&&& ;计时开始
setb& tr1&&&&&&&&&&&&&& ;开始计数
RETI&&&&&&&
IBTD1:MOV 32H,#20&& ;是,则重新赋初值
;**************************
;将十六进制转换为BCD码&&& **
; **************************
&&&& MOV A,TH0
&&&&& MOV 36H,A
&&&&& MOV R2,A
&&&&& MOV A,TL0
&&&&& MOV 37H,A
&&&&& MOV R3,A&&
&&&&& MOV TH0,#00H
&&&&& MOV TL0,#00H&&&&&&&&&&&
&CLR&&& A&&&&&&&&&&&&&&&&&&&&&&&
&&&&& MOV R4,A
&&&&& MOV R5,A
&&&&& MOV R6,A
&&&&& MOV R7,#16
PP4:&&& CLR C
&&&&&& MOV A,R3
&&&&&&& RLC A
&&&&&& MOV R3,A
DJNZ R7,PP4
&&&&&&&&&&&&&&& ;转换完毕
ANL A,#0FH
ANL A,#0FH
ANL A,#0FH
ANL A,#0FH
LEDRET1:SETB TR0&& ;启动定时器
SETB TR1&&& &&& ;启动计数器
&&&&& setb et1
&&&&& setb ea
&&& POP ACC&&&& ;出栈
&&& POP PSW
&&& RETI&&&&&&& ;中断返回
delay:& mov r7,#15
TM:&&& mov r6,#10
AA:&&&& djnz r6,AA
&&&&&&& djnz r7,TM
&&&&&&& RET&&&&&&&&
&&&&&&&&& inc a
&&&&&&&&& movc a,@a+pc
&&&&RET&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h, 0f8h,80h,90数据显示分别& 为:0,1,2,3,4,5,6,7,8,9
db 88h,83h,0c6h,0a1h,86h,8eh,0ffh, 0f7h&& ;为显示ADD而用的数据
附录二:总原理图
附录三:PCB图
馆藏&128453
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 单片机实现控制电风扇 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信