




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本程序?yàn)閐s18b20的多路溫度采集程序,是我自己參考其他程序后改寫(xiě)而成,可顯示4路正負(fù)溫度值,并有上下限溫度報(bào)警(聲音、燈光報(bào)警)。親測(cè),更改端口即可使用。(主要器件:51單片機(jī),ds18b20,lcd顯示器)附有proteus仿真圖,及序列號(hào)采集程序/*上限62度 下限-20度*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit ds=P11;sbit rs=P14;sbit e=P16;sbit sp=P10;sbit d1=P12;sbit d2=P13;uchar lcdro
2、m48=0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e, 0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9, 0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0, 0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7;unsigned char code table0="TEMPERARTURE:U "unsigned char code table1="0123456789ABCDEF"int f4;int tvalue;float ft
3、value;uint warnl=320;uint warnh=992;/*lcd程序*/void delayms(uint ms)/延時(shí)uint i,j;for(i=ms;i>0;i-)for(j=110;j>0;j-);void wrcom(uchar com)/寫(xiě)指令delayms(1);rs=0;P3=com;delayms(1);e=1;delayms(1);e=0;void wrdat(uchar dat)/寫(xiě)數(shù)據(jù)rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;void lcdinit()/初始化lcddelayms(15);
4、wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5);void display(uchar *p)/顯示while(*p!='0')wrdat(*p);p+;delayms(1);displayinit()/初始化顯示lcdinit();wrcom(0x80);display(table0);/*ds18b20程序*/void dsrst()/ds18b20復(fù)位uint i;ds=0;i=103;while(i>0)i-;ds=1;i=4;wh
5、ile(i>0)i-;bit dsrd0()/讀一位數(shù)據(jù)uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i>0)i-;return(dat);uchar dsrd()/讀1個(gè)字節(jié)數(shù)據(jù)uchar i,j,dat;dat=0;for(i=8;i>0;i-)j=dsrd0();dat=(j<<7)|(dat>>1);return(dat);void dswr(uchar dat)/寫(xiě)數(shù)據(jù)uint i;uchar j;bit testb;for(j=8;j>0;j-)testb=dat&0x0
6、1;dat=dat>>1;if(testb)ds=0;i+;i+;ds=1;i=8;while(i>0)i-;elseds=0;i=8;while(i>0)i-;ds=1;i+;i+;void tmstart()/初始化ds18b20sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);void read_dealtemp()/讀取并處理溫度uchar i,j,t;uchar a,b;for(j=0;j<4;j+)dsrst();delayms(1);dswr(0x55);for(i=0;i<8;i+
7、)dswr(lcdromji);/發(fā)送64位序列號(hào)dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0)d1=1;tvalue=tvalue+1;wrcom(0xc0);wrdat(0x2d);if(tvalue>warnl)d2=0;sp=0;elsed2=1;sp=1;elsed2=1;wrcom(0xc0);wrdat(' ');if(tvalue>warnh)d1=0;sp=0;elsed1=1;sp=1;if(j=0)wrcom(0x8e)
8、; wrdat('2');if(j=1)wrcom(0x8e);wrdat('3');if(j=2)wrcom(0x8e); wrdat('4');if(j=3)wrcom(0x8e); wrdat('5');ftvalue=tvalue*0.0625;tvalue=ftvalue*10+0.5;ftvalue=ftvalue+0.05;fj=tvalue;/溫度擴(kuò)大十倍,精確到一位小數(shù)tvalue=fj;t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1t);/顯示百位 t=tvalue%10
9、00/100;wrdat(table1t);/顯示十位t=tvalue%100/10;wrdat(table1t);/顯示個(gè)位wrdat(0x2e); /顯示小數(shù)點(diǎn)兒t=tvalue%10/1;wrdat(table1t);/顯示小數(shù)位 delayms(5000);/*主函數(shù)*/void main() d1=1;d2=1;sp=1;displayinit();/初始化顯示 while(1) tmstart();/初始化 read_dealtemp();/讀取溫度 /*序列號(hào)讀取程序*/#include <reg52.h>#define uchar unsigned char#def
10、ine uint unsigned intsbit DQ = P11; /溫度傳感器信號(hào)線(xiàn)sbit rs = P14; /LCD數(shù)據(jù)/命令選擇端(H/L)位聲明sbit lcden = P16; /LCD使能信號(hào)端位聲明void delay(uint z); /延時(shí)函數(shù)void DS18B20_Reset(void); /DQ18B20復(fù)位,初始化函數(shù)bit DS18B20_Readbit(void); /讀1位數(shù)據(jù)函數(shù)uchar DS18B20_ReadByte(void); /讀1個(gè)字節(jié)數(shù)據(jù)函數(shù)void DS18B20_WriteByte(uchar dat); /向DQ18B20寫(xiě)一個(gè)字
11、節(jié)數(shù)據(jù)函數(shù)void LCD_WriteCom(uchar com); /1602液晶命令寫(xiě)入函數(shù)void LCD_WriteData(uchar dat); /1602液晶數(shù)據(jù)寫(xiě)入函數(shù)void LCD_Init(); /LCD初始化函數(shù)void Display18B20Rom(char Rom); /顯示18B20序列號(hào)函數(shù)/*/* 主函數(shù) */*/void main() uchar a,b,c,d,e,f,g,h; LCD_Init(); DS18B20_Reset(); delay(1); DS18B20_WriteByte(0x33); delay(1); a = DS18B20_Rea
12、dByte(); b = DS18B20_ReadByte(); c = DS18B20_ReadByte(); d = DS18B20_ReadByte(); e = DS18B20_ReadByte(); f = DS18B20_ReadByte(); g = DS18B20_ReadByte(); h = DS18B20_ReadByte(); LCD_WriteCom(0x80+0x40); Display18B20Rom(h); Display18B20Rom(g); Display18B20Rom(f); Display18B20Rom(e); Display18B20Rom(d)
13、; Display18B20Rom(c); Display18B20Rom(b); Display18B20Rom(a); while(1);/*/* 延時(shí)函數(shù):void delay() */* 功能:延時(shí)函數(shù) */*/void delay(uint z)/延時(shí)函數(shù) uint x,y; for( x = z; x > 0; x- ) for( y = 110; y > 0; y- );/*/* DS18B20函數(shù):void DS18B20_Reset() */* 功能:復(fù)位18B20 */*/void DS18B20_Reset(void)/DQ18B20復(fù)位,初始化函數(shù) uint
14、 i; DQ = 0; i = 103; while( i > 0 ) i-; DQ = 1; i = 4; while( i > 0 ) i-;/*/* DS18B20函數(shù):void DS18B20_Readbit() */* 功能:讀1個(gè)字節(jié)數(shù)據(jù)函數(shù) */*/bit DS18B20_Readbit(void) /讀1位數(shù)據(jù)函數(shù) uint i; bit dat; DQ = 0; i+; /i+起延時(shí)作用 DQ = 1; i+; i+; dat = DQ; i = 8; while( i > 0 )i-; return( dat );/*/* DS18B20函數(shù):void D
15、S18B20_ReadByte() */* 功能:讀1個(gè)字節(jié)數(shù)據(jù)函數(shù) */*/uchar DS18B20_ReadByte(void) /讀1個(gè)字節(jié)數(shù)據(jù)函數(shù) uchar i,j,dat; dat = 0; for( i = 1; i <= 8; i+ ) j = DS18B20_Readbit(); dat = ( j << 7 ) | ( dat >> 1 ); return(dat);/*/* DS18B20函數(shù):void DS18B20_WriteByte() */* 功能:向DQ18B20寫(xiě)一個(gè)字節(jié)數(shù)據(jù)函數(shù) */*/void DS18B20_WriteBy
16、te(uchar dat) /向DQ18B20寫(xiě)一個(gè)字節(jié)數(shù)據(jù)函數(shù) uint i; uchar j; bit testb; for( j=1; j<=8; j+) testb = dat&0x01; dat= dat>>1; if(testb) /寫(xiě)1 DQ = 0; i+;i+; DQ = 1; i = 8;while(i>0)i-; else DQ = 0; /寫(xiě)0 i = 8;while(i>0)i-; DQ = 1; i+;i+; /*/* LCD函數(shù):void LCD_WriteCom() */* 功能:向LCD寫(xiě)入命令 */*/void LCD_
17、WriteCom(uchar com) rs = 0; P3= com; delay(5); lcden = 0; delay(5); lcden = 1; delay(5); lcden = 0;/*/* LCD函數(shù):void LCD_WriteData(uchar dat) */* 功能:向LCD寫(xiě)入數(shù)據(jù) */*/void LCD_WriteData(uchar dat) rs = 1; /選擇LCD為寫(xiě)入數(shù)據(jù)狀態(tài) lcden = 0; P3= dat; /將待寫(xiě)入數(shù)據(jù)放到總線(xiàn)上 delay(5); lcden = 1; /給LCD使能端一個(gè)脈沖 delay(5); /信號(hào)將之前放到總線(xiàn)上
18、 lcden = 0; /的數(shù)據(jù)寫(xiě)入LCD delay(5);/*/* LCD函數(shù):void LCD_Init() */* 功能:初始化LCD,設(shè)定LCD的初始狀態(tài) */*/void LCD_Init() LCD_WriteCom(0x38); /LCD顯示模式設(shè)定 delay(15); LCD_WriteCom(0x08); /關(guān)閉LCD顯示 delay(3); LCD_WriteCom(0x01); /LCD顯示清屏 delay(3); LCD_WriteCom(0x06); /設(shè)定光標(biāo)地址指針為自動(dòng)加1 delay(3); LCD_WriteCom(0x0c); /打開(kāi)LCD顯示,但不顯示光標(biāo)/*/* */* 顯示18B20序列號(hào) */* */*/void Display18B20Rom(char Rom) uchar h,l; l = Rom & 0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓物業(yè)管理管理制度
- 密室逃脫運(yùn)營(yíng)管理制度
- 化工車(chē)間怎樣管理制度
- 帳篷露營(yíng)改造方案(3篇)
- 沉井流砂處理方案(3篇)
- 國(guó)際學(xué)校員工管理制度
- 農(nóng)村門(mén)面開(kāi)發(fā)方案(3篇)
- 工地現(xiàn)場(chǎng)統(tǒng)籌管理制度
- 宿舍木門(mén)維修方案(3篇)
- 商城疫情期間管理制度
- 2025-2030中國(guó)合成生物學(xué)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析研究報(bào)告
- 2025至2030年酒制品紙托盤(pán)項(xiàng)目投資價(jià)值分析報(bào)告
- 2024園藝師考試田間管理試題及答案
- 2025年安徽物理中考模擬練習(xí)卷(含答案)
- 2024年全球及中國(guó)便攜式步態(tài)和姿勢(shì)分析系統(tǒng)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 畢業(yè)設(shè)計(jì)(論文)-垂直循環(huán)立體車(chē)庫(kù)機(jī)械設(shè)計(jì)
- 2025-2030中國(guó)劃船機(jī)行業(yè)市場(chǎng)發(fā)展分析及前景趨勢(shì)與投資研究報(bào)告
- 2024年度無(wú)人駕駛技術(shù)課件
- 三菱D700變頻器說(shuō)明書(shū)
- 高校實(shí)驗(yàn)室安全教育
- 手術(shù)患者評(píng)估制度理論考核試題
評(píng)論
0/150
提交評(píng)論