智能温室恒温控制系统C语言程序_第1页
智能温室恒温控制系统C语言程序_第2页
智能温室恒温控制系统C语言程序_第3页
智能温室恒温控制系统C语言程序_第4页
智能温室恒温控制系统C语言程序_第5页
已阅读5页,还剩22页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ 保存输入的数字/ 保存数码管号/ 控制屏幕显示温度或者参数/保存正在使用的 DS18B20号/ 一号通道的报警上下限值/ 一号通道的预定温度值/ 二号通道的报警上下限值/ 二号通道的预定温度值程序清单:#include<reg52.h>#include<intrins.h>#include<stdio.h>#defineucharunsignedcharsbitTMDAT=P14;两个DS18B20的I/O口sbitTMDAT1=P1A5;sbitCS=P1A0;sbitCLK=P1A1;sbitDIO=P1A2;sbitKEY=P1A3;sbitHEA

2、T=P1A7;sbitCOLD=P3A3;sbitHEAT1=P1A6;sbitCOLD1=P3A2;sbitALARM=P3A6;intnum;intkey=7;intqiehuan=0;intchoose=0;intmax1=23;intmin1=5;intupper1=22;intlower1=18;intmax2=23;intmin2=5;intupper2=22;intlower2=18;unsignedcharbuffer116=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x

3、0f;/控制符,用于显示不带小数点的数字unsignedcharbuffer216=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f;/控制符,用于显示带小数点的数字unsignedcharturn8=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87;/控制符,用于选定数码管号unsignedintresult,result1;/保存十六进制的温度值unsignedchara,b;uchardatarebuf,sebuf;ucharbdatacom_dat

4、a;sbitmos_bit=com_dataA7;sbitlow_bit=com_dataA0;voidsend(ucharsebuf);voiddelay_50us();voidreceive();voidreset();voiddmsec(unsignedintcount);voidtmreset(void);voidtmstart(void);voidtmreset1(void);voidtmstart1(void);voidfuzhi(void);/用于修改参数值voidxianshi(void);/将修改的参数值显示unsignedchartmrtemp(void);unsigned

5、chartmrtemp1(void);main()unsignedintzhengshu,dot;unsignedchartemperature;unsignedintsymbol;intshiwei;intgewei;unsignedintzhengshu1,dot1;unsignedchartemperature1;unsignedintsymbol1;intshiwei1;intgewei1;while(1)if(choose=0)/通道一工作dmsec(1);tmstart();dmsec(1000);tmrtemp();reset();if(result>0xf800)/将通道

6、一的温度转换为十进制symbol=1;result=result+1;zhengshu=result/16;dot=result&0x000f;dot=(dot*10)/16;shiwei=(zhengshu/10);gewei=(zhengshu%10);temperature=zhengshu+dot*0.1;/通道一的十进制温度if(temperature>upper1)/通道一温度控制COLD=1;HEAT=0;/超过预定温度的上限,启动小风扇elseif(temperature<lower1)COLD=0;HEAT=1;/低于预定温度的下限,启动小灯泡elseCO

7、LD=0;HEAT=0;if(temperature>max1|temperature<min1)ALARM=0;/高于或低于设定温度的上下限,则报警elseALARM=1;elsedmsec(1);/通道二工作tmstart1();dmsec(1000);tmrtemp1();reset();if(result1>0xf800)/将通道二的温度转换为十进制symbol1=1;result1=result1+1;zhengshu1=result1/16;dot1=result1&0x000f;dot1=(dot1*10)/16;shiwei1=(zhengshu1/1

8、0);gewei1=(zhengshu1%10);temperature1=zhengshu1+dot1*0.1;/通道二的十进制温度if(temperature1>upper2)/通道二温度控制COLD1=1;HEAT1=0;/超过预定温度的上限,启动小风扇elseif(temperature1<lower2)COLD1=0;HEAT1=1;/低于预定温度的下限,启动小灯泡elseCOLD1=0;HEAT1=0;if(temperature1>max2|temperature<min2)ALARM=0;/高于或低于设定温度的上下限,则报警elseALARM=1;/屏幕

9、的显示:if(qiehuan=0)/显示温度if(choose=0)send(0x80);delay_50us();if(symbol=1)send(0x0a);elsesend(0x0f);delay_50us();send(0x81);delay_50us();send(buffer1shiwei);delay_50us();send(0x82);delay_50us();send(buffer2gewei);delay_50us();send(0x83);delay_50us();send(buffer1dot);delay_50us();elsesend(0x84);delay_50u

10、s();if(symbol1=1)send(0x0a);elsesend(0x0f);delay_50us();send(0x85);delay_50us();send(buffer1shiwei1);delay_50us();send(0x86);delay_50us();send(buffer2gewei1);delay_50us();send(0x87);delay_50us();send(buffer1dot1);delay_50us();elseif(choose=0)/显示参数值send(0x80);delay_50us();send(buffer1max1/10);send(0x

11、81);delay_50us();send(buffer1max1%10);send(0x82);delay_50us();send(buffer1min1/10);send(0x83);delay_50us();send(buffer1min1%10);send(0x84);delay_50us();send(buffer1upper1/10);send(0x85);delay_50us();send(buffer1upper1%10);send(0x86);delay_50us();send(buffer1lower1/10);send(0x87);delay_50us();send(bu

12、ffer1lower1%10);delay_50us();if(choose=1)send(0x80);delay_50us();send(buffer1max2/10);send(0x81);delay_50us();send(buffer1max2%10);send(0x82);delay_50us();send(buffer1min2/10);send(0x83);delay_50us();send(buffer1min2%10);send(0x84);delay_50us();send(buffer1upper2/10);send(0x85);delay_50us();send(buf

13、fer1upper2%10);send(0x86);delay_50us();send(buffer1lower2/10);send(0x87);delay_50us();send(buffer1lower2%10);CS=1;while(KEY);send(0x15);/第一个字节,读取键值命令字delay_50us();receive();/第二个字节,读取键值,存放在变量rebuf中delay_50us();switch(rebuf)case0x3F:/按键S1,选择一路choose=0;/ 第一个字节,闪烁控制命令字send(0x88);delay_50us();send(0xF0);

14、/第二个字节,设置为闪烁CS=1;break;case0x3E:/按键S2,选择二路choose=1;send(0x88);/第一个字节,闪烁控制命令字delay_50us();send(0x0F);/第二个字节,设置为闪烁CS=1;break;case0x36:按键S4开始修改qiehuan=1;key=7;CS=1;break;case0x37:/选择确定qiehuan=0;CS=1;break;case0x27:/输入数字"0"key+;num=0;fuzhi();xianshi();CS=1;break;case0x26:/输入数字"1"key+

15、;num=1;fuzhi();xianshi();CS=1;break;case0x1F:/输入数字"2"key+;num=2;fuzhi();xianshi();CS=1;break;case0x1E:/输入数字"3"key+;num=3;fuzhi();xianshi();CS=1;break;case0x17:/输入数字"4"key+;num=4;fuzhi();xianshi();CS=1;break;case0x16:/输入数字"5"key+;num=5;fuzhi();xianshi();CS=1;br

16、eak;case0x0F:/输入数字"6"key+;num=6;fuzhi();xianshi();CS=1;break;case0x0E:/输入数字"7"key+;num=7;fuzhi();xianshi();CS=1;break;case0x07:/输入数字"8"key+;num=8;fuzhi();xianshi();CS=1;break;case0x06:/输入数字"9"key+;num=9;fuzhi();xianshi();CS=1;break;default:break;while(!KEY);KE

17、Y=1;/*FUNCTION*/ mSec Delay 11.0592 Mhz/ 1MS 延时voiddmsec(unsignedintcount)unsignedinti;while(count-)for(i=0;i<125;i+)voidtmreset(void)unsignedinti;TMDAT=0;i=103;while(i>0)i-;TMDAT=1;i=4;while(i>0)i-;voidtmreset1(void)unsignedinti;TMDAT1=0;i=103;while(i>0)i-;TMDAT1=1;i=4;while(i>0)i-;v

18、oidtmpre(void)unsignedinti;while(TMDAT);while(TMDAT);i=4;while(i>0)i-;voidtmpre1(void)unsignedinti;while(TMDAT1);while(TMDAT1);/ResetTX/Approx900uS/ResetTX/Approx900uS/WaitforPresenceRX/WaitforPresenceRXi=4;while(i>0)i-;/ read one bit/ read one bytebittmrbit(void)unsignedinti;bitdat;TMDAT=0;i+

19、;TMDAT=1;i+;i+;dat=TMDAT;i=8;while(i>0)i-;return(dat);unsignedchartmrbyte(void)unsignedchari,j,dat;dat=0;for(i=1;i<=8;i+)j=tmrbit();dat=(j<<7)|(dat>>1);return(dat);voidtmwbyte(unsignedchardat)/writeonebyteunsignedinti;unsignedcharj;bittestb;for(j=1;j<=8;j+)testb=dat&0x01;dat

20、=dat>>1;if(testb)/ Write 1TMDAT=0;i+;i+;TMDAT=1;i=8;while(i>0)i-;elseTMDAT=0;/Write0i=8;while(i>0)i-;TMDAT=1;i+;i+;voidtmstart(void)tmreset();tmpre();dmsec(1);tmwbyte(0xcc);tmwbyte(0x44);unsignedchartmrtemp(void)tmreset();tmpre();dmsec(1);tmwbyte(0xcc);tmwbyte(0xbe);a=tmrbyte();b=tmrbyte

21、();/ds1820startconvert/skiprom/convert/readtemp/skiprom/convert/LSB/MSBresult=a+b*256;return(result);bittmrbit1(void)unsignedinti;bitdat;TMDAT1=0;i+;TMDAT1=1;i+;i+;dat=TMDAT1;i=8;while(i>0)i-;return(dat);unsignedchartmrbyte1(void)unsignedchari,j,dat;dat=0;for(i=1;i<=8;i+)j=tmrbit1();dat=(j<

22、<7)|(dat>>1);return(dat);voidtmwbyte1(unsignedchardat)unsignedinti;unsignedcharj;bittestb;for(j=1;j<=8;j+)/readonebit/readonebyte/writeonebytetestb=dat&0x01;dat=dat>>1;if(testb)TMDAT1=0;/Write1i+;i+;TMDAT1=1;i=8;while(i>0)i-;elseTMDAT1=0;/Write0i=8;while(i>0)i-;TMDAT1=1;i

23、+;i+;voidtmstart1(void)tmreset1();tmpre1();dmsec(1);tmwbyte1(0xcc);tmwbyte1(0x44);/ds1820startconvert/skiprom/convertunsignedchartmrtemp1(void)/readtemptmreset1();tmpre1();dmsec(1);/ skip rom/ convert/ LSB/ MSBtmwbyte1(0xcc);tmwbyte1(0xbe);a=tmrbyte1();b=tmrbyte1();result1=a+b*256;return(result1);vo

24、iddelay_50us()延时50us,不同的晶振,有差异,读者可根据实际情况自定参数uchari;for(i=0;i<6;i+);voiddelay_8us()/延时8usuchari;for(i=0;i<1;i+);voiddelay_50ms()/延时50msuchari,j;for(j=0;j<50;j+)for(i=0;i<125;i+);void send(uchar sebuf)/发送一个字节结束时,7289的CS继续使能uchari;com_data=sebuf;CS=0;CLK=0;delay_50us();for(i=0;i<8;i+)del

25、ay_8us();DIO=mos_bit;CLK=1;delay_8us();com_data=com_data<<1;CLK=0;DIO=0;/改为应该更好;voidreceive。/接收一个字节结束时,7289的CS不使能uchari;CLK=1;delay_50us();for(i=0;i<8;i+)com_data=com_data<<1;low_bit=DIO;CLK=1;delay_8us();CLK=0;delay_8us();rebuf=com_data;DIO=1;/接收结束,7289的CS不使能/ 复位清零/ 输入方式/ 输入方式/ 软件延时/

26、A4 为复位清楚命令CS=1;voidreset()KEY=1;DIO=1;delay_50ms();send(0xa4);CS=1;voidfuzhi()/将输入的数字赋给参数if(key=8)key=0;switch(key)case0:if(choose=0)max1=num*10+max1%10;elsemax2=num*10+max2%10;break;case1:if(choose=0)max1=(max1/10)*10+num;elsemax2=(max2/10)*10+num;break;case2:if(choose=0)min1=num*10+min1%10;elsemin2=num*10+min2%10;break;case3:if(choose=0)min1=(min1/(10)*10+num;elsemin2=(min

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论