




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、程序清單:#include <reg52.h>#include <intrins.h>#include <stdio.h>#define uchar unsigned charsbit TMDAT = P14;/兩個(gè)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; /保存輸入的數(shù)字 in
2、t key=7; /保存數(shù)碼管號int qiehuan=0; /控制屏幕顯示溫度或者參數(shù)int choose=0; /保存正在使用的DS18B20號int max1=23; /一號通道的報(bào)警上下限值int min1=5;int upper1=22; /一號通道的預(yù)定溫度值int lower1=18; int max2=23; /二號通道的報(bào)警上下限值int min2=5;int upper2=22; /二號通道的預(yù)定溫度值int lower2=18; unsigned char buffer116=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0
3、9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f;/控制符,用于顯示不帶小數(shù)點(diǎn)的數(shù)字unsigned char buffer216=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f;/控制符,用于顯示帶小數(shù)點(diǎn)的數(shù)字unsigned char turn8=0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87;/控制符,用于選定數(shù)碼管號unsigned int result,result1;/保存十六進(jìn)制的溫度值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);/用于修改參數(shù)值voi
5、d xianshi(void);/將修改的參數(shù)值顯示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) /將通道一的溫度轉(zhuǎn)換為十進(jìn)制 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; /通道一的十進(jìn)制溫度 if(temperature>upper1)
7、/通道一溫度控制 COLD=1; HEAT=0; /超過預(yù)定溫度的上限,啟動(dòng)小風(fēng)扇 else if(temperature<lower1) COLD=0; HEAT=1; /低于預(yù)定溫度的下限,啟動(dòng)小燈泡 else COLD=0; HEAT=0; if(temperature>max1|temperature<min1) ALARM=0; /高于或低于設(shè)定溫度的上下限,則報(bào)警 else ALARM=1; elsedmsec(1); /通道二工作tmstart1 (); dmsec(1000);tmrtemp1 (); reset(); if(result1>0xf800
8、) /將通道二的溫度轉(zhuǎn)換為十進(jìn)制 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; /通道二的十進(jìn)制溫度if(temperature1>upper2) /通道二溫度控制 COLD1=1; HEAT1=0; /超過預(yù)定溫度的上限,啟動(dòng)小風(fēng)扇 else if(temperature1<lower
9、2) COLD1=0; HEAT1=1; /低于預(yù)定溫度的下限,啟動(dòng)小燈泡 else COLD1=0; HEAT1=0; if(temperature1>max2|temperature<min2) ALARM=0; /高于或低于設(shè)定溫度的上下限,則報(bào)警 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) /顯示參數(shù)值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); /第一個(gè)字節(jié),讀取鍵值命令字 delay_50us(); receive();/第二個(gè)字節(jié),讀取鍵值,存放在變量rebuf中 delay_50us(); switch(rebuf)case 0x3F: /按鍵S1,選擇一路choose=0;send(0x88);/第一個(gè)字節(jié),閃爍控制命令字delay_50us();send(0xF0);/第二個(gè)字節(jié),設(shè)置為閃爍CS=1; break;case 0x3E:/按鍵S2, 選擇二路choose=1;send(0x88);/第一個(gè)字節(jié),閃爍控制命令字delay_50us();send(0x0
15、F);/第二個(gè)字節(jié),設(shè)置為閃爍CS=1; break;case 0x36: /按鍵S4,開始修改qiehuan=1;key=7;CS=1; break; case 0x37:/選擇確定qiehuan=0;CS=1; break;case 0x27: /輸入數(shù)字"0"key+;num=0;fuzhi();xianshi();CS=1; break; case 0x26: /輸入數(shù)字"1" key+;num=1;fuzhi();xianshi();CS=1; break; case 0x1F: /輸入數(shù)字"2" key+;num=2;fu
16、zhi();xianshi();CS=1; break; case 0x1E: /輸入數(shù)字"3" key+;num=3;fuzhi();xianshi();CS=1; break; case 0x17: /輸入數(shù)字"4" key+;num=4;fuzhi();xianshi();CS=1; break; case 0x16: /輸入數(shù)字"5"key+;num=5;fuzhi();xianshi();CS=1; break; case 0x0F: /輸入數(shù)字"6" key+;num=6;fuzhi();xianshi
17、();CS=1; break; case 0x0E: /輸入數(shù)字"7" key+;num=7;fuzhi();xianshi();CS=1; break; case 0x07: /輸入數(shù)字"8" key+;num=8;fuzhi();xianshi();CS=1; break; case 0x06: /輸入數(shù)字"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 延時(shí) 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() /延時(shí)50us,不同的晶振,有差異,讀者可根據(jù)實(shí)際情況自定參數(shù) uchar i; for(i=0;i<6;i+); void delay_8us()/延時(shí)8us uchar i; for(i=0;i<1;i+); void delay_50ms()/延時(shí)50ms uchar i,j; for(j=0
27、;j<50;j+) for(i=0;i<125;i+); void send(uchar sebuf)/發(fā)送一個(gè)字節(jié)結(jié)束時(shí),7289的CS繼續(xù)使能 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;/改為應(yīng)該更好; void receive()/接收一個(gè)字節(jié)結(jié)束時(shí),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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中英語人教版(2019)必修2課時(shí)分層作業(yè)9 -Comprehending
- 水廠培訓(xùn)課件
- 2025年湖北省中考道德與法治真題(原卷版)
- 音樂課件制作培訓(xùn)心得
- 基金考試培訓(xùn)課件
- 學(xué)校勵(lì)志獎(jiǎng)學(xué)金申請書
- 發(fā)函的授權(quán)委托書
- 小組語文趣味題目及答案
- 小學(xué)英雄故事題目及答案
- 江蘇中煙工業(yè)公司真題2024
- 2025年公路水運(yùn)工程重大事故隱患判定標(biāo)準(zhǔn)
- 車間物料員員試題及答案
- 2025國內(nèi)外虛擬電廠實(shí)踐經(jīng)驗(yàn)分析及高質(zhì)量發(fā)展相關(guān)建議報(bào)告-國網(wǎng)能源院
- 錨桿錨固質(zhì)量無損檢測技術(shù)規(guī)程
- 老年癡呆健康知識講座課件
- 2025年中考語文二輪復(fù)習(xí):散文閱讀 專題練習(xí)題(含答案)
- 云南楚雄州金江能源集團(tuán)有限公司招聘筆試題庫2025
- 高中生物2015-2024年10年高考真題專題分類匯編-專題14體液調(diào)節(jié)考點(diǎn)2激素調(diào)節(jié)的過程
- 2024年四川省成都市中考地理試卷(含答案與解析)
- 典當(dāng)行內(nèi)部基本管理制度
- 2024年內(nèi)蒙古呼和浩特中考滿分作文《留在記憶里的芬芳》
評論
0/150
提交評論