版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、#include <at89x52.h>#define DO P3_7 #define SEG P0 /數(shù)碼管自左至右依次為1234位#define MS2L 0x18 /1ms的延時(shí)參數(shù)#define MS2H 0xfc#define uchar unsigned char#define uint unsigned intuchar code comm4 = 0x01,0x02,0x04,0x08;uchar code seg10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code seg_add_dici
2、mal10 = 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; uchar code seg_dicimal2 =0xc0, 0x92;uchar k = 0;uchar temp_l = 0;uchar temp_h = 0;uchar tempsign = 0;uchar hundreds = 0;uchar tens = 0;uchar ones = 0;uchar low_four = 0;/*延時(shí)以ms為單位的t時(shí)間*/void Delay(uint t) uint i; while(t-) for(i=0; i<125;
3、i+) /*us級延時(shí),延時(shí)時(shí)間約42*i*/void Delayus(uchar i) while(-i); /*產(chǎn)生復(fù)位脈沖,等待應(yīng)答信號*/void Resetpaulse() DO = 0; /拉低約600us Delayus(150); Delayus(150); DO = 1;/產(chǎn)生上升沿,延時(shí)約1560us Delayus(30); while(DO); /等待應(yīng)答信號 /*讀取數(shù)據(jù)一位*/bit Readbit() uint i = 0; bit b = 0; DO = 0; /產(chǎn)生讀時(shí)隙 i+; /維持低電平至少1us DO = 1; /1us以上后拉高 Delayus(2)
4、; /延時(shí)8us,DO下降沿15內(nèi)ds18b20輸出的數(shù)據(jù)才有效 b = DO; /讀取數(shù)據(jù) Delayus(40); /每個(gè)讀時(shí)隙至少持續(xù)60us return(b); /*讀取一個(gè)字節(jié)*/uchar Readbyte() uchar byte_read = 0; uchar i, j; for(i=0; i<8; i+) j = Readbit(); byte_read = (j<<i) | byte_read; /低位讀起 return(byte_read); /*寫一個(gè)字節(jié)*/void Writebyte(uchar byte_to_write) uchar i =
5、0; uchar j = 0; bit write_bit = 0; for(j=0; j<8; j+) write_bit = (byte_to_write & 0x01); if(write_bit = 1) /寫1 DO = 0; /產(chǎn)生寫時(shí)隙 Delayus(3); /延時(shí)15us DO = 1; /寫1 Delayus(40); /延時(shí),寫時(shí)隙不得低于60us else DO = 0; /產(chǎn)生寫時(shí)隙 Delayus(50); /延時(shí),保持低約60us120us DO = 1; i+; byte_to_write = byte_to_write >> 1; /
6、*配置ds18b20,9位分辨率 */void Configurate() EA = 0; Resetpaulse(); /發(fā)出復(fù)位脈沖,每次操作都從復(fù)位開始 Delay(1); Writebyte(0xcc); /skip room命令 Writebyte(0x4e); Writebyte(0x7f); Writebyte(0x80); Writebyte(0x1f); EA = 1;/*啟動溫度轉(zhuǎn)換*/void StartConvert() Resetpaulse(); / 發(fā)出復(fù)位脈沖,每次操作都從復(fù)位開始 Delay(1); EA = 0; Writebyte(0xcc); /skip
7、 room命令 Writebyte(0x44); /啟動溫度轉(zhuǎn)換命令 EA = 1;/*讀取溫度值*/void ReadTempreture() EA = 0; Resetpaulse(); / 發(fā)出復(fù)位脈沖,每次操作都從復(fù)位開始 Delay(1); Writebyte(0xcc); /skip room命令 Writebyte(0xbe); /讀取暫存器命令 temp_l = Readbyte(); /存儲溫度低字節(jié)值 (整數(shù)部分低四位和小數(shù)部分) temp_h= Readbyte(); /存儲溫度高字節(jié)值 (其中高五位為符號位) EA = 1;/*數(shù)據(jù)轉(zhuǎn)換*/void DigitalCon
8、vert() uchar total = 0; tempsign = (temp_h >> 7) & 0x01; /得出符號位 if(tempsign = 0) /正數(shù)的處理方法 total = (temp_h << 4)&0xf0) | (temp_l >> 4)&0x0f); /取整數(shù)位 low_four = (temp_l>>3) & 0x01; /取小數(shù)位,9位分辨率,低字節(jié)第3位為小數(shù)位,只有0、1兩種取值 hundreds = total / 100; /計(jì)算百、十、個(gè)位 tens = (total%1
9、00)/10; ones = (total%100)%10; else /負(fù)數(shù)處理 求負(fù)數(shù)補(bǔ)碼規(guī)則是,按位取反,得到反碼,加1即得補(bǔ)碼(符號位不變) tempsign = 1; total = (temp_l >> 4) & 0x0f); /取整數(shù)部分低4位 total |= (temp_h << 4) & 0xf0); /整數(shù)部分高三位和符號位 low_four = (temp_l >> 3) & 0x01; /取小數(shù)位 if(low_four = 0) /這里total位uchar型變量,所以根據(jù)最低位來確定整數(shù)取補(bǔ)規(guī)則 tota
10、l = total + 1; /最低位為0的時(shí)候,取反加1后有進(jìn)位,所以這里total要取反加1 else total = total;/最低位為1的時(shí)候,取反加1沒有進(jìn)位,所以total直接取反即可 tens = (total%100)/10; ones = (total%100)%10; /*中斷處理*/void Display()interrupt 1 EA = 0; TL0 = MS2L; TH0 = MS2H; DigitalConvert(); /數(shù)據(jù)轉(zhuǎn)換 if(tempsign = 0)/正數(shù) if(k = 0) if(hundreds = 0) /高位0消隱 P1 = 0; e
11、lse P1 = commk; SEG = seghundreds; else if(k = 1) if(tens = 0 && hundreds = 0) /高位0消隱 P1 = 0; else P1 = commk; SEG = segtens; else if(k = 2)/顯示個(gè)位,因?yàn)閭€(gè)位有小數(shù)點(diǎn),所以又定義了一個(gè)數(shù)組分開來顯示 P1 = commk; SEG = seg_add_dicimalones; /要加上小數(shù)點(diǎn)else /顯示小數(shù),0或5 P1 = commk; SEG = seg_dicimallow_four; else if(tempsign = 1) /負(fù)數(shù) if(k = 0)/顯示符號位 P1 = commk; SEG = 0xbf; else if(k = 1) if(tens = 0) P1 = 0; else P1 = commk; SEG = segtens; else if(k = 2)/顯示個(gè)位,因?yàn)楦魑挥行?shù)點(diǎn),所以分開來顯示 P1 = commk; SEG = seg_add_dicimalones; /要加上小數(shù)點(diǎn) else /顯示小數(shù),0或5 P1 = commk; SEG = seg_dicimallow_four; k+; if(k = 4) k = 0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省瀘州市瀘州高級中學(xué)校2024-2025學(xué)年七年級上學(xué)期1月期末歷史試卷(含答案)
- 湖北省部分重點(diǎn)中學(xué)2024-2025學(xué)年高三上學(xué)期第二次聯(lián)考(期末)地理試卷(含答案)
- 睡眠醫(yī)學(xué)中心:精準(zhǔn)醫(yī)療引領(lǐng)健康睡眠未來趨勢 頭豹詞條報(bào)告系列
- 2025年度不動產(chǎn)房產(chǎn)證購房合同附帶車位使用權(quán)轉(zhuǎn)讓協(xié)議3篇
- 2024版多功能辦公設(shè)備采購合同6篇
- 2024荒田承包合同范本
- 福建省南平市建陽縣徐市中學(xué)高二數(shù)學(xué)理上學(xué)期期末試卷含解析
- 2025年EPS節(jié)能建筑項(xiàng)目施工安全管理合同3篇
- 2024薪資協(xié)議書-文化創(chuàng)意產(chǎn)業(yè)創(chuàng)作者模板2篇
- 2024版幕墻施工合同范文
- 【MOOC】計(jì)算機(jī)組成原理-電子科技大學(xué) 中國大學(xué)慕課MOOC答案
- 廣東省潮州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含解析
- 老年緩和醫(yī)療
- 醫(yī)療質(zhì)量提高
- 2024年保安員資格考試題目及答案(共60題)
- 急性胰腺炎的急救處理與家庭護(hù)理要點(diǎn)課件
- 糖尿病伴消化系統(tǒng)疾病飲食
- 2023年機(jī)械員之機(jī)械員專業(yè)管理實(shí)務(wù)題庫及參考答案(a卷)
- 班組安全培訓(xùn)試題含完整答案(各地真題)
- 《論語》中的人生智慧與自我管理學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2022版義務(wù)教育物理課程標(biāo)準(zhǔn)
評論
0/150
提交評論