基于的温度控制系统设计C语言源程序doc.doc
《基于的温度控制系统设计C语言源程序doc.doc》由会员分享,可在线阅读,更多相关《基于的温度控制系统设计C语言源程序doc.doc(149页珍藏版)》请在咨信网上搜索。
基于的温度控制系统设计C语言源程序【实用文档】doc 文档可直接使用可编辑,欢迎下载 /*********************************************************/ /*程序名称:温度监控系统 */ /*程序功能:利用89C52单片机和DS18B20温度传感器实现环境 */ /* 温度的实时测量和高、低温报警 */ /*程序版本:v1.0 */ /*作 者: */ /*编写时间: */ /*********************************************************/ #include <reg52.h> #include <intrins。h> //含_nop_()延时函数 //定义数据类型 #define uchar unsigned char #define uint unsigned int //定义端口 #define LED P0 //段码输出口 sbit DQ = P3^2; //传感器数据口 sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位) sbit SMG_b = P1^1;ﻩ//定义数码管阳级控制脚(百位) sbit SMG_s = P1^2;ﻩ//定义数码管阳级控制脚(十位) sbit SMG_g = P1^3;ﻩ//定义数码管阳级控制脚(个位) sbit buzzer = P1^5; //蜂鸣器 sbit led_low = P2^6; //低温指示灯 sbit led_high = P2^7; //高温指示灯 sbit led_ok = P2^5; //温度正常指示灯 sbit led_work = P2^4; //工作指示灯 sbit set = P3^7; //设置按键 sbit add = P3^4; //加一按键 sbit dec = P3^5; //减一按键 //定义变量和常量 int count = 0; //按键次数寄存器 int h; //主函数用循环计数器 uint temp; //温度值 uchar r; //温度值整数形式 uchar high = 35,low = 20; //上下限初值 //共阳LED段码表 ”0" "1” "2" ”3” "4” "5” "6” ”7" "8" "9” "不亮” "-" uchar code LED_code[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code LED_code1[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; uchar code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小数部分转换码表 uchar data temp_data[2] = {0x00,0x00};//存储从传感器读出的温度值 uchar data dp[5] = {0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算 //子函数声明 void ds_reset(); //DS18B20初始化函数 void ds_write(uchar ds_wrdata); //DS18B20写数据函数 uchar ds_read(); //DS18B20读数据函数 read_temp(); //读取温度函数 void change_temp(uint tem); //温度数据处理 void xianshi(int horl); //温度显示转换 void display(); //数码管显示函数 void keyscan(); //按键查询函数 void warn_led(); //超限报警 void delay(uint t); //延时函数,单次25us /********************主函数*********************/ void main() { LED=0x00; //初始化显示端口 ﻩled1=0; ﻩled2=0; ﻩled3=0; ﻩled4=0; for(h=0;h<4;h++) ﻩ{ dp[h]=8; } while(1) //循环执行显示和温度读取 { ﻩuchar i; ﻩﻩfor(i=0;i〈200;i++) ﻩﻩ{ ﻩ ﻩwarn_led(); //指示灯控制 ﻩﻩ display(); //显示 ﻩ keyscan(); //按键扫描 ﻩ} ﻩ change_temp(read_temp()); //温度数据读取和处理 ﻩ ﻩ} } /***********************************************/ /*函数名称:ds_reset() */ /*函数功能:DS18B20初始化 */ /*入口参数:无 */ /*输出参数:无 */ /*调用函数:delay();_nop_(); */ /*全局变量:无 */ /*局部变量:presence */ /***********************************************/ void ds_reset(void) { ﻩchar presence=1; while(presence) ﻩ{ ﻩﻩwhile(presence) ﻩ { ﻩﻩDQ=1; //传感器数据段先置高电平 ﻩ _nop_(); ﻩﻩﻩ_nop_();ﻩﻩﻩ //适当延时 ﻩﻩﻩDQ=0; //传感器数据段从高电平拉到低电平 ﻩdelay(50); //延时 ﻩﻩﻩDQ=1; //再置高电平 ﻩﻩ delay(6); //延时 ﻩpresence=DQ; //初始化成功,继续下一步 } ﻩﻩdelay(45); //延时 ﻩﻩpresence=~DQ; ﻩ} DQ=1; //拉高电平 led_work=0; ﻩ ﻩ //开工作指示灯 } /***********************************************/ /*函数名称:ds_write() */ /*函数功能:向DS18B20写数据 */ /*入口参数:ds_wrdata */ /*输出参数:无 */ /*调用函数:delay();_nop_(); */ /*全局变量:无 */ /*局部变量:ds_wrdata */ /***********************************************/ void ds_write(uchar ds_wrdata) { uchar i; for(i=8;i>0;i--) ﻩ{ ﻩDQ=1; _nop_(); _nop_(); ﻩﻩDQ=0; ﻩ_nop_(); _nop_(); _nop_(); _nop_(); ﻩﻩDQ=ds_wrdata&0x01; //最低位移出 ﻩdelay(6); ﻩds_wrdata=ds_wrdata/2; //右移1位 } DQ=1; delay(1); } /***********************************************/ /*函数名称:ds_read() */ /*函数功能:从DS18B20读数据 */ /*入口参数:无 */ /*输出参数:value */ /*调用函数:delay();_nop_(); */ /*全局变量: */ /*局部变量:i;value; */ /***********************************************/ uchar ds_read(void) { ﻩuchar i; uchar value=0; ﻩfor(i=8;i>0;i-—) ﻩ{ ﻩﻩDQ=1;_nop_(); ﻩﻩ_nop_(); ﻩ value〉>=1; ﻩ DQ=0; _nop_(); ﻩ_nop_(); ﻩ _nop_(); _nop_(); ﻩDQ=1; ﻩ _nop_(); ﻩ _nop_(); ﻩﻩ_nop_(); ﻩ_nop_(); ﻩif(DQ)value|=0x80; ﻩﻩdelay(6); } DQ=1; ﻩreturn(value); } /***********************************************/ /*函数名称:read_temp() */ /*函数功能:读温度数据数据 */ /*入口参数:无 */ /*输出参数:yemp */ /*调用函数:ds_reset();ds_write();ds_read(); */ /* delay(); */ /*全局变量:temp */ /*局部变量:temp_data[]; */ /***********************************************/ read_temp() { ds_reset(); //传感器初始化 delay(200); ﻩds_write(0xcc); //发跳过读取序列号命令 ﻩds_write(0x44); //发温度转换命令 ds_reset(); ﻩdelay(1); ﻩds_write(0xcc);ﻩ ﻩ ﻩds_write(0xbe); //读18B20中存储器 ﻩtemp_data[0]=ds_read(); //读温度值的低字节命令 temp_data[1]=ds_read(); //读温度值的高字节 ﻩtemp=temp_data[1]; temp<<=8; temp=temp|temp_data[0]; //两字节合成一个整型变量 return temp; //返回温度值 } /***********************************************/ /*函数名称:chang_temp() */ /*函数功能:将温度传感器中独到的数据进行转换 */ /*入口参数:tem */ /*输出参数:dp[] */ /*调用函数:无 */ /*全局变量:dp[];ditab[];r; */ /*局部变量:tem */ /***********************************************/ void change_temp(uint tem) { ﻩuchar n=0; ﻩif(tem〉6348) // 温度值正负判断 { ﻩtem=65536-tem; // 负温度求补码 n=1; //标志位置1 ﻩ} ﻩdp[4]=tem&0x0f; // 取小数部分的值 ﻩdp[0]=ditab[dp[4]]; // 存入小数部分显示值 ﻩdp[4]=tem〉〉4; // 取中间八位,即整数部分的值 dp[3]=dp[4]/100; // 取百位数据 dp[1]=dp[4]%100; // 取后两位数据 ﻩdp[2]=dp[1]/10; // 取十位数据 ﻩdp[1]=dp[1]%10; // 个位 ﻩr=dp[1]+dp[2]*10+dp[3]*100; //实际温度值(十进制) if(!dp[3]) ﻩ //符号位显示判断 ﻩ{ ﻩﻩdp[3]=0x0a; //最高位为0时不显示 ﻩﻩif(!dp[2]) ﻩ{ ﻩﻩﻩdp[2]=0x0a; //次高位为0时不显示 } } ﻩif(n) ﻩ{ dp[3]=0x0b; ﻩ //负温度时最高位显示"—” ﻩ} } /***********************************************/ /*函数名称:xianshi() */ /*函数功能:温度数据转换成显示所需LED段码 */ /*入口参数:horl */ /*输出参数:dp[] */ /*调用函数:无 */ /*全局变量:dp[]; */ /*局部变量:n; */ /***********************************************/ void xianshi(int horl) { int n=0; ﻩif(horl>128) ﻩ ﻩ //负数补码转换 ﻩ{ horl=256—horl; n=1; } dp[3]=horl/100; dp[3]=dp[3]&0x0f; //百位 ﻩdp[2]=horl%100/10;ﻩ //十位 ﻩdp[1]=horl%10; //个位 dp[0]=0; ﻩﻩ //小数位 ﻩif(!dp[3]) ﻩ ﻩ //高位为零不显示 { dp[3]=0x0a; ﻩ if(!dp[2]) ﻩ { ﻩﻩ dp[2]=0x0a; ﻩ} ﻩ} ﻩif(n)ﻩ ﻩ //负数最高位显示“-” ﻩ{ ﻩdp[3]=0x0b; ﻩ} } /***********************************************/ /*函数名称:display() */ /*函数功能:数码管显示 */ /*入口参数:无 */ /*输出参数:无 */ /*调用函数:delay() */ /*全局变量:dp[];LED_code[];LED_code1[]; */ /* led1;led2;led3;led4; */ /*局部变量:j; */ /***********************************************/ void display() { int j; ﻩfor(j=0;j〈4;j++) //4位LED扫描控制 ﻩ{ switch(j) ﻩ { ﻩ ﻩcase 0:LED=LED_code[dp[0]]; ﻩﻩ ﻩ led4=1; ﻩ ﻩ delay(450); ﻩﻩﻩ led4=0; ﻩ break; //小数位 ﻩﻩcase 1:LED=LED_code1[dp[1]]; ﻩ ﻩ led3=1; ﻩﻩ delay(450); ﻩ ﻩ led3=0; break; //个位 ﻩ case 2:LED=LED_code[dp[2]]; ﻩ ﻩ led2=1; delay(450); ﻩﻩﻩ led2=0; ﻩﻩ break; //十位 ﻩﻩﻩcase 3:LED=LED_code[dp[3]]; led1=1; ﻩ ﻩ delay(450); ﻩ led1=0; ﻩﻩﻩﻩ break; //百位 } } } /***********************************************/ /*函数名称:keyscan() */ /*函数功能:按键查询 */ /*入口参数:无 */ /*输出参数:无 */ /*调用函数:delay();display();xianshi(); */ /*全局变量:count;high;low; */ /*局部变量:无 */ /***********************************************/ void keyscan() { ﻩif(set==0) ﻩ //set键按下 { ﻩwhile(1) ﻩﻩ{ ﻩdelay(500);ﻩ ﻩ //延时去抖动 ﻩ if(set==0) ﻩﻩ //重新判断set键是否按下 ﻩ { ﻩ count++; ﻩﻩ while(!set) //按键弹起继续显示前面内容 ﻩ display(); ﻩ } ﻩﻩif(count==1) ﻩ //set按下一次执行此段 ﻩﻩ { ﻩﻩxianshi(high);ﻩ //转换上限温度为段码并显示 ﻩﻩdisplay(); ﻩﻩﻩﻩif(add==0) //add键是否按下 ﻩﻩﻩﻩ{ ﻩﻩﻩ while(!add)ﻩ //弹起时上限温度加一并显示 ﻩﻩ ﻩ display(); ﻩﻩ ﻩ high+=1; ﻩ ﻩ} ﻩﻩﻩif(dec==0) ﻩ //dec键是否按下 ﻩ { ﻩ ﻩﻩﻩwhile(!dec)ﻩ //弹起时上限温度减一并显示 ﻩﻩ ﻩﻩdisplay(); ﻩﻩﻩ high-=1; } ﻩ } if(count==2)ﻩ //set键按下两次执行此段 ﻩ{ ﻩ xianshi(low);ﻩ //转换下限温度为段码并显示 ﻩﻩﻩﻩdisplay(); ﻩﻩ if(add==0) ﻩ //add键是否按下 ﻩﻩ{ ﻩ ﻩ ﻩwhile(!add)ﻩ //弹起时下限温度加一并显示 ﻩ ﻩdisplay(); ﻩ low+=1; ﻩﻩ }ﻩ ﻩ //dec键是否按下 ﻩﻩﻩ if(dec==0) ﻩ ﻩﻩ{ ﻩﻩ while(!dec) //弹起时下限温度减一并显示 ﻩﻩ display(); ﻩ low-=1; ﻩﻩ ﻩ} ﻩ } ﻩﻩ if(count>=3)ﻩﻩ //set键按下三次回到温度显示状态 ﻩ ﻩ{ ﻩ count=0; ﻩ ﻩbreak; ﻩﻩﻩ} ﻩ} ﻩ} } /***********************************************/ /*函数名称:warn_led() */ /*函数功能:工作情况指示灯控制 */ /*入口参数:无 */ /*输出参数:无 */ /*调用函数:无 */ /*全局变量:high;low;r; */ /*局部变量:无 */ /***********************************************/ void warn_led() { ﻩif(r>high) //温度高于上限温度 ﻩ{ ﻩled_low=1; ﻩ ﻩ //“低温”指示灯灭 ﻩled_high=0;ﻩﻩ //“高温”指示灯亮 led_ok =1;ﻩﻩﻩ //“正常"指示灯灭 buzzer = 0;ﻩﻩﻩﻩ //蜂鸣器发声 } else if(r〈low) ﻩﻩ //温度低于下限温度 { ﻩled_low=0; ﻩﻩﻩ //“低温"指示灯亮 led_high=1;ﻩ ﻩ //“高温”指示灯灭 ﻩﻩled_ok =1;ﻩ ﻩ //“正常”指示灯灭 buzzer = 0; ﻩ //蜂鸣器发声 ﻩ} ﻩelse ﻩ //温度正常 ﻩ{ ﻩﻩled_low=1; ﻩﻩﻩ //“低温”指示灯灭 ﻩ led_high=1;ﻩﻩ //“高温”指示灯灭 ﻩled_ok =0;ﻩ ﻩﻩ //“正常”指示灯亮 ﻩﻩbuzzer = 1;ﻩ ﻩﻩ //蜂鸣器不发声 } } /***********************************************/ /*函数名称:delay() */ /*函数功能:延时函数,单次25us左右延时 */ /*入口参数:t; */ /*输出参数:无 */ /*调用函数:无 */ /*全局变量:无 */ /*局部变量:t; */ /***********************************************/ void delay(uint t) { ﻩfor (;t〉0;t--); } /*******************程序结束********************/ 编号: 毕业设计说明书 题目:保健床控制系统的设计 学院: 专业: 学生姓名: 学号: 指导教师: 职称: 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发 2012年 5 月 21 日 摘 要 随着国民经济的发展,人们的生活水平有了很大的提高,越来越多的人们开始关注自己和亲人的健康问题.作为保健产品之一,保健床得到了越来越广泛的应用。保健床温度控制系统是保健床的重要组成部分,保健床温度控制系统可以实现对保健床的温度检测,并且操作人员可以对温度进行设定,实现对保健床的恒温控制. 温度测量是温度控制的基础,技术已经比较成熟。一般的测温元件有热电偶和二电阻.然而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法一般相对比较复杂,需要使用比较多的外部硬件。在这里我们用一种相对比较简单的方式来测量。 在这里我们采用美国DALLAS半导体公司推出的一种改进型智能温度传感器DS18B20作为检测元件,它的温度范围为—55~125 ºC,最高分辨率可达0。0625 ºC.DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,降低了成本而且使用方便。 本文介绍一种基于AT89C51单片机的一种具有温度测量、报警、温度设定以及定时功能的恒温控制电路,该电路采用DS18B20作为温度监测元件,测量范围+20℃—~+60℃,使用1602LCD液晶模块显示,可以手动设定温度值及定时时间值。文章中介绍了软硬件系统的各部分电路,以及了集成温度传感器DS18B20的原理,AT89C51单片机功能和应用.该恒温控制电路设计新颖、功能强大、结构简单。 关键词:温度测量;恒温控制;DS18B20;AT89C51 Abstract Along with national economy development, People’s living standards have greatly increased, more and more people begin to pay close attention to oneself and family health problems.As One of the health products, health care bed have been applied more and more. Health care bed control system is an important part of the health care bed, bed control health care system can realize the temperature inspection of the bed to health and the operating personnel to the temperature setting, realize the care of the bed temperature control. Temperature measurement is the basis for the control of temperature. It's technology has more mature。 The average temperature sensor thermocouple and have two resistance。 However the measured value of thermocouple and heat resistance is commonly voltage value, again converted into the corresponding temperature value, the general method is relatively complex, need to use more of the external hardware. Here we use a relatively simple way to measure. Here we use an improved intelligent temperature sensor DS18B20 launched by the American DALLAS semiconductor company as the test components, its temperature range for-55 to 125 DHS C, the highest resolution is 0.0625 º C. The temperature value measured by DS18B20 can be read out directly, and it can be linked to the single—chip microcomputer together with the use of three wire and , reduce the external hardware circuit, reduce the cost and easy to use. This paper introduces a temperature measurement, alarm, the temperature setting and timing function of temperature control circuit based on AT89C51, this circuit adopts DS18B20 as temperature monitoring components, its measurement range is +20℃ ~ +60℃,it shows the temperature value and time value used 1602LCD module, can manually set temperature and time the time value. The article introduces the hardware and software system in different parts of the circuit, and the introductions of the temperature sensor DS18B20 principle, AT89C51 single-chip microcomputer function and application. The constant temperature control circuit design is novel, powerful, simple structure. Key words:Temperature measurement; C- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用文档 基于 温度 控制系统 设计 语言 源程序 实用 文档 doc
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文