下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)學(xué)創(chuàng)新研究探索
- 大學(xué)生就業(yè)協(xié)議書(shū)(2篇)
- 2024年跨境電子商務(wù)平臺(tái)建設(shè)與運(yùn)營(yíng)合同
- 2025年電子POS機(jī)租賃及系統(tǒng)維護(hù)一體化合同3篇
- 電梯維保承包合同
- 簡(jiǎn)單的股份轉(zhuǎn)讓協(xié)議書(shū)范本
- 2024年麻石欄桿工程監(jiān)理合同
- 1 我們愛(ài)整潔 ( 說(shuō)課稿)-2023-2024學(xué)年道德與法治一年級(jí)下冊(cè)統(tǒng)編版
- 2024年版物業(yè)管理服務(wù)合同詳細(xì)條款
- 《勞動(dòng)合同法》87條
- 《IT企業(yè)介紹》課件
- (2024)湖北省公務(wù)員考試《行測(cè)》真題及答案解析
- 《抽搐的鑒別與處理》課件
- 自來(lái)水廠建設(shè)項(xiàng)目可行性研究報(bào)告
- 唾液酸在病毒感染免疫中的功能-洞察分析
- 工程監(jiān)理行業(yè)綜合信息平臺(tái)企業(yè)端操作手冊(cè)
- 質(zhì)量安全總監(jiān)和質(zhì)量安全員考核獎(jiǎng)懲制度
- 2024年白山客運(yùn)資格證題庫(kù)
- 土地成片開(kāi)發(fā)運(yùn)營(yíng)模式與案例
- 快樂(lè)讀書(shū)吧:中國(guó)民間故事(專項(xiàng)訓(xùn)練)-2023-2024學(xué)年五年級(jí)語(yǔ)文上冊(cè)(統(tǒng)編版)
- 成品油零售經(jīng)營(yíng)批準(zhǔn)證書(shū)變更、補(bǔ)辦、到期換證申請(qǐng)表
評(píng)論
0/150
提交評(píng)論