DS18B20的溫度讀取和液晶顯示_第1頁(yè)
DS18B20的溫度讀取和液晶顯示_第2頁(yè)
DS18B20的溫度讀取和液晶顯示_第3頁(yè)
DS18B20的溫度讀取和液晶顯示_第4頁(yè)
DS18B20的溫度讀取和液晶顯示_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、TX-1 開(kāi)發(fā)板 DS18B20 的溫度讀取和液晶顯示#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code digit10="0123456789"uchar code error="Error!Check!"uchar time;uchar TL,TH,TN,TD;sbit dula=P2A6;sbit wela=P2A7;sbit lcdrs=P3A5;sbit lcden=P3A4;

2、sbit DQ=P2A2;void delayus(uint z);void delay1ms();void delaynms(uchar n);void lcd_init();void lcd_wc(uchar com);void lcd_wd(uchar dat);bit Init_DS18B20();void display_error();void display_dot();void display_temp1(uchar x);void display_temp2(uchar x);WriteOneChar(uchar dat);uchar ReadOneChar(void);vo

3、id ReadyReadTemp();void main()lcd_init();delaynms(5);display_dot();while(Init_DS18B20()=1)display_error();不斷檢測(cè)并顯示溫度讀溫度準(zhǔn)備 先讀的是溫度值低位 接著讀的是溫度值高位while(1)/delaynms(100);ReadyReadTemp(); /TL=ReadOneChar(); / TH=ReadOneChar(); /TN=TH*16+TL/16;/ 實(shí)際溫度值 =(TH*256+TL)/16, 即: TH*16+TL/16 / 這樣得出的是溫度的整數(shù)部分, 小數(shù)部分被丟棄

4、了TD=(TL%16)*10/16; / 計(jì)算溫度的小數(shù)部分, 將余數(shù)乘以 10再除以 16 取整, /這樣得到的是溫度小數(shù)部分的第一位數(shù)字( 保留 1 位小數(shù) )display_temp1(TN); /顯示溫度的整數(shù)部分display_temp2(TD); /顯示溫度的小數(shù)部分delaynms(10);void lcd_init()dula=0;wela=0;lcd_wc(0x38);delaynms(5);lcd_wc(0x38);/ 寫兩次以確保初始化成功lcd_wc(0x01);lcd_wc(0x0e);lcd_wc(0x06);lcd_wc(0x80);void lcd_wc(uch

5、ar com)lcdrs=0;P0=com;delaynms(3);lcden=1;delaynms(6);lcden=0;void lcd_wd(uchar dat)lcdrs=1;P0=dat;delaynms(3);lcden=1;delaynms(6);lcden=0;void delay1ms()unsigned char i,j;for(i=0;i<10;i+)for(j=0;j<33;j+);void delaynms(uchar n) unsigned char i;for(i=0;i<n;i+)delay1ms();bit Init_DS18B20()bit

6、 flag;DQ = 1;/for(time=0;time<2;time+); /DQ = 0;/for(time=0;time<200;time+);/480960us 的低電平復(fù)位脈沖 )DQ = 1;/for(time=0;time<20;time+);輸出存在脈沖)flag=DQ;/for(time=0;time<200;time+);/return(flag);/先將數(shù)據(jù)線拉高略微延時(shí)約6 微秒再將數(shù)據(jù)線從高拉低,要求保持 480960us略微延時(shí)約 600 微 ?( 以向 DS18B20 發(fā)出一持續(xù)釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高)/延時(shí)約30us (釋放總線后需等

7、待1560us讓DS18B20讓單片機(jī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在)延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢返回檢測(cè)成功標(biāo)志void display_error()uchar i;lcd_wc(0x80);/i = 0;/寫顯示地址,將在第 1 行第 1 列開(kāi)始顯示從第一個(gè)字符開(kāi)始顯示while(errori != '0')/只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫lcd_wd(errori); /i+;/delaynms(100); /while(1); /將字符常量寫入 LCD指向下一個(gè)字符延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明進(jìn)入死循環(huán),等待查明原因void disp

8、lay_dot() lcd_wc(0x49+0x80);/ lcd_wd('.');/寫顯示地址,將在第 2 行第 10 列開(kāi)始顯示將小數(shù)點(diǎn)的字符常量寫入 LCD延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間delaynms(50); / void display_temp1(uchar x)uchar j,k,l; /j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位j=x/100;/取百位k=(x%100)/10;/ 取十位l=x%10;/ 取個(gè)位lcd_wc(0x46+0x80);/ lcd_wd(digitj); / lcd_wd(digitk); / lcd_wd(digitl); /寫顯示地址

9、 , 將在第 2 行第 7 列開(kāi)始顯示將百位數(shù)字的字符常量寫入LCD將十位數(shù)字的字符常量寫入LCDdelaynms(50);/延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間void display_temp2(uchar x)lcd_wc(0x4a+0x80); / lcd_wd(digitx); / delaynms(50); /寫顯示地址, 將在第 2 行第 11 列開(kāi)始顯示將小數(shù)部分的第一位數(shù)字字符常量寫入 LCD延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間WriteOneChar(uchar dat)uchar i=0;for(i=0;i<8;i+)DQ =1;/_nop_();/DQ=0;/DQ=dat&

10、;0x01; /線上等待DS18B20采樣先將數(shù)據(jù)線拉高 等待一個(gè)機(jī)器周期 將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫時(shí)序 利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù),/ 并將其送到數(shù)據(jù)for(time=0;time<10;time+);/ 延時(shí)約 30us, DS18B20在拉低后的約 1560us期間從數(shù)據(jù)線上采樣DQ=1;/釋放數(shù)據(jù)線for(time=0;time<1;time+);/ 延時(shí) 3us, 兩個(gè)寫時(shí)序間至少需要 1us 的恢復(fù)期dat>>=1;/將 dat 中的各二進(jìn)制位數(shù)據(jù)右移 1 位for(time=0;time<4;time+); /uchar ReadOneCh

11、ar()稍作延時(shí) , 給硬件一點(diǎn)反應(yīng)時(shí)間unsigned char i=0;unsigned char dat; / for (i=0;i<8;i+)儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)DQ =1;_nop_();DQ = 0;/先將數(shù)據(jù)線拉高等待一個(gè)機(jī)器周期單片機(jī)從DS18B2a賣書(shū)據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序?qū)€(gè)位數(shù)字的字符常量寫入LCDdat>>=1;_nop_();/等待一個(gè)機(jī)器周期DQ = 1;/將數(shù)據(jù)線for(time=0;time<2;time+);/ if(DQ=1) dat|=0x80;/elsedat|=0x00;/for(time=0;time<8;time+);/ 期 return(dat);/void ReadyReadTemp() Init_DS18B20();/WriteOneChar(0xCC);/WriteOneChar(0x44);/for(time=0;time<100;time+);/ Init_DS18B20();/WriteOneChar(0xCC);/WriteOneChar(0xBE);/一個(gè)機(jī)器周期號(hào)線"人為"拉高,為單片機(jī)檢測(cè) DS18B20的輸出電平作準(zhǔn)備延時(shí)約6us,使主機(jī)在15us內(nèi)采樣如果讀到的數(shù)據(jù)是1 ,則將1 存入dat如果讀到的數(shù)據(jù)是0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論