freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

精品--基于89s51單片機(jī)的ds18b20數(shù)字溫度計(jì)設(shè)計(jì)-資料下載頁

2024-12-06 03:27本頁面

【導(dǎo)讀】隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活、工作、科研、各個(gè)領(lǐng)域,其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20與AT89C51結(jié)合實(shí)現(xiàn)最簡(jiǎn)溫度檢

  

【正文】 Q=wdataamp。0x01。 delay_18B20(10)。 DQ=1。 wdata=1。 } } DS18B20 溫度轉(zhuǎn)換 void read_temp() { uchar a,b。 ds1820rst()。 ds1820wr(0xcc)。//*跳過讀序列號(hào) */ ds1820wr(0x44)。//*啟動(dòng)溫度轉(zhuǎn)換 */ ds1820rst()。 ds1820wr(0xcc)。//*跳過讀序列號(hào) */ ds1820wr(0xbe)。//*讀取溫度 */ a=ds1820rd()。 b=ds1820rd()。 tvalue=b。 tvalue=8。 tvalue=tvalue|a。 if(tvalue0x0fff) tflag=0。 27 else { tvalue=~tvalue+1。 tflag=1。 } tvalue=tvalue*()。//溫度值擴(kuò)大 10 倍,精確到 1 位小數(shù) } LED動(dòng)態(tài)顯示軟件設(shè)計(jì) 動(dòng)態(tài)顯示的原理 首先將為選的最低位置為低,選中第一位顯示器。然后再由段代碼數(shù)據(jù)輸出 0 的段代碼,即可在第一位上顯示 9 這個(gè)數(shù),這時(shí)可以將位選得第二位置為低,就選中了第二位顯示器。然后再由段代碼數(shù)據(jù)線輸出 1 的段代碼,第三位和第四位也是這樣的一個(gè)過程。如果每位的顯示時(shí)間取得的恰當(dāng),那么看到的就是 4 位一起亮的顯示效果,這樣就實(shí)現(xiàn)了動(dòng)態(tài)顯示。 ( 1)數(shù)字溫度計(jì)工作主要分為溫度采集、溫度轉(zhuǎn)化、數(shù)據(jù)處 理、顯示這幾部分。單片機(jī)對(duì)與 DS18B20主要完成對(duì)溫度的檢測(cè)和補(bǔ)償,通過 AT89S51 單片機(jī)對(duì) DS18B20 芯片的控制和數(shù)據(jù)傳輸,查詢當(dāng)前的 DS18B20 溫度采集和轉(zhuǎn)換是否完成是關(guān)鍵,并且完成對(duì)轉(zhuǎn)換后的數(shù)據(jù)的讀取。 ( 2)系統(tǒng)流程圖和程序代碼 28 圖 410 系統(tǒng)總體流程圖 ( 3)系統(tǒng)總程序 include define uchar unsigned char define uint unsigned int uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0~9 0x40,0x89,0x24,0x30,0x19,0x12,0x02,0x88,0x00,0x10,//10~19 0xbf,//20 符號(hào) 0xff,//不顯示 }。 //ds18b20 與單片機(jī)連接口 sbit DQ=P3^2。 uchar data disdata[5]。//存放溫度值 uint tvalue。//溫度值 uchar tflag。//溫度正負(fù)標(biāo)志 發(fā)跳過 ROM 指令 初始化 DS18B20 開始 讀 DS18B20 得序列號(hào) 檢測(cè) DS18B20 是否存在? 初始化 DS18B20 發(fā)送 DS18B20 編碼 度溫度數(shù)據(jù) 顯示 29 /*************************顯示程序 **************************/ void delay(uint k)//延時(shí) 1 毫秒(不夠精確的) {unsigned int i,j。 for(i=0。ik。i++) for(j=0。j100。j++)。 } //LCD 顯示函數(shù) void weixuan() { if(tvalue0) //負(fù)數(shù)處理 { disdata[0]=20。 tvalue。 tvalue。 tvalue=~tvalue。 tvalue=tvalue%1000。 disdata[1]=tvalue/100。//獲取十位 if(disdata[1]==0) disdata[1]=21。 tvalue=tvalue%100。 disdata[2]=tvalue/10。//獲取個(gè)位再 disdata[2]+=10。//加入小數(shù)點(diǎn) ,查表可得出有小數(shù)點(diǎn)的排在后 10 位,所以加 10 disdata[3]=tvalue%10。//獲取小數(shù)第一位 } else //正數(shù)的處理 { disdata[0]=tvalue/1000。 //顯示百位 if(disdata[0]==0) disdata[0]=21。//判斷溫度為正溫度且沒有上百,前面不顯示 ,查表第 12 是空 tvalue=tvalue%1000。 disdata[1]=tvalue/100。 //顯示十位 if(disdata[0]==21amp。amp。disdata[1]==0) //百位和十位同時(shí)為 0 則不顯示 disdata[1]=21。 tvalue=tvalue%100。 disdata[2]=tvalue/10。//獲取個(gè)位再 disdata[2]+=10。//加入小數(shù)點(diǎn) ,查表可得出有小數(shù)點(diǎn)的排在后 10 位,所以加 10 disdata[3]=tvalue%10。//獲取小數(shù)第一位 } } void display(uchar *lp,uchar lc)//顯示 { uchar i。 //定義變量 P0=0x00。 //端口 2 為輸出 30 P2=0xf7。 //將 P2 口的輸出 1111 0111,對(duì)應(yīng)第一個(gè)數(shù)碼管 for(i=0。ilc。i++) { //循環(huán)顯示 P0=table[lp[i]]。 //查表法得到要顯示數(shù)字的數(shù)碼段 delay(5)。 delay(5)。 delay(5)。 P0=0x00。 //清 0 端口,準(zhǔn)備顯示下位 P2=1。 //下一位數(shù)碼管 if(i==3) //檢測(cè)顯示完 4 位否,完成直接退出,不讓 P1 口再加 1,否則進(jìn)位影響到第四位數(shù)據(jù) break。 } } /******************************ds1820 程序 ***************************************/ void delay_18B20(uint i)//延時(shí) 1 微秒 { while(i)。 } /*ds1820 復(fù)位 */ void ds1820rst() { DQ = 1。 //DQ 復(fù)位 delay_18B20(4)。 //延時(shí) DQ = 0。 //DQ 拉低 delay_18B20(100)。 //精確延時(shí)大于 480us DQ = 1。 //拉高 delay_18B20(40)。 } /*從 ds18b20 中讀數(shù)據(jù) */ uchar ds1820rd() { uchar i=0。 uchar dat=0。 for(i=8。i0。i) { DQ = 0。 //給脈沖信號(hào) dat=1。 DQ = 1。 //給脈沖信號(hào) if(DQ) dat|=0x80。 31 delay_18B20(10)。 } return(dat)。 } /*向 ds18b20 中寫數(shù)據(jù) */ void ds1820wr(uchar wdata) { uchar i=0。 for (i=8。i0。i) { DQ=0。 DQ=wdataamp。0x01。 delay_18B20(10)。 DQ=1。 wdata=1。 } } /*讀取溫度值并轉(zhuǎn)換 */ void read_temp() { uchar a,b。 ds1820rst()。 ds1820wr(0xcc)。//*跳過讀序列號(hào) */ ds1820wr(0x44)。//*啟動(dòng)溫度轉(zhuǎn)換 */ ds1820rst()。 ds1820wr(0xcc)。//*跳過讀序列號(hào) */ ds1820wr(0xbe)。//*讀取溫度 */ a=ds1820rd()。 b=ds1820rd()。 tvalue=b。 tvalue=8。 tvalue=tvalue|a。 if(tvalue0x0fff) tflag=0。 else { tvalue=~tvalue+1。 tflag=1。 } tvalue=tvalue*()。//溫度值擴(kuò)大 10 倍,精確到 1 位小數(shù) } /********************主程序 ***********************************/ 32 void main() { //初始化顯示 while(1) { read_temp()。//讀取溫度 weixuan() 。 display (uchar *lp,uchar lc) 。 } } 33 總 結(jié) 本設(shè)計(jì)利用 AT89S51 芯片控制溫度傳感器 DS18B20,再輔之以部分外圍電路實(shí)現(xiàn)對(duì)環(huán)境溫度的測(cè)控,性能穩(wěn)定,精度教高,而且擴(kuò)展性能很強(qiáng)大。由于 DS18B20 支持單總線協(xié)議,我們可以將多個(gè) DS18B20 可以并聯(lián)到 3 根或 2 根線上, CPU 只需一根端口線就能與諸多 DS18B20 通信,占用較少的微處理器的端口就可以實(shí)現(xiàn)多點(diǎn)測(cè)溫監(jiān)控系統(tǒng)。由于 DS18B20的測(cè)量精度只有177。 度, 往往很多場(chǎng)合需要更加精確的溫度,在所測(cè)溫度精度不變的基礎(chǔ)上必須對(duì)數(shù)據(jù)進(jìn)行校正。由于 DS18B20 是基于帶隙結(jié)構(gòu)的數(shù)字式溫度傳感器, PN 結(jié)增量電壓正比于 IC 絕對(duì)溫度( PTAT),它的測(cè)溫精度較高 ,但存在著一定的誤差 .不過 ,其誤差在時(shí)間和外部環(huán)境變化的條件下 ,保持相當(dāng)高的穩(wěn)定性。針對(duì)這一特性 ,基于線性插補(bǔ)的數(shù)學(xué)思想 ,利用 DSP技術(shù) ,對(duì)其進(jìn)行誤差校正補(bǔ)償 .這種誤差校正的補(bǔ)償方法 ,不需增加硬件電路 ,計(jì)算方法簡(jiǎn)單 ,軟件費(fèi)用也很小 ,既提高了測(cè)量精度 ,又不需增加成本。它充分利用監(jiān)控計(jì)算機(jī)的處理能力,在監(jiān)控計(jì)算機(jī)上用 線性插補(bǔ)的數(shù)學(xué)方法對(duì)其進(jìn)行誤差校正補(bǔ)償,能輕易地將其提高其精度。 這次的課程設(shè)計(jì)中,我真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次課程設(shè)計(jì)中的最大收獲。 34 致 謝 感謝 。。 35 參考文獻(xiàn) ( 1)何立民 .《單片機(jī)高級(jí)教程》航空航天大學(xué)出版社, 2021 ( 2)李朝青 .《單片機(jī)原理與接口技術(shù)》航 空航天大學(xué)出版社, 1999 ( 3)張毅剛 .《 MCS51 單片機(jī)應(yīng)用設(shè)計(jì)》哈爾濱工業(yè)大學(xué)出版社, 1997 ( 4)王福瑞 .《單片機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全》航空航天大學(xué)出版社, 1998 ( 5)馬忠梅 .《單片機(jī)的 C 語言應(yīng)用程序設(shè)計(jì)(第 4 版)》航空航天大學(xué)出版社, 2021 (6) 張萍 . 基于數(shù)字溫度計(jì) DS18B20 的溫度測(cè)量?jī)x的開發(fā)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1