锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

根据51的温度控制系统设计C语言学习知识源程序.doc

时间:2022-08-26 11:30:00 传感器dp2

c8da8f5a7cda2d62dda9e5a200b168b9.gifC语言学习知识源程序是根据51温度控制系统设计的.doc

-/*********************************************************//*温度监称温度监控系统 *//*使用89个程序功能C52单片机和DS18B20温度传感器实现环境 *//* 实时测量高低温报警 *//*程序版本v1.0 *//*作 者 *//*编写时间 *//*********************************************************/include reg52.hinclude intrins.h //含_nop_延迟函数//定义数据类型define uchar unsigned chardefine uint unsigned int//定义端口define LED P0 ///段码输出口sbit DQ P32; //传感器数据口sbit SMG_q P10.//定义数字管阳级控制脚(千位)sbit SMG_b P11.//定义数字管阳级控制脚(百位)sbit SMG_s P12.//定义数字管阳级控制脚(十位)sbit SMG_g P13.//定义数字管阳级控制脚(个位)sbit buzzer P15; //蜂鸣器sbit led_low P26; ///低温指示灯sbit led_high P27; ///高温指示灯sbit led_ok P25; //正常温度指示灯sbit led_work P24; //工作指示灯sbit set P37; //设置按钮sbit add P34; //加一个按钮sbit dec P35; ///减一键//定义变量和常量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_code12 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;uchar code LED_code1 0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10;uchar code ditab16 0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04,0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09.//小数量转换码表 uchar data temp_data2 0 x00,0 x00;//存储从传感器读出的温度值uchar data dp5 0 x00,0 x00,0 x00,0 x00,0 x00;//显示单元数据,共四个数据和一个操作/子函数声明void ds_reset; //DS18B20初始化函数void ds_writeuchar ds_wrdata; //DS18B20写数据函数uchar ds_read; //DS18B20读数据函数read_temp; ///读取温度函数void change_tempuint tem; ///温度数据处理void xianshiint horl; ///温度显示转换void display; ///数字管显示函数void keyscan; //按键查询函数void warn_led; ///超限报警void delayuint t; //延迟函数,单次25us/********************主函数*********************/void mainLED0 x00; ///初始化显示端口led10;led20;led30;led40;forh0;h4;hdph8;while1 ///循环执行显示和温度读取uchar i;fori0;i200;iwarn_led; //指示灯控制display; //显示keyscan; //按键扫描change_tempread_temp; //***********************************************//*函数名称ds_reset *//*函数功能DS18B20初始化 *//*入口参数无 *//*输出参数无 *//*调用函数delay;_nop_; *//*全局变量无 *//*局部变量presence *//***********************************************/void ds_resetvoidchar presence1;whilepresencewhilepresenceDQ1; //传感器数据段先置高电平_nop_;_nop_; //适当延迟DQ0; ///传感器数据段从高电平到低电平 delay50; //延时DQ1; ///再置高电平 delay6; //延时presenceDQ; ///初始化成功,继续下一步 delay45; //延时 presenceDQ; DQ1; //提高电平led_work0; ///打开工作指示灯//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////***********************************************//*函数名称ds_write *//*函数功能向DS18B20写数据 *//*入口参数ds_wrdata *//*输出参数无 *//*调用函数delay;_nop_; *//*全局变量无 *//*局部变量ds_wrdata *//***********************************************/void ds_writeuchar ds_wrdata uchar i;fori8;i0;i--DQ1;_nop_;_nop_; DQ0;_nop_;_nop_;_nop_;_nop_; DQds_wrdata ///最低位移delay6;ds_wrdatads_wrdata/2; //右移1位DQ1;delay1; /***********************************************//*函数名称ds_read *//*函数功能从DS18B20读数据 *//*入口参数无 *//*输出参数value *//*调用函数delay;_nop_; *//*全局变量 *//*局部变量i;value; *//***********************************************/uchar ds_readvoiduchar i;uchar value0;fori8;i0;i--DQ1;_nop_;_nop_;value1;DQ0;_nop_;_nop_;_nop_;_nop_; DQ1;_nop_;_nop_;_nop_;_nop_; ifDQvalue|0 x80;delay6; DQ1;returnvalue; /***********************************************//*函数名称read_temp *//*读温度数据数据函数功能 *//*入口参数无 *//*输出参数yemp *//*调用函数ds_reset;ds_write;ds_read; *//* delay; */ /*全局变量temp *//*局部变量temp_data; *//***********************************************/read_tempds_reset; ///传感器初始化delay200;ds_write0 xcc; ///ds_write0 x44; //发温转换命令ds_reset; delay1;ds_write0 xcc; ds_write0 xbe; //读18B20中存储器temp_data0ds_read; //读温度值的低字节命令temp_data1ds_read; ////阅读高字节的温度值temptemp_data1;temp8; temptemp|temp_data0; //两个字节合成整形变量return temp; //回到温度值 /***********************************************//*函数名称chang_temp *//*函数功能转换温度传感器中独特的数据 *//*入口参数tem *//*输出参数dp *//*调用函数无 *//*全局变量dp;ditab;r; *//*局部变量tem *//***********************************************/void change_tempuint temuchar n0;iftem6348 // 温度值正负判断tem65536-tem; // 负温补码n1; //标志位置1 dp4tem // 取小数值dp0ditabdp4; // 存储小数显示值dp4tem4; // 取中间八位,即整数部分的值dp3dp4/100; // 取百位数据dp1dp4100; // 取后两位数据dp2dp1/10; // 取十位数据dp1dp110; // 个位rdp1dp2*10dp3*100; ///实际温度值(十进制)ifdp3 ///符号位显示判断dp30 x0a; ///最高位0时不显示ifdp2dp20 x0a; ///次高位0时不显示ifndp30 x0b; //- /***********************************************//*函数名称xianshi *//*函数功能温度数据转换为显示LED段码 *//*入口参数horl *//*输出参数dp *//*调用函数无 *//*全局变量dp; *//*局部变量n; *//***********************************************/void xianshiint horlint n0;ifhorl128 ///负数补码转换 horl256-horl;n1;dp3horl/100;dp3dp3 //百位dp2horl100/10; //十位dp1horl10; //个位dp00; //小数位ifdp3 ///高位为零,不显示dp30 x0a;ifdp2 dp20 x0a; ifn //负数最高位显示- dp30 x0b; /***********************************************//*函数名称display *//*数码管显示函数功能 *//*入口参数无 *//*输出参数无 *//*调用函数delay *//*全局变量dp;LED_code;LED_code1; *//* led1;led2;led3;led4; *//*局部变量j; *//***********************************************/ void display intj;forj0;j4;j //4位LED扫描控制switchjcase 0LEDLED_codedp0; led41; delay450; led40; break; //小数位case 1LEDLED_code1dp1; led31; delay450; led30; break; //个位case 2LEDLED_codedp2; led21; delay450; led20; break; //十位case 3LEDLED_codedp3; led11; delay450; led10; break; //百位 /***********************************************//*函数名称keyscan *//*函数功能按键查询 *//*入口参数无 *//*输出参数无 *//*调用函数delay;display;xianshi; *//*全局变量count;high;low; *//*局部变量无 *//***********************************************/void keyscanifset0 //set键按下while1delay500; //延时去抖动ifset0 //重新判断set键是否按下count;whileset //按键弹起继续显示前面内容display;ifcount1 //set按下一次执行此段xianshihigh; //转换上限温度为段码并显示display;ifadd0 //add键是否按下whileadd //弹起时上限温度加一并显示display;high1;ifdec0 //dec键是否按下whiledec //弹起时上限温度减一并显示display;high-1; ifcount2 //set键按下两次执行此段xianshilow; //转换下限温度为段码并显示display;ifadd0 //add键是否按下whileadd //弹起时下限温度加一并显示display;low1; //dec键是否按下ifdec0whiledec //弹起时下限温度减一并显示display;low-1;ifcount3 //set键按下三次回到温度显示状态count0;break; /***********************************************//*函数名称warn_led *//*函数功能工作情况指示灯控制 *//*入口参数无 *//*输出参数无 *//*调用函数无 *//*全局变量high;low;r; *//*局部变量无 *//***********************************************/void warn_led ifrhigh //温度高于上限温度led_low1; //“低温”指示灯灭led_high0; //“高温”指示灯亮led_ok 1; //“正常”指示灯灭buzzer 0; //蜂鸣器发声else ifrlow //温度低于下限温度led_low0; //“低温”指示灯亮led_high1; //“高温”指示灯灭led_ok 1; //“正常”指示灯灭buzzer 0; //蜂鸣器发声else //温度正常led_low1; //“低温”指示灯灭led_high1; //“高温”指示灯灭led_ok 0; //“正常”指示灯亮buzzer 1; //蜂鸣器不发声 /***********************************************//*函数名称delay *//*函数功能延时函数,单次25us左右延时 *//*入口参数t; *//*输出参数无 *//*调用函数无 *//*全局变量无 *//*局部变量t; *//***********************************************/void delayuint tfor ;t0;t--;/*******************程序结束********************/

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章