基于51的温度控制系统设计C语言源程序.docx

上传人:b****6 文档编号:7108398 上传时间:2023-01-18 格式:DOCX 页数:15 大小:17.96KB
下载 相关 举报
基于51的温度控制系统设计C语言源程序.docx_第1页
第1页 / 共15页
基于51的温度控制系统设计C语言源程序.docx_第2页
第2页 / 共15页
基于51的温度控制系统设计C语言源程序.docx_第3页
第3页 / 共15页
基于51的温度控制系统设计C语言源程序.docx_第4页
第4页 / 共15页
基于51的温度控制系统设计C语言源程序.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于51的温度控制系统设计C语言源程序.docx

《基于51的温度控制系统设计C语言源程序.docx》由会员分享,可在线阅读,更多相关《基于51的温度控制系统设计C语言源程序.docx(15页珍藏版)》请在冰豆网上搜索。

基于51的温度控制系统设计C语言源程序.docx

基于基于51的温度控制系统设计的温度控制系统设计C语言源程序语言源程序/*程序名称:

温度监控系统*/*程序功能:

利用89C52单片机和DS18B20温度传感器实现环境*/*温度的实时测量和高、低温报警*/*程序版本:

*/*作者:

*/*编写时间:

*/*/#include#include/含_nop_()延时函数/定义数据类型#defineucharunsignedchar#defineuintunsignedint/定义端口#defineLEDP0/段码输出口sbitDQ=P32;/传感器数据口sbitSMG_q=P10;/定义数码管阳级控制脚(千位)sbitSMG_b=P11;/定义数码管阳级控制脚(百位)sbitSMG_s=P12;/定义数码管阳级控制脚(十位)sbitSMG_g=P13;/定义数码管阳级控制脚(个位)sbitbuzzer=P15;/蜂鸣器sbitled_low=P26;/低温指示灯sbitled_high=P27;/高温指示灯sbitled_ok=P25;/温度正常指示灯sbitled_work=P24;/工作指示灯sbitset=P37;/设置按键sbitadd=P34;/加一按键sbitdec=P35;/减一按键/定义变量和常量intcount=0;/按键次数寄存器inth;/主函数用循环计数器uinttemp;/温度值ucharr;/温度值整数形式ucharhigh=35,low=20;/上下限初值/共阳LED段码表0123456789不亮-ucharcodeLED_code12=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;ucharcodeLED_code1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;ucharcodeditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/小数部分转换码表uchardatatemp_data2=0x00,0x00;/存储从传感器读出的温度值uchardatadp5=0x00,0x00,0x00,0x00,0x00;/显示单元数据,共4个数据和一个运算/子函数声明voidds_reset();/DS18B20初始化函数voidds_write(uchards_wrdata);/DS18B20写数据函数uchards_read();/DS18B20读数据函数read_temp();/读取温度函数voidchange_temp(uinttem);/温度数据处理voidxianshi(inthorl);/温度显示转换voiddisplay();/数码管显示函数voidkeyscan();/按键查询函数voidwarn_led();/超限报警voiddelay(uintt);/延时函数,单次25us/*主函数*/voidmain()LED=0x00;/初始化显示端口led1=0;led2=0;led3=0;led4=0;for(h=0;h4;h+)dph=8;while

(1)/循环执行显示和温度读取uchari;for(i=0;i0;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;*/*/uchards_read(void)uchari;ucharvalue=0;for(i=8;i0;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_data0=ds_read();/读温度值的低字节命令temp_data1=ds_read();/读温度值的高字节temp=temp_data1;temp6348)/温度值正负判断tem=65536-tem;/负温度求补码n=1;/标志位置1dp4=tem&0x0f;/取小数部分的值dp0=ditabdp4;/存入小数部分显示值dp4=tem4;/取中间八位,即整数部分的值dp3=dp4/100;/取百位数据dp1=dp4%100;/取后两位数据dp2=dp1/10;/取十位数据dp1=dp1%10;/个位r=dp1+dp2*10+dp3*100;/实际温度值(十进制)if(!

dp3)/符号位显示判断dp3=0x0a;/最高位为0时不显示if(!

dp2)dp2=0x0a;/次高位为0时不显示if(n)dp3=0x0b;/负温度时最高位显示-/*/*函数名称:

xianshi()*/*函数功能:

温度数据转换成显示所需LED段码*/*入口参数:

horl*/*输出参数:

dp*/*调用函数:

无*/*全局变量:

dp;*/*局部变量:

n;*/*/voidxianshi(inthorl)intn=0;if(horl128)/负数补码转换horl=256-horl;n=1;dp3=horl/100;dp3=dp3&0x0f;/百位dp2=horl%100/10;/十位dp1=horl%10;/个位dp0=0;/小数位if(!

dp3)/高位为零不显示dp3=0x0a;if(!

dp2)dp2=0x0a;if(n)/负数最高位显示“-”dp3=0x0b;/*/*函数名称:

display()*/*函数功能:

数码管显示*/*入口参数:

无*/*输出参数:

无*/*调用函数:

delay()*/*全局变量:

dp;LED_code;LED_code1;*/*led1;led2;led3;led4;*/*局部变量:

j;*/*/voiddisplay()intj;for(j=0;j=3)/set键按下三次回到温度显示状态count=0;break;/*/*函数名称:

warn_led()*/*函数功能:

工作情况指示灯控制*/*入口参数:

无*/*输出参数:

无*/*调用函数:

无*/*全局变量:

high;low;r;*/*局部变量:

无*/*/voidwarn_led()if(rhigh)/温度高于上限温度led_low=1;/“低温”指示灯灭led_high=0;/“高温”指示灯亮led_ok=1;/“正常”指示灯灭buzzer=0;/蜂鸣器发声elseif(r0;t-);/*程序结束*/

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1