水位与水温自动控制C程序
c语言编程完成4l水功能程序
c语言编程完成4l水功能程序正文:在C语言编程中,实现一个4L水功能程序可以让用户模拟管理一个4L容器的水量。
用户可以选择进行加水、倒水、查询当前水量等操作。
首先,我们需要定义一个变量来表示当前的水量,可以使用一个整型变量来表示。
初始化时,将水量设置为0L。
然后,我们可以通过一个菜单来让用户选择不同的操作。
菜单可以使用一个循环实现,直到用户选择退出程序为止。
在每次循环中,显示菜单选项,并根据用户的选择执行相应的操作。
1. 加水:用户可以选择输入要加入的水量,程序将判断当前水量是否已经达到4L,如果没有达到,则将输入的水量累加到当前水量中。
如果达到了4L,则提示用户容器已满。
2. 倒水:用户可以选择输入要倒出的水量,程序将判断当前水量是否足够倒出指定的水量。
如果足够,则从当前水量中减去输入的水量。
如果不足够,则提示用户水量不足。
3. 查询当前水量:程序将显示当前的水量。
4. 退出程序:用户选择退出程序,程序结束。
下面是一个简单的示例代码:```c#include <stdio.h>int main() {int currentWater = 0; // 当前水量int choice;do {printf('1. 加水');printf('2. 倒水');printf('3. 查询当前水量');printf('4. 退出程序');printf('请输入选项:');scanf('%d', &choice);switch (choice) {case 1:// 加水if (currentWater < 4) {int addWater;printf('请输入要加入的水量:');scanf('%d', &addWater);if (currentWater + addWater <= 4) { currentWater += addWater;printf('加水成功!');} else {printf('加水失败,容器已满!');}} else {printf('加水失败,容器已满!');}break;case 2:// 倒水if (currentWater > 0) {int pourWater;printf('请输入要倒出的水量:'); scanf('%d', &pourWater);if (currentWater >= pourWater) { currentWater -= pourWater; printf('倒水成功!');} else {printf('倒水失败,水量不足! ');}} else {printf('倒水失败,当前水量为0! ');}break;case 3:// 查询当前水量printf('当前水量为:%dL', currentWater);break;case 4:// 退出程序printf('感谢使用!');break;default:printf('无效的选项!');}} while (choice != 4);return 0;}```通过上面的代码,我们就可以实现一个简单的4L水功能程序。
基于单片机的水温水位控制系统设计
四、结论
基于单片机的智能水箱水位和水温控制系统具有结构简单、成本低、可靠性 高等优点。通过实时监测和控制水箱的水位和水温,可以满足不同用户的需求。 此外,通过优化系统的硬件设计和软件设计,可以进一步提高系统的性能和可靠 性。这种系统不仅可以应用于家庭用水领域,也可以应用于工业生产中的液体控 制,具有广泛的应用前景。
1、抗干扰设计
由于环境因素和设备本身的影响,系统可能会受到干扰。因此,需要在硬件 设计和软件设计中加入抗干扰措施,如滤波电路、软件去抖动等。
2、节能设计
为了降低系统的功耗,可以在软件设计中加入休眠模式和唤醒模式。当系统 不需要工作时,可以进入休眠模式,降低功耗。当有数据需要处理时,系统被唤 醒,进入工作状态。
2、软件设计
系统的软件设计主要实现以下功能:数据的采集、处理、显示和控制。首先, 单片机通过水位传感器和水温传感器采集当前的水位和水温数据。然后,单片机 对采集到的数据进行处理,判断水位和水温是否正常。如果异常,则启动相应的 执行机构进行调节。最后,单片机将处理后的数据通过显示模块进行显示。
三、系统优化
六、结论
本次演示设计了一种基于单片机的水温水位控制系统,实现了温度和水位的 自动检测、调节和控制。该系统具有成本低、可靠性高、易于实现等优点,同时 支持远程控制和节能模式等功能。在家庭、工业和科学研究中具有广泛的应用前 景。
参考自动化技术的普及,智能化设备在日常生活和工业生产中 的应用越来越广泛。其中,基于单片机的智能水箱水位和水温控制系统具有重要 应用价值。这种系统可以实现对水箱水位和水温的实时监测和控制,以适应不同 的应用需求。
系统软件采用C语言编写,主要包括以下几个部分:数据采集、数据处理、 控制输出和远程通信。
1、数据采集:通过I/O端口读取DS18B20和超声波水位传感器的数据。
基于水温水位协同控制的热水系统控制策略优化
基于水温水位协同控制的热水系统控制策略优化在我们日常生活中,热水系统似乎是那么不起眼,可一旦停水或者热水不够用,立马就能让人抓狂。
想象一下冬天洗个澡,打开水龙头,却流出来的不是热水而是冷冰冰的水,光是想想就不敢打了!所以啊,热水系统的设计和控制,一直是工程师们津津乐道的话题。
尤其是在这种水温水位协同控制的策略上,大家可真是费了不少心思,想让我们的生活更加舒适、便捷。
说到这个水温水位的控制,其实就是通过调整热水器的水温和水位,让我们用水时,水既不冷又不热,水量也恰到好处。
很多家庭中的热水系统,尤其是那种大型热水器,水温和水位往往是分开控制的。
举个例子,很多热水器只是单纯的通过温控器来调节水温,至于水位,基本上都是靠水管的压力来维持的。
这样有个好处,那就是简单,不用太复杂的系统,技术门槛也不高,维修起来也方便。
可是,这样的系统缺点也挺明显的——水温容易不稳定,水位控制也不够精准。
结果就是,咱们一开始调好水温,结果等到水开始流出来的时候,水温已经偏了,热水慢慢变成了温水甚至是凉水。
多么让人崩溃的体验!如果能把水温和水位一起控制,那该多好!你想啊,一方面水温保持在合适的范围内,另一方面水位也能精准控制,不会一不小心溢出来或者水位过低,热水不够用。
这样的系统能做到的,真的是让我们享受到了科技带来的便利。
更棒的是,它能根据不同的使用需求自动调节,无论是家里有孩子,还是老人在使用,都会有更好的体验。
对吧?这样既能节能,也能提高热水的供应效率,简直是居家必备良品。
这就像是做菜一样,你总不能只关心火候,忽略了食材的搭配和锅里的油量。
火候重要,但油少了菜就不够香,油多了又会腻,这时候需要的是灵活掌握,水温和水位这两个因素需要相辅相成,才能做出一锅既美味又合适的热水。
很多时候,我们用热水器只是想要热水方便地供应,而忽略了这两者的关系。
所以,优化热水系统的控制策略,水温和水位的协同控制就显得尤为重要了。
听起来复杂吧?其实不然。
基于单片机的水位水温控制系统
基于单片机的水位水温控制系统题目基于单片机的水位水温控制系统专业电子信息工程学生姓名学号指导教师论文字数完成日期基于单片机的浴缸水位水温控制系统摘要:本文针对现在水温经常有过热和过凉的情况~以及水位经常有过高和不足的现状提出了一个基于单片机的浴缸水位温度控制系统。
此系统以单片机作为核心控制~通过DS18B20采集水温~LCD12864显示温度~水位检测电路检测水位~语音进行提示加水或排水~然后将水位控制在适宜的范围~温度和温度上下限的比较进行加热水或者冷水将水温控制在自己设定的温度。
在文中提出了这个水位温度控制系统的整体设计方案~对各个模块的设计方案进行了论证~完成了硬件和软件的设计。
关键词:89S52单片机~DS18B20传感器~温度控制~水位控制IBath crock water level and temperature controlsystem that based on MCU:In this paper according to the situation that the bath crock water temperature there are Abstractoften too hot and too cold,water level often too high or too low put forward the water level and temperature system that based on MCU.Thissystem with the MCU as the core control,through DS18B20 collecting temperature environment LCD12864 display temperature,water level detection circuit detection water level voice prompt add water or drainage ,control Water level inthe appropriate range ,temperature and the temperature of upper and lower compared to heat water or cold water to set the temperaturecontrol in the purpose of setting the temperature of the himself.In this paper puts forward the overall design scheme of water level and temperature control system,demonstrates the design of each module, completed the design of the hardware and software.89s52 micro computer,DS18B20 sensors,temperature control,water level controlKeywords:II目录第一章绪论 ..................................................................... .. (1)1.1 选题的意义与目的 ..................................................................... (1)1.2 研究现状与发展趋势 ..................................................................... .. (1)1.3 本文的主要工作 ..................................................................... ........................................... 3 第二章系统方案论证和硬件概述 ..................................................................... . (4)2.1 系统方案设计与论证 ..................................................................... .. (4)2.2 AT89S52单片机概述 ..................................................................... (5)2.3 DS18B20传感器概述 ..................................................................... .. (6)2.4 其它硬件概述 ..................................................................... ............................................... 6 第三章系统硬件设计 ..................................................................... (7)3.1系统硬件的整体框图 ..................................................................... (7)3.2 系统子模块设计 ..................................................................... . (7)3.2.1温度采集电路 ..................................................................... . (7)3.2.2 键盘电路 ..................................................................... .. (8)3.2.3 显示电路 ..................................................................... .. (9)3.2.4 水位检测电路 ..................................................................... (9)3.2.5 水位控制电路 ..................................................................... . (10)3.2.6 水温控制电路 ..................................................................... . (10)3.2.7 单片机最小系统 ..................................................................... (11)3.2.8 语音电路 ..................................................................... .......................................... 11 第四章系统软件设计 ..................................................................... . (13)4.1 主程序流程图 ..................................................................... (13)4.2 键盘扫描流程图 ..................................................................... .. (13)4.3 显示处理流程图 ..................................................................... .. (14)4.4 水位温度控制流程图 ..................................................................... (15)4.5温度采集电路流程图 ..................................................................... . (15)4.6液晶显示流程图 ..................................................................... (16)4.7系统调试 ..................................................................... (16)第五章总结及实验结果 ..................................................................... (17)5.1设计总结 ..................................................................... (17)5.2 实验结果 ..................................................................... ..................................................... 17 参考文献...................................................................... . (18)结束语 ..................................................................... .......................................................................19致谢 ..................................................................... ........................................................................ (20)附录 ............................................................................................................................................. (21)III第一章绪论1.1 选题的意义与目的随着这些年的科学技术的发展,在我们的日常生活中,很多的东西都趋向于自动化、智能化,这样子不仅仅易于控制和操作而且可以在非人工的情况下实现,很大程度上减少了人力消耗。
自动水位控制器程序
;***********************************************;基于单片机AT89C2051的液位控制器;软件语言:51汇编;编译器:KEIL;创建日期:2011年4月21日;单片机:AT89C2051;晶振频率:18.432M;设计人:;***********************************************;IO口位定义;***********************************************sen_superlow bit p1.0;sen_low bit p1.1sen_high bit p1.2sen_superhigh bit p1.3key_drain bit p1.4key_affusion bit p1.5KEY_AUTO bit p1.6LED_AUTO BIT P1.7led_superhigh bit p3.0led_high bit p3.1led_low bit p3.2led_superlow bit p3.3drive_free bit p3.4drive_affusion bit p3.5drive_drain bit p3.7;***********************************************;RAM定义、位定义;***********************************************SEN_EER BIT 20H.0SEN_EER1 BIT 20H.1;无水标志SEN_EER2 BIT 20H.2;满水标志LED_FLASH BIT 20H.3;LED闪烁标志P3_BUF EQU 21H ;P3口数据缓冲单元WATER_DATA EQU 22H ;水位数据(低四位有效)JSQ_L EQU 23H ;中断计数低位,定时器0 中断一次加1 JSQ_L_BIT0 BIT 23H.0;JSQ_H EQU 24H ;中断计数高位JSQ_H_BIT0 BIT 24H.0DRAIN_ON EQU 25HDRAIN_ON_0 BIT 25H.0;排水开关标志,1,打开AFFUSION_ON E QU 26HAFFUSION_ON_0 BIT 26H.0;给水开关标志,1,打开AUTO_ON EQU 27HAUTO_ON_0 BIT 27H.0;自动模式打开标志,1,有效AUTO_MOD BIT 28H.0;自动模式,1,有效;***********************************************;IO口初始化;***********************************************org 0000hajmp mainorg 000bhajmp T0_INTorg 0080hmain:mov sp,#60hmov p1,#0ffhmov p3,#0fhmov TMOD,#01H;定时器0 定时模式1MOV IE,#82H;setb TR0;;**********************************************;主程序;**********************************************START:ACALL SEN_CHK;JNB SEN_EER,SEN_OK;ACALL LED_ARMAJMP START;SEN_OK:CLR P3.4ACALL DIS_WATER;ACALL KEY;ACALL DO_KEY;AJMP START;;*****************************************************;函数名:DIS_WATER;函数功能:显示水位;RAM:WATER_DATA (低四位有效)、P3_BUF;IO口:P3口;相关位标志:SEN_EER1:储水装置空,单LED闪烁提示,1 有效; SEN_EER2:储水装置满,单LED闪烁提示,1 有效; LED_FLASH: 闪烁标志位,1 有效;入口参数:WATER_DATA;返回参数:无;*****************************************************DIS_WATER:;JB SEN_EER,DIS_ARM;JB SEN_EER1,DIS_NO_WATER;JB SEN_EER2,DIS_FULL_WATER;MOV P3_BUF,P3; 正常显示水位ANL P3_BUF,#0F0H;MOV A,P3_BUF;ADD A,WATER_DATA;MOV P3,A;AJMP DIS_DONE;DIS_NO_WATER:MOV P3_BUF,P3; 正常显示水位ANL P3_BUF,#0F0H;MOV A,P3_BUF;ADD A,WATER_DATA;JB LED_FLASH,DIS1;ANL A,#0FEH;MOV P3,A;AJMP DIS_DONE;DIS1:ORL A,#01;MOV P3,A;AJMP DIS_DONE;DIS_FULL_WATER:MOV P3_BUF,P3; 正常显示水位ANL P3_BUF,#0F0H;MOV A,P3_BUF;ADD A,WATER_DATA;JB LED_FLASH,DIS2;ANL A,#0F7H;MOV P3,A;AJMP DIS_DONE;DIS2:ORL A,#08;MOV P3,A;DIS_DONE:RET;***************************************************** ;函数名:LED_ARM;函数功能: 四LED闪烁显示;RAM:;IO口:P3口;相关位标志:LED_FLASH 闪烁标志位,1 有效;入口参数:;返回参数:无;*****************************************************LED_ARM:;JNB SEN_EER,SEN_RIGHTJB LED_FLASH,FLASH;CLR P3.0CLR P3.1CLR P3.2CLR P3.3CLR P3.4AJMP LED_ARM_RET;RET;FLASH:SETB P3.0SETB P3.1SETB P3.2SETB P3.3SETB P3.4LED_ARM_RET:RET;;****************************************************** LED_ARM_NO_WATER:JB LED_FLASH,FLASH1;CLR P3.0;CLR P3.1;CLR P3.2;CLR P3.3CLR P3.4AJMP LED_ARM_NO_WATER_RET;RET;FLASH1:SETB P3.0SETB P3.1SETB P3.2SETB P3.3SETB P3.4LED_ARM_NO_WATER_RET:RET;;****************************************************** LED_ARM_FULL_WATER:JB LED_FLASH,FLASH2;CLR P3.0CLR P3.1CLR P3.2CLR P3.3CLR P3.4AJMP LED_ARM_FULL_WATER_RET;RET;FLASH2:;SETB P3.0;SETB P3.1;SETB P3.2SETB P3.3SETB P3.4LED_ARM_FULL_WATER_RET:RET;;***************************************************** ;***************************************************** ;函数名:DO_KEY;函数功能: 键盘处理程序;RAM:;IO口:P1口;相关位标志:AUTO_MOD:1 自动模式; 0 手动模式;; AFFUSION_ON_0: 给水开关标志1 打开,0 关闭; DRAIN_ON_0: 排水开关标志1 打开,0 关闭;入口参数:;返回参数:无;***************************************************** DO_KEY:JNB AUTO_MOD,UN_AUTO;JB SEN_LOW,LOW_NOW;JB SEN_HIGH,RETURN;CLR DRIVE_AFFUSION;RETURN:AJMP DO_KEY_DONE;LOW_NOW:CLR DRIVE_DRAIN;SETB DRIVE_AFFUSION;DO_KEY_DONE:RETUN_AUTO:JB SEN_SUPERLOW,SUPERLOW_NOW;JB SEN_SUPERHIGH,UN_AUTO_RET;CLR AFFUSION_ON_0;CLR DRIVE_AFFUSION;AJMP UN_AUTO_RET;SUPERLOW_NOW:CLR DRAIN_ON_0;CLR DRIVE_DRAIN;UN_AUTO_RET:AJMP DO_KEY_DONE;RET;;*****************************************************;*****************************************************;函数名:定时器T0 中断服务程序T0_INT;函数功能:;RAM:JSQ_L :定时计数低8位; JSQ_H :定时计数高8位;IO口:无;入口参数:SEN_EER:传感器有错误,四LED闪烁提示,蜂鸣器响,1 有效; SEN_EER1:储水装置空,单LED闪烁提示,1 有效; SEN_EER2:储水装置满,单LED闪烁提示,1 有效;返回参数:LED_FLASH;*****************************************************T0_INT:PUSH PSW;PUSH ACCMOV TH0,#0fCH;MOV TL0,#00H;定时器0初值CLR CY;MOV A,JSQ_L;ADDC A,#1H;MOV JSQ_L,A;MOV A,JSQ_H;ADDC A,#0H;MOV JSQ_H,AJB SEN_EER,NEXT1;JB SEN_EER1,NEXT1;JB SEN_EER2,NEXT1;AJMP T0_RET;NEXT1:JB JSQ_H_BIT0,NEXT2;CLR LED_FLASH;AJMP T0_RET;NEXT2:SETB LED_FLASH;T0_RET:POP ACC;POP PSW;RETI;*****************************************************;函数名:KEY;函数功能:按键扫描;RAM:WATER_DATA 低四位有效;IO口:;位标志:;入口参数:无;返回参数:WATER_DATA、SEN_EER、SEN_EER1、SEN_EER2 ;***************************************************** KEY:JNB KEY_AUTO,AUTO;JNB KEY_DRAIN,DRAIN;JNB KEY_AFFUSION,AFFUSION;AJMP KEY_RET;RETAUTO:ACALL DELAY10MS;JNB KEY_AUTO,AUTO;INC AUTO_ONJNB AUTO_ON_0,NEXT3SETB AUTO_MOD;CLR LED_AUTO;AJMP KEY_RET;RET;NEXT3:SETB LED_AUTO;CLR AUTO_MOD;AJMP KEY_RET;RET;DRAIN:ACALL DELAY10MS;JNB KEY_DRAIN,DRAIN;JB AUTO_MOD,NEXT7;INC DRAIN_ON;JNB DRAIN_ON_0,NEXT5;SETB DRIVE_DRAIN;CLR DRIVE_AFFUSION;CLR AFFUSION_ON_0;NEXT7:AJMP KEY_RET;RET;NEXT5:CLR DRIVE_DRAINAJMP KEY_RET;RET;AFFUSION:ACALL DELAY10MS;JNB KEY_AFFUSION,AFFUSION;JB AUTO_MOD,NEXT8;INC AFFUSION_ON;JNB AFFUSION_ON_0,NEXT6;SETB DRIVE_AFFUSION;CLR DRIVE_DRAIN;CLR DRAIN_ON_0;NEXT8:AJMP KEY_RET;RET;NEXT6:CLR DRIVE_AFFUSION;KEY_RET:RET;*****************************************************;函数名:SEN_CHK;函数功能:检查传感是否正常工作、最高水位、最低水位;RAM:WATER_DATA 低四位有效;位标志:SEN_EER、SEN_EER1、SEN_EER2; SEN_EER:传感器有错误,四LED闪烁提示,蜂鸣器响,1 有效; SEN_EER1:储水装置空,单LED闪烁提示,1 有效; SEN_EER2:储水装置满,单LED闪烁提示,1 有效;入口参数:无;返回参数:WATER_DATA、SEN_EER、SEN_EER1、SEN_EER2;*****************************************************SEN_CHK:mov A,P1;读水位数据anl A,#0FH; CLR DRImov WATER_DATA,A;CLR CY;SUBB A,#0FH;JZ NO_WATER;CLR CY;MOV A,WATER_DATA;SUBB A,#0EH;JZ LOW_WATER;CLR CY;MOV A,WATER_DATA;SUBB A,#0CH;JZ MID_WATER;CLR CY;MOV A,WATER_DATA;SUBB A,#08H;JZ HIGH_WATER;CLR CY;MOV A,WATER_DATA;SUBB A,#00H;JZ FULL_WATER;SETB SEN_EERCLR SEN_EER1;CLR SEN_EER2;AJMP SEN_CHK_RETNO_WATER:SETB SEN_EER1;CLR SEN_EER;CLR SEN_EER2AJMP SEN_CHK_RETFULL_WATER:SETB SEN_EER2;CLR SEN_EER;CLR SEN_EER1;AJMP SEN_CHK_RETLOW_WATER:MID_WATER:HIGH_WATER:CLR SEN_EER;CLR SEN_EER1;CLR SEN_EER2;SEN_CHK_RET:RET;;***************************************************** ;函数名:delay10ms;函数功能:延时10ms;RAM:R6、R7;入口参数:无;返回参数:无;***************************************************** delay10ms:mov r7,#40delay10ms1:mov r6,#123nopdelay10ms2:djnz r6,delay10ms2djnz r7,delay10ms1retEND。
饮水机温度控制课程设计protues仿真及C语言程序
饮⽔机温度控制课程设计protues仿真及C语⾔程序附录A#include#include#define uchar unsigned char#define uint unsigned intuchar i;sbit lcdrs=P3^0;sbit lcdrw=P3^1;sbit lcden=P3^2;sbit P13=P1^3;sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;sbit d1=P1^0;sbit d2=P1^1;uchar code t2[]="the highest "; uchar code t1[]=" is "; uchar code t0[]="the temperature "; uchar code t3[]="the lowest "; uchar code wendu[]="0123456789";sbit DQ = P3^7;uchar high=80;low=70;a=0;b=0;c=0;d=0;void delay(uint z){uint x,y;for(x=100;x>1;x--)for(y=z;y>1;y--);}void write_com(uchar com){lcdrs=0;P2=com;delay(5);lcden=1;void write_date(uchar date){lcdrs=1;P2=date;delay(5);lcden=1;delay(5);lcden=0;}void tmpDelay(int num) {while(num--) ;}void Init_DS18B20() { unsigned char x=0;DQ = 1;tmpDelay(8);DQ = 0;tmpDelay(80);DQ = 1;tmpDelay(14);x=DQ;tmpDelay(20);}unsigned char ReadOneChar() { unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0;dat>>=1;DQ = 1;if(DQ)return(dat);}void WriteOneChar(unsigned char dat) {unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;tmpDelay(5);DQ = 1;dat>>=1;}}unsigned int Readtemp() { unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0x44);Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE);a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5;void init_lcd(){lcden=0;lcdrw=0;write_com(0x38); write_com(0x01); write_com(0x0c); write_com(0x06); write_com(0x80);if(P13==1&&P14==1) { for(i=0;i<16;i++){write_date(t0[i]); delay(0);}write_com(0x80+0x40); for(i=0;i<16;i++){write_date(t1[i]); delay(0);}}if(P13==0){for(i=0;i<16;i++){write_date(t3[i]); delay(0);}write_com(0x80+0x40); for(i=0;i<16;i++){write_date(t1[i]);}if(P14==0)for(i=0;i<16;i++){write_date(t2[i]);delay(0);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(t1[i]);delay(0);}}}void display()unsigned int num,num1; unsigned int shi,ge,xiaoshu; if(c==0&&d==0){num=Readtemp();a=0;b=0;}if(c==1){num=low*10;a=1;b=0;}if(d==1){num=high*10;b=1;num1=num/10;if(c==0&&d==0){if(num1>high){d1=1;d2=1;}if(num1{d1=0;d2=1;}if(num1<=high&&num1>=low) {d2=0;}}shi=num/100;ge=num/10%10;xiaoshu=num%10;write_com(0x80+0x40+5); write_date(wendu[shi]); write_com(0x80+0x40+6); write_date(wendu[ge]); write_com(0x80+0x40+7);write_date(0x2e);write_com(0x80+0x40+8);write_date(wendu[xiaoshu]); }void main(){ TMOD=0x00;EA=1;ET0=1;ET1=1;loop:init_lcd();while(1){display();delay(10);if(P13==0){ c=1;d=0;goto loop;}if(P14==0){ TR0=1 ; delay(10); } if(P16==0) { TR1=1; delay(10); }if(P17==0){ c=0;d=0;goto loop; }}}void T0_int() interrupt 1{TR0=0;if(a==1){low=++low;}if(b==1){high=++high;}delay(100);}void T1_int(void) interrupt 3 { TR1=0;if(a==1){low=--low;}if(b==1){high=--high;}TR1=0;delay(100);19A L E 30E A31P S E N 29R S T9P 0.0/A D 039P 0.1/A D 138P 0.2/A D 237P 0.3/A D 336P 0.4/A D 435P 0.5/A D 534P 0.6/A D 633P 0.7/A D 732P 2.7/A 1528P 2.0/A 821P 2.1/A 922P 2.2/A 1023P 2.3/A 1124P 2.4/A 1225P 2.5/A 1326P 2.6/A 1427P 1.01P 1.12P 1.23P 1.34P 1.45P 1.56P 1.67P 1.78P 3.0/R X D 10P 3.1/T X D 11P 3.2/I N T 012P 3.3/I N T 113P 3.4/T 014P 3.7/R D17P 3.6/W R 16P 3.5/T 115U 180C 51D 714D 613D 512D 411D 310D 29D 18D 07E6R W 5R S 4V S S 1V D D 2V E E3L C D 1L M 016L 98.0D Q 2V C C 3G N D1U 2D S 18B 20R 110k +5V+5V+5VL O WH I G H增加减少确定D 2L E D -G R E E N C 120p fX 112M H zC 322u F R 210K+5VD 1L E D -R E D系统总⽅针电路图protues仿真图。
水温控制系统有程序
水温控制系统(C题)重庆大学光电工程学院参赛队员:吴蔡傅摘要本水温控制系统是基于MSP430单片机为主控芯片,键盘输入设定温度,并在LCD1602上显示设定温度和实时温度.通过DS18B20温度传感器对水温进行采样,将采得的数字温度信号送给单片机,单片机对温度进行PID算法,通过改变加热控制方波的占空比达到精确控制温度的目的。
本水温控制系统的静态误差≤0。
2°C,当设定的温度比实时温度高0.12°C时,则启动风扇降温,10分钟左右到达稳定状态。
本系统能够很精确地实现水温控制,是一个很好的水温控制方案。
关键字MSP430 PID算法DS18B20温度传感器Abstract:The temperature control system is based onthe MSP430 microcontroller asthemaster chip, control temperature is set through keyboard and the LCD1602 display the control t emperature and the real-time temperature。
Temperature sensor DS18B20 samples the water temperature and sents the digital signal tothe microcontroller, the microcontroller on the temperature of PID algorithm changes theduty cycle of heating control square wave t o achieve precise control of temperature. The temperature control system of static error≤ 0.2° C.when the set temperature higher than the real-time temperature 0.12 ° C,then the fan startsto c ool , reaching the steady state cost about 10 minutes。
PLC-水塔水位自动控制-
(2)常数
在编程中经常会使用常数。常数数据长度可为字节、字和双字, 在机器内部旳数据都以二进制存储,但常数旳书写能够用二进制、 十进制、十六进制、ASCII码或浮点数(实数)等多种形式。几种 常数形式分别如表3.9所示。
CPU旳存储区
1. 输入映像寄存器(I)(I0.0~I15.7),每个扫描周期采样。 2.输出映像寄存器(Q)(Q0.0~Q15.7),每个扫描周期末尾 3. 变量存储器(V) 4.位存储器(M)区(M0.0~M31.7) 5.定时器(T)存储器区 6.计数器(C)存储器区 7.高速计数器(HC) 8.累加器(AC) 9. 特殊存储器(SM)标志位 如SM0.0,SM0.1,SM0.4,SM0.5
CPU旳存储区
10.局部存储器(L)区 11.模拟量输入映像寄存器(AI) 12.模拟量输出映像寄存器(AQ) 13.顺序控制继电器(S)
三、寻址方式
1. 直接寻址方式
按位寻址 存储区内另有某些元件是具有一定功能
旳硬件,因为元件数量极少,所以不用 指出元件所在存储区域旳字节,而是直 接指出它旳编号。 按字节、字或双字寻址
返回本节
PLC编程语言旳国际原则
1.顺序功能图 2.梯形图 3.功能块图 4.语句表 5. 其他编程语言
图3.4 顺序流程图
1. 顺序功能图
T0 S1
T1 S2
S T2 S3
S
T3 T8
S8 S
T9
2. 梯形图(LAD)
图3.2 梯形图举例
3. 功能块图(FBD)
功能块图(FBD)旳图形构造与数字电子电路旳构 造极为相同,如下图3.3所示。
必须指定存储器标识符、字节地址和位号,如 图3.8 所示。图3.8中MSB表达最高位,LSB表
基于单片机的水温水位控制系统设计
基于单片机的水温水位控制系统设计一、引言随着科技的不断发展,单片机技术在各行各业的应用越来越广泛,其在控制系统中的应用也越来越普遍。
水温水位控制系统在工业生产、农业灌溉和家用设备中都有着重要的作用。
本文将介绍基于单片机的水温水位控制系统的设计原理和实现方法。
二、系统设计原理1. 水温控制原理水温控制是指根据水的温度来控制加热或散热装置,使水温保持在设定的范围内。
在本设计中,使用DS18B20数字温度传感器来检测水温,当水温超过设定温度时,控制加热装置进行加热;当水温低于设定温度时,关闭加热装置或者进行散热。
2. 水位控制原理水位控制是指根据水位高低来控制水的进出,保持水位在设定范围内。
在本设计中,使用水位传感器来检测水位高低,当水位低于设定水位时,控制水泵进行进水;当水位高于设定水位时,关闭水泵或者进行排水。
三、系统硬件设计1. 单片机选择在本设计中,选择常用的STM32系列单片机作为控制核心,其具有强大的计算能力和丰富的外设接口,非常适合控制系统的设计。
2. 传感器选择选择DS18B20数字温度传感器和水位传感器作为水温水位检测的传感器,其精度高、响应快、稳定性好,能够准确地检测水的温度和水位。
3. 控制装置选择根据水温水位的检测结果,使用继电器、电磁阀等控制装置来控制加热装置和水泵的启停,实现对水温水位的精确控制。
四、系统软件设计1. 温度和水位检测编写相应的程序,通过单片机与温度传感器和水位传感器进行通信,实时获取水温水位的数据,并进行相应的处理。
2. 控制策略设计根据水温水位的检测数据,设计控制策略,确定加热装置和水泵的启停时机,使系统能够快速、稳定地对水温水位进行控制。
3. 人机交互界面设计设计人机交互界面,通过LCD显示屏或者触摸屏,实时显示水温水位的数据和系统工作状态,提供操作界面,方便用户对系统进行监控和控制。
五、系统实现和调试在硬件和软件设计完成后,进行系统的实现和调试,验证控制系统的准确性和稳定性,根据实际情况进行相应的调整和优化。
基于单片机的水位自动监测与控制
②高转换精度。
③高控制精确。
2.1.3
RST/VPD:复位/备用电源线,可以使单片机处于复位(即初始化)工作状态。通常,单片机的复位有自动上电复位和人工按钮复位两种,图2.2.3给出了它们的电路。考虑到,水塔与居民生活密切相关,当因特殊原因导致单片机掉电,需单片机立即自动复位(如:夜间短时间停电,导致本系统停止工作),故本设计采用上电复位方式。
2.
通过对传感器的选择,可知由传感器输出的水位高度信号是0~10V的直流电压。在设计中,可以通过采样、保持电路对这一信号进行处理,将模拟信号转换为多个采样点信号。但这种处理方法由于受电路规模和采样精度的影响,不可能对水位信号作出精确的处理,近而也无法对电机、水位高度显示和报警作出精确的控制。因此,本设计中采用集成芯片ADC0809对0~10V的直流电压进行处理。可以达到:
建筑设备自动化系统BAS(building automation system)是一个对建筑物或建筑群内电力、照明、空调、给排水、防灾、保安、车库管理等设备或系统的工作状态进行监视、控制和统一管理的自动化系统,是智能建筑的重要组成部分。它的主要任务是为用户提供安全、高效、经济和舒适的工作和生活环境,保证整个系统经济运行,并提供智能化管理。它的内容包括空调系统、冷水机组、供水系统、给排水系统、自发电机组、电梯、照明等设备的控制和管理。
BAS的系统结构有集散式控制系统和分布式控制系统两种。集散式系统以分布在现场被监控设备附近的多台控制器,完成设备的实时监控任务,在中央控制室设置具有很强控制功能的管理计算机,用它来完成集中操作、显示报警、打印输出与优化控制等任务。典型的集散式BAS系统包括给排水系统。其中,给排水控制子系统的作用是为了保证供水/排水系统的正常运行,其基本控制内容是对各给水泵、排水泵、污水泵及饮用水泵的运行状态进行监控,对各水箱及污水的水位、给水系统压力进行监测,并根据这些监测信息,控制相应的水泵启/停或按某种节能方式运行。本设计针对水塔水位高度的显示、报警、电机控制系统正是给排水监控子系统的功能之一。
水温控制C程序
=========//|文件名称|control.c//|--------|--------------------------------------------------------------------//|描述|温度运算与控制文件//|--------|--------------------------------------------------------------------//|说明|适用于A VRmage系列单片机//|--------|--------------------------------------------------------------------//|调用文件|control.h//|--------|--------------------------------------------------------------------//|作者|//|--------|--------------------------------------------------------------------//|版本|//|--------|--------------------------------------------------------------------//|时间|//|--------|--------------------------------------------------------------------//|E-mail |//===================================================================== =========#include "control.h"long int TemErr=0;//温度偏差int kp=10;int ki=0;int kd=0; //PID运算参数long int sum_TemErr=0; //温度偏差累加变量long int TemErr_last=0; //上一次温度偏差//===================================================================== =========//|函数名称|PWM_Init//|--------|--------------------------------------------------------------------//|功能描述|PWM模块初始化//|--------|--------------------------------------------------------------------//|函数说明|mega128定时器1工作模式14,周期0.85S//|--------|--------------------------------------------------------------------//|输入|无//|--------|--------------------------------------------------------------------//|返回|无//|--------|--------------------------------------------------------------------//|全局变量|无//|--------|--------------------------------------------------------------------//|调用模块|无=========//TIMER1 initialize - prescale:1024 12000000MHz// WGM: 14) PWM fast, TOP=ICRn// desired value: 0.85Sec// actual value: 0.85Sec (0.0%)void PWM_Init(void){PWM_Disable;TCNT1H = 0; //setupTCNT1L = 0;DTY = DTY_MIN; //设置占空比PER = TOP; //设置周期TCCR1A = 0x82; //工作模式TCCR1B = 0x1D; //start Timer}//===================================================================== =========//|函数名称|TEM_PID//|--------|--------------------------------------------------------------------//|功能描述|温度PID运算//|--------|--------------------------------------------------------------------//|函数说明|//|--------|--------------------------------------------------------------------//|输入|float Tem,float TemSet 实测温度、设定温度//|--------|--------------------------------------------------------------------//|返回|无//|--------|--------------------------------------------------------------------//|全局变量|无//|--------|--------------------------------------------------------------------//|调用模块|无//===================================================================== =========void TEM_PID(float Tem,float TemSet){long int val=0;int out=0; //输出控制量范围0-10000long int d_TemErr=0; //偏差微分变量//为了避免浮点数运算,把温度扩大100倍并变成整形,浮点型运算会花费较长时间TemErr = (int)(100*(TemSet-Tem)); //计算温度误差//大于10度不积分if((TemErr>-1000) && (TemErr<1000))sum_TemErr += TemErr; //偏差积分if(sum_TemErr>5000) sum_TemErr=5000; //防止积分饱和if(sum_TemErr<-5000) sum_TemErr=-5000; //防止积分饱和d_TemErr = TemErr-TemErr_last; //偏差微分TemErr_last = TemErr;val=kp * TemErr + ki * sum_TemErr /10 + kd * d_TemErr + DTY_CENTER; //PID运算//限幅if(val>DTY_MAX) val=DTY_MAX;if(val<DTY_MIN) val=DTY_MIN;out=val;DTY=out; //输出控制}//===================================================================== =========//文件结束//===================================================================== =========。
热水器水温水位控制系统毕业设计
热水器水温水位控制系统毕业设计基于单片机的电热水器水温水位控制系统设计摘要随着人们生活水平的提高,各种热水器的使用已相当普及。
与之相配套的控制仪也相继问世。
然而,目前市场上的各种热水器控制电路还与理想要求相差甚远。
因此我设计了新型的热水器水温水位控制系统来满足于当今的需求,该热水器智能控制系统主要由80C51单片机控制、DS18B20温度传感器、独立键盘、LED数码管和报警系统组成。
该系统能测量并显示水温、设置水温范围,若水温不处于所设置的水温范围则报警,同时还能对水位进行设置及加水,先设置好需要加水的水位段数,单片机会根据这个数进行判断是否加水。
通过软硬件调试使以上所述功能都能正常实现。
本次设计是对水温水位控制系统的智能化改进,采用单片机对其水温水位参数进行控制,提高了电器的工作稳定性,同时引进了数字传感器对水温进行数据采集,这样也就提高了系统的控制精度,以其自身的控制精度高、稳定性好和成本低的独特优点在今后将会由广泛的实用价值,其基于单片机的改进方法也具用广泛的应用意义。
关键词:单片机;DS18B20;水温水位控制Electric Water Heater Water Temperature-Level Control System Based on SCMAbstractWith the improvement of people's living standard, the use of various water heater is very popular. Control apparatus and the matched field. However, the current market on the various water heater control circuit and the ideal requirements differ very far.So i design a new type of water heater water level control system to meet the semand in nowdays. The design of solar water heaters intelligent control system is mainly composed of single-chip80C51,DS18B20 temperature sensor,an independent keyboard ,LED and alarm system.The system can measure and display water temperature ,set the range of water temperature,of the water temperature is not in the range of setting temperature is alarming.At the same time,you can set the water level and add water,first,need to set up the water level above the water,single-chip will determine whether add the water or not according to the number.Through hardware and software debugging,the above functions can be normal.For other related parameters, it also has a certain meaning using. The revivification of the water control system is an intelligent product. To its own control of high precision, stability and low cost of the advantages, in the future there will be a wide range of practical value.The design of the water temperature control system is to improve the intellectualized. A monolithic integrated circuits is to control the level of parameter and improve the stability of the electrical work, and meantime, What’s more,its based on single ways of improvement have wide application meaning.Keywords: singlechip; water level’s examination; water temperature’s examination目录摘要 (1)A BSTRACT (2)第1章绪论 (1)1.1选题的意义 (1)1.2电热水器发展现状 (1)1.3课题任务 (3)第2章系统设计方案 (4)2.1设计原理 (4)2.1.1系统原理 (4)2.1.2子系统工作原理 (5)2.2设计方案 (5)2.2.1系统设计方案的选择 (5)2.2.2各部件控制系统方案 (8)第3章系统硬件设计 (9)3.1系统总体设计 (9)3.2各单元电路设计 (11)3.2.1控制单元设计 (11)3.2.2显示单元设计 (17)3.2.3检测单元设计 (25)第4章系统软件设计 (33)4.1主程序设计 (33)4.2子程序设计 (34)4.2.1温度采集 (34)4.2.2控制按键设计 (35)4.2.3读温度 (36)第5章系统调试 (37)5.1硬件调试 (37)5.1.1调试步骤 (37)5.1.2液位检测 (38)5.1.3温度检测 (39)5.2软件调试 (39)5.2.1P ROTEUS仿真 (39)5.2.2软件调试过程 (40)5.3系统联调 (40)总结 (43)参考文献 (46)致谢 (49)附录 (51)第1章绪论1.1选题的意义随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么可编程控制器的出现则是给现代工业控制测控领域带来了一次新的革命。
水位控制程序设计
目录1.课程设计目的: (3)2.设计任务: (3)3.水位控制原理: (3)4.电路设计: (4)4.1水位控制电路: (4)4.2信号输入与输出: (5)4.3控制程序: (5)4.4引脚功能: (6)5.个人设计总结: (7)6.主程序清单: (7)7.实验调试: (8)8.结语: (10)9.参考文献: (10)1.课程设计目的:《单片机原理》课程是一门实践性、应用性很强的课程。
通过课程设计使学生较系统地掌握有关单片机控制的设计思想和设计方法,为学生今后从事单片机控制系统开发工作打下坚实的基础。
本课程设计的基础要求是使学生全面的掌握单片机控制系统设计的基本理论,熟悉掌握MCS-51系列单片机的编程方法,让学生在接近实际工作环境下,完成一个简单的单片机控制系统设计。
2.设计任务:利用MCS-51系列单片机设计一个水位自动控制系统,用两个数码管实时地显示当前水位,并能根据设定的水位值控制水位。
水位设定值通过键盘输入,容器内水的注入和抽出通过水泵实现。
3.水位控制原理:图1-1是水塔水位控制原理图。
图中虚线表示允许水位变化的上、下限。
在正常情况下应保持水位在虚线范围之内。
为此,在水塔内的不同高度安装固定不动的3根金属棒,以感知水位变化情况。
其中,A棒处于下限水位,C 棒处于上限水位,B棒在上、下限水位之间。
A棒接+5V电源,B棒、C棒各通过一个电阻与地相连。
水塔由电机带动水泵供水,单片机控制电机转动,以达到对水位控制的目的。
供水时,水位上升,当达到上限时,由于水的导电作用,B棒、C棒连通+5V。
因此,b和c两端均为1状态。
这时,应停止电机和水泵的工作,不再给水塔供水。
当水位降到下限时,B棒、C棒都不能与A棒导通,因此,b和c两端均为0状态。
这时,应启动电机,带动水泵工作,给水塔供水。
当水位处于上下限之间时,B棒与A棒导通。
因C棒不能与A棒导通,b 端为1状态,c端为0状态。
这时,无论是电机已在带动水泵给水塔加水,水位在不断上升,还是电机没有工作,用水使水位在不断下降,都应继续维持原有的工作状态。
PLC水箱自动水位控制器设计
三菱PLC(核心控制部件),高低位水箱的水位检测电路(由两个浮球液位开关将高低水位信号传送给PLC),水泵电动机控制电路(PLC控制启停及主备切换);所用软件为GX WORK2和组态王。
五、系统设计方案
5.1系统总体设计
系统总体结构框图见附录1。
5.2系统工作原理
水箱水位自动控制系统由三菱PLC(核心控制部件),高低位水箱的水位检测电路(高低水位信号传送给PLC),水泵电动机控制电路(PLC控制启停及主备切换)组成;通过水位检测电路测得水箱的水位信号交由PLC处理,再由PLC对水泵电动机控制电路进行控制,该过程可由上位机的组态软件进行监控,本次设计在传统的水塔、水箱供水的基础上,加入了PLC及液压变送器等器件.利用PLC和组态软件来实现水塔水位的控制.提供了一种实用的水箱水位控制方案。系统启动时,关闭出水口,控制输入控制液体阀,使水位达到满水位的75%,然后打开出水口,这种切换由一个输入的数字量控制,水池也有两个检测装置,得到的相关信息可对PLC进行调节。
随着工业生产的迅速发展,市场竞争的激烈,产品更新换代的周期日益缩短,工业生产从大批量、少品种,向小批量、多品种转换,继电器—接触器控制难以满足市场要求,此问题首先被美国通用汽车公司(GM公司)提了出来。通用汽车公司为适合汽车型号的不断翻新,满足用户对产品多样性的需求,公开对外招标,要求制造一种新的工业控制装置,取代传统的继电器—接触器控制。
(2)EPROM(Erasable Programmable Read Only Memory)这是一种可擦除只读存储器。断电情况下,存储器内所有内容保持不变。紫外线连续照射下可擦除存储器内容)
(3)EEPROM(Electrical Erasable Programmable Read Only Memory)这是一种电可擦除只读存储器。使用编程器就能很容易对其所存储内容进行修改。
水温控制系统设计c程序
程序清单以下是水温控制系统的主程序,由于按键扫描和数码显示电路比较简单故没有单独列出来,可以参考语句后面的注释。
#include <AT89X51.H>unsigned chardisplay_code[10]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x67}; unsigned char display_buffer[4];bit set=0;bit pid_allow=0;sbit eoc=P3^3;sbit oe=P3^2;sbit st=P3^4;sbit k1=P2^4;sbit k2=P2^5;sbit k3=P2^6;sbit k4=P2^7;sbit light=P3^6;sbit heal=P3^7;unsi gned char i=0;float t,t_now,tout=100,t_diff=0,t_target=60,temp=0;unsi gned int k=5000;int ttemp1=0;unsi gned char ttemp2=0,ttemp3=1;float KP=28,KI=2.5;void di splay(void); //数码管显示void adc0809(void); //AD转换void pid(void); //pid控制量计算void p_out(void); //输出控制void main(){TMOD=0x11;TL0=(65536-3000)%256;TH0=(65536-3000)/256;TL1=(65536-40000)%256;TH1=(65536-40000)/256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;light=0;heal=1;while(1){display_buffer[0]=(unsigned char)t_now/10; //刷新显示 display_buffer[1]=(unsigned char)t_now%10;display_buffer[2]=(unsigned char)t_target/10;display_buffer[3]=(unsigned char)t_target%10;if(set==0) //按键扫描{if(k1==0) //复位{while(k--);if(k1==0){t_target=40;}}if(k2==0) //目标温度+1{while(k--);if(k2==0){if((t_target++)>=90)t_target=90;}}if(k3==0) //目标温度-1{while(k--);if(k3==0){if((t_target--)<=40)t_target=40;}}if(k4==0) //开始工作{while(k--);if(k4==0){pid_allow=1;set=1;light=1;}}}else if(set==1){if(k1==0) //停止,复位{while(k--);if(k1==0){t_target=40;light=0;set=0;heal=1;tout=0;temp=0;tout=100;t_diff=0;} }}}/**************************************************** 函数:定时器0中断程序功能:3000uS中断一回,对数码管进行显示*****************************************************/ void time0() interrupt 1 using 0{TL0=(65536-3000)%256;TH0=(65536-3000)/256;display();}/**************************************************** 函数:定时器1中断程序功能:40000uS中断一回,进行AD转换,控制输出量*****************************************************/ void time1() interrupt 3 using 0{TL1=(65536-40000)%256;TH1=(65536-40000)/256;adc0809();// if(pid_allow==1)if((pid_allow==1)&&(t_target-t_now<=5)){pid_allow=0;pid();if(set==1){if((ttemp1++)==500){ttemp1=0;pid_allow=1;}p_out();}}/**************************************************** 函数:中断中对动态扫描刷新函数*****************************************************/ void di splay(void){if(i==0)P2=0xfe;if(i==1)P2=0xfd;if(i==2)P2=0xfb;if(i==3)P2=0xf7;P0=display_code[(display_buffer[i])];i++ ;if( i>3) i=0;}/**************************************************** 函数:中断中AD转换函数void adc0809(void){oe=0;st=0;st=1;st=0;while(!eoc);oe=1;t=P1;t_now=100*t/256;oe=0;}/**************************************************** 函数:中断中控制输出函数*****************************************************/ void p_out(void){int j;j=(int)tout;if(ttemp3<=j)heal=0;else heal=1;if((ttemp2++)==5){ttemp2=0;ttemp3++;}if(ttemp3>100)ttemp3=1;}函数:进行pid计算,得出控制量函数*****************************************************/ void pid(){temp=t_diff;adc0809();t_diff=t_target-t_now;tout+=KP*(t_diff-temp)+KI*t_diff;if(tout<0)tout=0;else if(tout>=100)tout=100;。
基于单片机的水温控制系统(C语言)
过程控制系统课程设计实验报告课程设计题目:基于单片机的水温控制系统指导老师:许丽佳小组成员:李飞20083789王金20083795李科20083787王鹏20083567一、系统总方案设计图1-1 系统框图本系统的电路设计方框图如图1-1所示,它由七部分组成:①控制部分主芯片采用单片机STC89C52;②显示部分采用4位共阳极LED数码管以动态扫描方式实现温度显示;③温度采集部分采用DS18B20温度传感器;④加热控制部分采用继电器电路;⑤时钟电路;⑥复位电路;⑦单列3按键键盘输入设定温度值。
二、硬件电路设计1.时钟电路设计时钟电路是用来产生STC89C52单片机工作时所必须的时钟信号,STC89C52本身就是一个复杂的同步时序电路,为保证工作方式的实现,STC89C52在唯一的时钟信号的控制下严格的按时序执行指令进行工作,时钟的频率影响单片机的速度和稳定性。
通常时钟由于两种形式:内部时钟和外部时钟。
我们系统采用内部时钟方式来为系统提供时钟信号。
STC89C52内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器。
电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。
晶振频率为在1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。
为了提高稳定性我们采用温度稳定性好的30pf的贴片电容,采用的晶振频率为12MHZ。
本次系统的时钟电路设计如图2-1所示。
图2-1 时钟电路图2.系统复位电路在图2-2 中复位开关K1 被按下并松开,使MR端获得低电平,RST 端输出复位信号,单片机复位。
图2-2 复位电路3.报警与控制电路设计当水箱内的温度超出或低于设定的温度超出1℃时,P1.4输出低电平“0”时,晶体管导通,压电蜂鸣器两端获得约+5V电压而鸣叫,出报警声音;单片机的P1.1输出低电平,此时红色指示灯亮,直到低于设定的最低温度时,P1.4输出高电平时,三极管截止,蜂鸣器停止发声,P1.1输出电平高电平,发光二极管灭,(由于实验器材有限,本设计的蜂鸣器使用发光二级管替代)报警和控制电路而下图2-3所示图2-3 报警与控制电路与单片机的连接4 LED显示电路设计在本设计中采用了四位共阳极八段数码管,用动态驱动来显示温度的值,如图2-4-2所示,其结构如2-4-1所示图2-4-1 数码管内部结构图2-4-2 LED显示电路5温度检测电路设计本次设计所采用的温度传感器为DS18B20,无需A/D转换,因此从主机CPU到DSl8B20仅需一条线,当DS18B20接收到温度转换命令后,开始启动转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg51.h>#include<stdlib.h>#include<intrins.h>//----------------------------------------------------------------------------------------------//变量声明//----------------------------------------------------------------------------------------------char aucLED_SELECT_01[10]={0x00,0x01,0x01,0x03,0x07,0x0F,0x1F,0x3f,0x7f,0xFf,}; //光柱定义unsigned char k,j;unsigned char i;unsigned char xiaoshu=0;unsigned char gewei=5;unsigned char shiwei=6;char led_tab[] = {0x3F,//00x06, //10x5B, //20x4F, //30x66, //40x6D, //50x7D, //60x07, //70x7F, //80x6F, //9};char led_code_tab[]={0x39, //10_c0x79, //11_e0x01, //12_-0x80, //13_.};char led_buff[5] = {0,0,0,0,0}; //字段缓冲char float_tab[16] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//小数表sbit ds18b20_io = P1^3;unsigned char k=0;unsigned char j=0;//io口定义sbit alarm=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;sbit jiare=P3^1;sbit jiangwen=P3^0;sbit P3_2=P3^2;sbit P3_3=P3^3;sbit xia=P3^6;sbit shang=P3^7;sbit P3_5=P3^5;sbit SEG_1=P1^4;sbit SEG_2=P1^5;sbit SEG_3=P1^6;sbit SEG_4=P1^7;//---------------------------------------------------------------------------------------------- //延时函数//---------------------------------------------------------------------------------------------- void delay_xus(unsigned char x){while(--x);}void delay_xms(unsigned char x){while(--x){delay_xus(250);delay_xus(245);};}//---------------------------------------------------------------------------------------------- //显示函数//----------------------------------------------------------------------------------------------void display(){//显示000XP0=0;SEG_1=0;P0 = led_buff[3];delay_xms(10);SEG_1 = 1;//显示00X0SEG_2=0;P0 = led_buff[2];delay_xms(10);SEG_2=1;//显示0X00SEG_3=0;P0 =led_buff[1]+led_code_tab[3]; // 显示各位与小数点delay_xms(10);SEG_3 =1 ;P0 = 0x00;//显示X000SEG_4=0;P0 = led_buff[0];delay_xms(10);SEG_4=1;}//---------------------------------------------------------------------------------------------- //DS18B20操作函数//---------------------------------------------------------------------------------------------- bit ds18b20_init(){bit is_success = 1;ds18b20_io = 1;delay_xus(2);//延时9usds18b20_io = 0;//拉低IO口delay_xus(250);//延时505us,复位ds18b20_io = 1;//提升数据线delay_xus(28);//延时61usif(ds18b20_io == 1)is_success = 0;delay_xus(118);//延时241usreturn is_success;}void ds18b20_writebyte(unsigned char buff){unsigned char i;ds18b20_io = 1;//准备发送delay_xus(1);//延时7usfor(i=0;i<8;i++){if(buff & 0x01)//获取1位,低位在前{ds18b20_io = 0;//开始发送1位delay_xus(5);//延时15usds18b20_io = 1;//发送1}else{ds18b20_io = 0;//开始发送1位delay_xus(5);//延时15us//发送0}delay_xus(20);//延时45us,等待发送完毕ds18b20_io = 1;//准备发送delay_xus(8);//延时21usbuff >>= 1;}}unsigned char ds18b20_readbyte(void){unsigned char i;unsigned char buff = 0;ds18b20_io = 1;//准备读取delay_xus(1);//延时7usfor(i=0;i<8;i++){buff >>= 1;ds18b20_io = 0;//开始读取1位delay_xus(1);//延时7usds18b20_io = 1;//必须写1,否则读出来的将是不预期的数据delay_xus(1);//延时7usif(ds18b20_io)//在14us处读取数据buff |= 0x80;delay_xus(20);//延时45us,等待读取完毕ds18b20_io = 1;//准备读取delay_xus(8);//延时21us}return buff;}//----------------------------------------------------------------------------------------------//主函数//----------------------------------------------------------------------------------------------void main(){bit ds18b20_busy = 0;unsigned char ds18b20_tt_count = 0;unsigned char th = 0;unsigned char tl = 0;unsigned int temperature = 0;bit isminus = 0;bit isoverflow = 0;while(1){if(ds18b20_busy == 0){//启动一次转换if(ds18b20_init() == 1)//初始化ds18b20{ds18b20_writebyte(0xCC);//跳过读序号列号的操作ds18b20_writebyte(0x44);//启动温度转换ds18b20_busy = 1;//置ds18b20忙标志,等待}}else{//读取温度if(ds18b20_tt_count > 85){if(ds18b20_init() == 1){ds18b20_writebyte(0xCC);//跳过读序号列号的操作ds18b20_writebyte(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度tl = ds18b20_readbyte();//低位th = ds18b20_readbyte();//高位//计算温度temperature = (th << 8) + tl;isminus = 0;if((temperature&0xf000) == 0xf000)//判断是否是负温度{temperature = ~temperature + 1;isminus = 1;}temperature = (temperature >> 4) * 10 + float_tab[(temperature & 0x0f)];//规整温度:大于99.9,则都是99.9;小于-9.9,则都是-9.9isoverflow = 0;if(temperature > 999 && isminus == 0){temperature = 999;isoverflow = 1;}if(temperature > 99 && isminus == 1){temperature = 99;isoverflow = 1;}//读温度完毕ds18b20_busy = 0;//取消ds18b20忙标志ds18b20_tt_count = 0;}}}//设置按键加一或减一,设定我们所需要的值{if(P3_2==0){delay_xms(20);if(P3_2==1){gewei++;if(gewei==10){gewei=0;shiwei++;}if(shiwei==10){shiwei=0;}}}if(P3_3==0) //{delay_xms(20);if(P3_3==1){if(gewei>0)gewei--;else gewei=9;if(gewei==9)shiwei--;if(shiwei==-1){shiwei=9;}}}}//将我们设定的值与DS18B20相比较。