1、基于的温度控制系统设计C语言源程序(完整资料)(可以直接使用,可编辑 优秀版资料,欢迎下载)/*/*程序名称:温度监控系统 */程序功能:利用895单片机和D18B20温度传感器实现环境 * 温度的实时测量和高、低温报警 */程序版本:v10 /作 者: */*编写时间: /*#ie reg2.#includ trns。h /含_op_()延时函数/定义数据类型dfneucarnsigned cardefnuint signedint/定义端口defineLD /段码输出口bit DQ = P32; /传感器数据口sbit SMG_q =10;/定义数码管阳级控制脚(千位)si SMG_b =
2、 P11;/定义数码管阳级控制脚(百位)it S_s 12;/定义数码管阳级控制脚(十位)sbt SMG_g = P1;/定义数码管阳级控制脚(个位)bit buzzer 15; /蜂鸣器sbit ledow = 26; /低温指示灯sbit led_hgh = P27; /高温指示灯sbit e_ok= P25; /温度正常指示灯sbit led_ork =P; /工作指示灯si s=37; /设置按键it add= P34; /加一按键it dc = P35; /减一按键/定义变量和常量in cont = ; /按键次数寄存器 t h; /主函数用循环计数器 uintemp; /温度值uc
3、arr; /温度值整数形式uchari 35,lo = 0; /上下限初值/共阳LED段码表 ”01” 2 ”3” 4” ” 6” ”78 9” 不亮” - uchar cod Lcod2 = 0xc0,xf9,0xa,xb0,0x99,x92,0x2,0xf,0x80,090;uchar coe EDcode1 x0,0x9,02,0x0,0x9,0x2,x0,0x8,0x00,0x1;uhr cde itb16000,0x01,0x01,002,0x,00,0x4,04,0x0,06,0,0x,0,x8,0x9,0x9;/小数部分转换码表 uhar data empdata2 = 0x0,
4、0x00;/存储从传感器读出的温度值uhar da dp= x00,000,0x0,000,0x00;显示单元数据,共4个数据和一个运算/子函数声明vo s_rest(); /DS18B20初始化函数void writ(uchar d_wrdata); /S82写数据函数uchads_read(); /DS18B读数据函数read_te(); /读取温度函数voi cangtmp(uin tm); /温度数据处理voidxiansh(into); /温度显示转换void disply(); /数码管显示函数vd keysca(); /按键查询函数void warn_ld(); /超限报警voi
5、ddelay(uint ); /延时函数,单次25us/*主函数*vid mai()LD=0x00; /初始化显示端口led=0;led2=0;led30;led4=0;for(h0;h0;-)=1;_no_();_np(); D=0;p();_np_();_op_();op_();D=d_wrdata&0x; /最低位移出delay(6);s_wraads_rdat/2; /右移位DQ=1;deay();/*/函数名称:s_ead() */*函数功能:从S1B2读数据 */*入口参数:无 /*输出参数:vale */调用函数:del();_nop(); */*全局变量: /*局部变量:i;v
6、alu; /*/ucardsrd(id)ur i;uar vue=0;fo(i=8;i0;-)DQ=1;op();_no_();value=1;D=0;_nop_();_nop_();_nop_();_nop_(); DQ=1;_n_();_op_();_nop();_no_(); if(Q)valuex80;delay(6); 1;retu(alue);/*/*函数名称:read_temp() */函数功能:读温度数据数据 *入口参数:无 *输出参数:ye */调用函数:dsrse();d_wite();dsead(); * dela(); */ /全局变量:ep */*局部变量:tem_d
7、ata; */*rad_tmp()s_rset(); /传感器初始化el(00);ds_wrte(0xc); /发跳过读取序列号命令ds_rite(0x44); /发温度转换命令ds_rst(); elay(1);d_ri(0xcc); s_rte(0xbe); /读1B2中存储器temp_dta0=ds_red(); /读温度值的低字节命令tmp_daa1=ds_ead(); /读温度值的高字节tem=temp_data;tmp128) /负数补码转换 or=25hrl;=1;d3hol/100;p3=dp3&0x0f; /百位p=horl10010;/十位dphol10;/个位dp0=;
8、/小数位if(!d3) /高位为零不显示d=0x0a;i(!dp2)2=0x0a;f(n) /负数最高位显示“-” d3=x0b; /*/函数名称:dsply() 函数功能:数码管显示 */*入口参数:无 /*输出参数:无 */调用函数:de() /全局变量:d;LDcode;Dod; /* 1;led2;e3;l4; */*局部变量:j; /*/ void diplay() int ;for(j0;4;j+) /4位LED扫描控制swtch(j)case:LEDLDcodp0; ld=1; dlay(4); led4=; reak; /小数位case1:LDLEDde1dp1; ed31;
9、delay(450); ld3=0; b; /个位case :LED=LED_codedp2; l2=1; dea(40); le=; break; /十位cae 3:DLEDcodedp3; led11; delay(40); led1=0; rea; /百位*/*函数名称:keyscan() *函数功能:按键查询 */入口参数:无 */*输出参数:无 调用函数:deay();dsplay();xshi(); /全局变量:coun;hig;lo; */*局部变量:无 */*/vi keysca()if(s=0) /set键按下ile()dea(500);/延时去抖动i(e=0) /重新判断s
10、键是否按下count+;whi(!s) 按键弹起继续显示前面内容splay();if(cont=) /st按下一次执行此段xianshi(hig); /转换上限温度为段码并显示dpla();f(add=) /add键是否按下whie(!dd) /弹起时上限温度加一并显示dispy();high+=;if(c=0) /dec键是否按下while(!dec) /弹起时上限温度减一并显示disly();high-=; if(con=2) set键按下两次执行此段xanshi(); /转换下限温度为段码并显示displa();f(add=0) /d键是否按下whle(!d) /弹起时下限温度加一并显示
11、dila();ow=1; de键是否按下if(de=)wile(!de) /弹起时下限温度减一并显示dispa();lw;i(cont=3) /set键按下三次回到温度显示状态ct=;beak;/*/*函数名称:wan_ld() /函数功能:工作情况指示灯控制 */入口参数:无 /输出参数:无 */调用函数:无 */*全局变量:hig;ow;r; /*局部变量:无 /*/void warn_ld() if(rhigh) /温度高于上限温度ed_low=1; /“低温”指示灯灭leigh0; /“高温”指示灯亮d_ok =1; /“正常指示灯灭buzzer = ; /蜂鸣器发声elseif(rl
12、ow) /温度低于下限温度led_w=0; /“低温指示灯亮led_high=; /“高温”指示灯灭le_k 1; /“正常”指示灯灭uze ; /蜂鸣器发声ese /温度正常l_ow=; /“低温”指示灯灭led_hih=1; /“高温”指示灯灭led_ok 0; /“正常”指示灯亮bzze = 1;/蜂鸣器不发声/*/函数名称:elay() /函数功能:延时函数,单次us左右延时 *入口参数:t; /输出参数:无 */调用函数:无 /全局变量:无 /*局部变量:t; */*/i day(unt )f(;t0;-);/*程序结束*/incde usigd inx,y; void dlams(
13、unsned int ) /延时unignini,j; f(i=;i;) for(j=150;;j); d n_all()/开启所有灯 P0=0x0; P1x00; P2=0x00; P3=0; void Offl()/关闭所有灯 P=0x;P=xff; P2=0xff; P3=0f; vi()/正向流水灯 P00x00;elayms(40);P2000; elaym(400);P=000;delyms(00);P=0x0; delayms(400); P=0x0; elaym(5); P0=0x02; delayms(5); P0=x4; lays(); P0=0x08; dlym(); P
14、00x0; dels(50); P=020;dayms(50); P0=0x40; deaym(50); P0=0x; dlayms(0); P0x00; P2=0x0;deays(50); P20x2; deays(50);P=0x0; eaym(0); P2=x08; dyms(50); P2=x0; elayms(); P2=0x20; deas(50); P2=0x4; dlays(50); P2=x0;deam(); P20x00;P3=080; elayms(50);Px0; elams(5); P=0x20;elayms(0);P=x; eayms(5); 3=0x0;deas(
15、50);P30x04; elaym(5); 3=0x02; eaym(50); P3=001; deays(50); P0x00; P1=00; elym(50); 1=0x0; delym(0); P1=0x2; dla(50); P1x10; elyms(50); P=08; delayms(5); P1=0x4; delayms(); 1=0x02;dlayms(50); 1=0x01; delays(0); P10x00;Off_ll();P0=0fe; days(5);0=0xfd; dlam(50);P0=0b;elms(5);P00xf7; dlas(50); P=xef; ea
16、s(50); P0=0xdf; delayms(0); P0=0xf; delay(0); P0=0f; delayms(5); P0=0xf;P2e;dea(50);P20xfd;dlayms(5);20xf;ls(5); 2=0xf; delyms(50);P2=0xf; elay(50); P=0xdf;elays(50); P2=0xf; deas(50); P2=0xf; elayms(0); 2=0ff;P=0x7f; dlayms(50);P=0xbf; dlayms(50);P3=0df; dlayms(50); P3=xe; dems(50); P0xf; delams(5)
17、; P3=0xfb; delaym(5); P3=0; delys(50);P3=0fe;delaym(50);P3xf; P10x7f; delym(50);P1xb; dlaym(0);P1xd; elym(50); P1=0xef;delams(50); P1x; elay(50); P10fb; delys(5); P1xd;eym(50);P=0xf; elams(0);P1=0xff;P0=0xfe; eam(50);P0=fc; elaym(5);P0=0xf; dlam(0);P0xf0;elaym(50);=0xe0; elay();P0=0x0; delayms(5);P0
18、=0x8;deays(50);P=0x00; dlams(50);P2=0e;eym(5);P0xc;delaym(50);P2=0xf; delys(5);P20f; eyms(50);P20x0; delas(5);2=0xc0;delayms(50);P=0x; ays(0);2=x0; delayms(50); 3=x7f; deams(50);P30x3f;delam(50);3=0x1f; delayms(50);P3=0x0;elams();P=x07; elam(50);0x03; delayms(50);P3=0x0; delaym(50);P3=0x00;eaym(50);P0x7; deay(50);Px3f; lay(50);P1=0xf; delams(50);P1x;daym(5);1=x07;dely();P1=0x03; layms(50);1=01; delaym(5);P1=0x00;dlym(50);voi fa_ls()/反向流水灯 Ofal(); delam(00);On_ll(); elays(300);Off_al();
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100