已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序清单:#include #include #include #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; /保存输入的数字 int 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,0x09,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;uchar 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);/用于修改参数值void 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(choose=0) /通道一工作dmsec(1);tmstart (); dmsec(1000);tmrtemp (); reset(); if(result0xf800) /将通道一的温度转换为十进制 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(temperatureupper1) /通道一温度控制 COLD=1; HEAT=0; /超过预定温度的上限,启动小风扇 else if(temperaturemax1|temperature0xf800) /将通道二的温度转换为十进制 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(temperature1upper2) /通道二温度控制 COLD1=1; HEAT1=0; /超过预定温度的上限,启动小风扇 else if(temperature1max2|temperaturemin2) 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(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(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();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(buffer1lower1%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(buffer1upper2%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)case 0x3F: /按键S1,选择一路choose=0;send(0x88);/第一个字节,闪烁控制命令字delay_50us();send(0xF0);/第二个字节,设置为闪烁CS=1; break;case 0x3E:/按键S2, 选择二路choose=1;send(0x88);/第一个字节,闪烁控制命令字delay_50us();send(0x0F);/第二个字节,设置为闪烁CS=1; break;case 0x36: /按键S4,开始修改qiehuan=1;key=7;CS=1; break; case 0x37:/选择确定qiehuan=0;CS=1; break;case 0x27: /输入数字0key+;num=0;fuzhi();xianshi();CS=1; break; case 0x26: /输入数字1 key+;num=1;fuzhi();xianshi();CS=1; break; case 0x1F: /输入数字2 key+;num=2;fuzhi();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: /输入数字5key+;num=5;fuzhi();xianshi();CS=1; break; case 0x0F: /输入数字6 key+;num=6;fuzhi();xianshi();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 (unsigned int count) / mSec Delay 11.0592 Mhz unsigned int i; / 1MS 延时 while (count-) for (i=0;i0) i-; / Approx 900 uS TMDAT = 1; i = 4; while (i0) i-;void tmreset1 (void) / Reset TX unsigned int i; TMDAT1 = 0; i = 103; while (i0) i-; / Approx 900 uS TMDAT1 = 1; i = 4; while (i0) i-;void tmpre (void) / Wait for Presence RX unsigned int i; while (TMDAT); while (TMDAT); i = 4; while (i0) i-;void tmpre1 (void) / Wait for Presence RX unsigned int i; while (TMDAT1); while (TMDAT1); i = 4; while (i0) i-;bit tmrbit (void) / read one bit unsigned int i; bit dat; TMDAT = 0; i+; TMDAT = 1; i+; i+; dat = TMDAT; i = 8; while (i0) 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 1); return (dat);void tmwbyte (unsigned char dat) / write one byte unsigned int i; unsigned char j; bit testb; for (j=1;j 1; if (testb) TMDAT = 0; / Write 1 i+; i+; TMDAT = 1; i = 8; while (i0) i-; else TMDAT = 0; / Write 0 i = 8; while (i0) 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 (); / 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 (i0) i-; return (dat);unsigned char tmrbyte1 (void) / read one byte unsigned char i,j,dat; dat = 0; for (i=1;i=8;i+) j = tmrbit1 (); dat = (j 1); return (dat);void tmwbyte1 (unsigned char dat) / write one byte unsigned int i; unsigned char j; bit testb; for (j=1;j 1; if (testb) TMDAT1 = 0; / Write 1 i+; i+; TMDAT1 = 1; i = 8; while (i0) i-; else TMDAT1 = 0; / Write 0 i = 8; while (i0) 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); tmwbyte1 (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;i6;i+); void delay_8us()/延时8us uchar i; for(i=0;i1;i+); void delay_50ms()/延时50ms uchar i,j; for(j=0;j50;j+) for(i=0;i125;i+); void send(uchar sebuf)/发送一个字节结束时,7289的CS继续使能 uchar i; com_data=sebuf; CS=0;CLK=0; delay_50us(); for(i=0;i8;i+) delay_8us(); DIO=mos_bit; CLK=1; delay_8us(); com_data=com_data1; CLK=0; DIO=0;/改为应该更好; void receive()/接收一个字节结束时,7289的CS不使能 uchar i; CLK=1; delay_50us(); for(i=0;i8;i+) com_data=com_data1; low_bit=DIO; CLK=1; delay_8us(); CLK=0; delay_8us(); rebuf=com_data; DIO=1; CS=1;/接收结束,7289的CS不使能 void reset(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年阜阳辅警招聘考试题库含答案详解(满分必刷)
- 2025年石家庄辅警招聘考试题库附答案详解(综合卷)
- 2025年苗栗县辅警招聘考试题库附答案详解(典型题)
- 2025年邵阳辅警协警招聘考试真题及一套参考答案详解
- 2025年鹰潭辅警协警招聘考试真题含答案详解(新)
- 2025年璧山县辅警招聘考试题库附答案详解
- 2025年邵阳辅警协警招聘考试备考题库及答案详解(名校卷)
- 2025年滨州辅警招聘考试真题含答案详解(巩固)
- 2025合作代理合同模板
- 2025年襄樊辅警招聘考试真题含答案详解
- 2025年第十届“学宪法、讲宪法”竞赛题库(含答案)
- 2025年江西省交通投资集团有限责任公司社会招聘43人笔试备考题库及答案详解(历年真题)
- 2018年国家公务员考试行测真题(地市级)
- GB/T 1927.21-2022无疵小试样木材物理力学性质试验方法第21部分:握钉力测定
- 新视野英语教程(第四版)读写教程1 单元测试卷 Unit1-4 测试卷、听力及文本答案
- 磁性护理体系构建与实践分享
- 人教版2024年新教材七年级上册生物同步练习题汇编(按章节编写含答案)
- 管理人员素质培训
- 儿科常见病试题及答案详解
- 解除代建合同协议书
- 建筑行业项目经理任职表态发言稿范文
评论
0/150
提交评论