




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序清单:#include <reg52.h>#include <intrins.h>#include <stdio.h>#define uchar unsigned charsbit TMDAT = P14;/两个DS18B20的I/O口sbit TMDAT1 = P15;sbit CS=P10;sbit CLK=P11;sbit DIO=P12;sbit KEY=P13;sbit HEAT=P17;sbit COLD=P33;sbit HEAT1=P16;sbit COLD1=P32;sbit ALARM=P36;int num; /保存输入的数字 in
2、t key=7; /保存数码管号int qiehuan=0; /控制屏幕显示温度或者参数int choose=0; /保存正在使用的DS18B20号int max1=23; /一号通道的报警上下限值int min1=5;int upper1=22; /一号通道的预定温度值int lower1=18; int max2=23; /二号通道的报警上下限值int min2=5;int upper2=22; /二号通道的预定温度值int lower2=18; unsigned char buffer116=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0
3、9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f;/控制符,用于显示不带小数点的数字unsigned char buffer216=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f;/控制符,用于显示带小数点的数字unsigned char turn8=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87;/控制符,用于选定数码管号unsigned int result,result1;/保存十六进制的温度值unsigned char a,b;u
4、char data rebuf,sebuf;uchar bdata com_data;sbit mos_bit=com_data7;sbit low_bit=com_data0;void send(uchar sebuf);void delay_50us();void receive();void reset();void dmsec (unsigned int count);void tmreset (void);void tmstart (void);void tmreset1 (void);void tmstart1 (void);void fuzhi(void);/用于修改参数值voi
5、d xianshi(void);/将修改的参数值显示unsigned char tmrtemp (void);unsigned char tmrtemp1 (void);main()unsigned int zhengshu,dot; unsigned char temperature;unsigned int symbol;int shiwei; int gewei;unsigned int zhengshu1,dot1; unsigned char temperature1;unsigned int symbol1;int shiwei1; int gewei1; while(1) if(
6、choose=0) /通道一工作dmsec(1);tmstart (); dmsec(1000);tmrtemp (); reset(); if(result>0xf800) /将通道一的温度转换为十进制 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)
7、/通道一温度控制 COLD=1; HEAT=0; /超过预定温度的上限,启动小风扇 else if(temperature<lower1) COLD=0; HEAT=1; /低于预定温度的下限,启动小灯泡 else COLD=0; HEAT=0; if(temperature>max1|temperature<min1) ALARM=0; /高于或低于设定温度的上下限,则报警 else ALARM=1; elsedmsec(1); /通道二工作tmstart1 (); dmsec(1000);tmrtemp1 (); reset(); if(result1>0xf800
8、) /将通道二的温度转换为十进制 symbol1=1; result1=result1+1;zhengshu1=result1/16;dot1=result1&0x000f;dot1=(dot1*10)/16; shiwei1=(zhengshu1/10); gewei1=(zhengshu1%10); temperature1=zhengshu1+dot1*0.1; /通道二的十进制温度if(temperature1>upper2) /通道二温度控制 COLD1=1; HEAT1=0; /超过预定温度的上限,启动小风扇 else if(temperature1<lower
9、2) COLD1=0; HEAT1=1; /低于预定温度的下限,启动小灯泡 else COLD1=0; HEAT1=0; if(temperature1>max2|temperature<min2) ALARM=0; /高于或低于设定温度的上下限,则报警 else ALARM=1; /屏幕的显示: if(qiehuan=0) /显示温度 if(choose=0) send(0x80); delay_50us(); if(symbol=1)send(0x0a); elsesend(0x0f); delay_50us(); send(0x81); delay_50us(); send(
10、buffer1shiwei); delay_50us(); send(0x82); delay_50us(); send(buffer2gewei); delay_50us(); send(0x83); delay_50us(); send(buffer1dot); delay_50us(); else send(0x84); delay_50us(); if(symbol1=1)send(0x0a); elsesend(0x0f); delay_50us(); send(0x85); delay_50us(); send(buffer1shiwei1); delay_50us(); send
11、(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(0x81);delay_50us();send(buffer1max1%10);send(0x82);delay_50us();send(buffer1min1/10);send(0x83);delay_50us();se
12、nd(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(buffer1lower1%10);delay_50us();if(choose=1)send(0x80);delay_50us();send(buffer1max2/10);send(0x81);delay_50us()
13、;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(buffer1upper2%10);send(0x86);delay_50us();send(buffer1lower2/10);send(0x87);delay_50us();send(buffer1lower2%10);
14、 CS=1; while(KEY); send(0x15); /第一个字节,读取键值命令字 delay_50us(); receive();/第二个字节,读取键值,存放在变量rebuf中 delay_50us(); switch(rebuf)case 0x3F: /按键S1,选择一路choose=0;send(0x88);/第一个字节,闪烁控制命令字delay_50us();send(0xF0);/第二个字节,设置为闪烁CS=1; break;case 0x3E:/按键S2, 选择二路choose=1;send(0x88);/第一个字节,闪烁控制命令字delay_50us();send(0x0
15、F);/第二个字节,设置为闪烁CS=1; break;case 0x36: /按键S4,开始修改qiehuan=1;key=7;CS=1; break; case 0x37:/选择确定qiehuan=0;CS=1; break;case 0x27: /输入数字"0"key+;num=0;fuzhi();xianshi();CS=1; break; case 0x26: /输入数字"1" key+;num=1;fuzhi();xianshi();CS=1; break; case 0x1F: /输入数字"2" key+;num=2;fu
16、zhi();xianshi();CS=1; break; case 0x1E: /输入数字"3" key+;num=3;fuzhi();xianshi();CS=1; break; case 0x17: /输入数字"4" key+;num=4;fuzhi();xianshi();CS=1; break; case 0x16: /输入数字"5"key+;num=5;fuzhi();xianshi();CS=1; break; case 0x0F: /输入数字"6" key+;num=6;fuzhi();xianshi
17、();CS=1; break; case 0x0E: /输入数字"7" key+;num=7;fuzhi();xianshi();CS=1; break; case 0x07: /输入数字"8" key+;num=8;fuzhi();xianshi();CS=1; break; case 0x06: /输入数字"9" key+;num=9;fuzhi();xianshi();CS=1; break; default: break; while(!KEY); KEY=1; /* FUNCTION */void dmsec (unsign
18、ed int count) / mSec Delay 11.0592 Mhz unsigned int i; / 1MS 延时 while (count-) for (i=0;i<125;i+) void tmreset (void) / Reset TX unsigned int i; TMDAT = 0; i = 103; while (i>0) i-; / Approx 900 uS TMDAT = 1; i = 4; while (i>0) i-;void tmreset1 (void) / Reset TX unsigned int i; TMDAT1 = 0; i
19、 = 103; while (i>0) i-; / Approx 900 uS TMDAT1 = 1; i = 4; while (i>0) i-;void tmpre (void) / Wait for Presence RX unsigned int i; while (TMDAT); while (TMDAT); i = 4; while (i>0) i-;void tmpre1 (void) / Wait for Presence RX unsigned int i; while (TMDAT1); while (TMDAT1); i = 4; while (i>
20、;0) i-;bit tmrbit (void) / read one bit unsigned int i; bit dat; TMDAT = 0; i+; TMDAT = 1; i+; i+; dat = TMDAT; i = 8; while (i>0) i-; return (dat);unsigned char tmrbyte (void) / read one byte unsigned char i,j,dat; dat = 0; for (i=1;i<=8;i+) j = tmrbit (); dat = (j << 7) | (dat >>
21、 1); return (dat);void tmwbyte (unsigned char dat) / write one byte unsigned int i; unsigned char j; bit testb; for (j=1;j<=8;j+) testb = dat & 0x01; dat = dat >> 1; if (testb) TMDAT = 0; / Write 1 i+; i+; TMDAT = 1; i = 8; while (i>0) i-; else TMDAT = 0; / Write 0 i = 8; while (i>
22、;0) i-; TMDAT = 1; i+; i+; void tmstart (void) / ds1820 start convert tmreset (); tmpre (); dmsec (1); tmwbyte (0xcc); / skip rom tmwbyte (0x44); / convertunsigned char tmrtemp (void) / read temp tmreset (); tmpre (); dmsec (1); tmwbyte (0xcc); / skip rom tmwbyte (0xbe); / convert a = tmrbyte (); /
23、LSB b = tmrbyte (); / MSBresult=a+b*256;return(result);bit tmrbit1 (void) / read one bit unsigned int i; bit dat; TMDAT1 = 0; i+; TMDAT1 = 1; i+; i+; dat = TMDAT1; i = 8; while (i>0) i-; return (dat);unsigned char tmrbyte1 (void) / read one byte unsigned char i,j,dat; dat = 0; for (i=1;i<=8;i+
24、) j = tmrbit1 (); dat = (j << 7) | (dat >> 1); return (dat);void tmwbyte1 (unsigned char dat) / write one byte unsigned int i; unsigned char j; bit testb; for (j=1;j<=8;j+) testb = dat & 0x01; dat = dat >> 1; if (testb) TMDAT1 = 0; / Write 1 i+; i+; TMDAT1 = 1; i = 8; while
25、(i>0) i-; else TMDAT1 = 0; / Write 0 i = 8; while (i>0) i-; TMDAT1 = 1; i+; i+; void tmstart1 (void) / ds1820 start convert tmreset1 (); tmpre1 (); dmsec (1); tmwbyte1 (0xcc); / skip rom tmwbyte1 (0x44); / convertunsigned char tmrtemp1 (void) / read temp tmreset1 (); tmpre1 (); dmsec (1); tmwb
26、yte1 (0xcc); / skip rom tmwbyte1(0xbe); / convert a = tmrbyte1 (); / LSB b = tmrbyte1(); / MSBresult1=a+b*256;return(result1);void delay_50us() /延时50us,不同的晶振,有差异,读者可根据实际情况自定参数 uchar i; for(i=0;i<6;i+); void delay_8us()/延时8us uchar i; for(i=0;i<1;i+); void delay_50ms()/延时50ms uchar i,j; for(j=0
27、;j<50;j+) for(i=0;i<125;i+); void send(uchar sebuf)/发送一个字节结束时,7289的CS继续使能 uchar i; com_data=sebuf; CS=0;CLK=0; delay_50us(); for(i=0;i<8;i+) delay_8us(); DIO=mos_bit; CLK=1; delay_8us(); com_data=com_data<<1; CLK=0; DIO=0;/改为应该更好; void receive()/接收一个字节结束时,7289的CS不使能 uchar i; CLK=1; delay_50us(); for(i=0;i<8;i+) com_data=com_data<<1; low_bit=DIO; CLK=1; delay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车行业信息员年终总结
- 防自然灾害安全教育知识
- 支气管哮喘的护理方法
- 2025年中国油泵电机市场调查研究报告
- 2025年中国打火机包装盒市场调查研究报告
- 2025年中国存折折印机市场调查研究报告
- 2025年中国卡拉胶火腿粉市场调查研究报告
- 2025年中国医院护理系统传呼机市场调查研究报告
- 国资投资协议合同协议
- 租厂房场地合同协议书模板
- CJ/T 156-2001 沟槽式管接头
- 安徽省合肥一六八玫瑰园校2024年中考二模物理试题含解析
- 公交车辆轻量化与节能技术
- 历史类常识考试100题及完整答案
- 医疗机构执业登记汇报
- 群文阅读《杜甫诗三首》(公开课课件)
- 《浙江省建筑垃圾资源化利用技术导则》
- 小学生运动会安全教育课件
- 变更控制程序(包含永久变更、临时变更)
- 员工考勤培训课件
- 丰田C-HR汽车说明书
评论
0/150
提交评论