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

正文內(nèi)容

基于51單片機(jī)及ds18b20溫度傳感器的數(shù)字溫度計(jì)設(shè)計(jì)(完整版)

  

【正文】 基于51單片機(jī)及DS18b20溫度傳感器的數(shù)字溫度計(jì)設(shè)計(jì)摘 要本設(shè)計(jì)采用的主控芯片是ATMEL公司的AT89S52單片機(jī),數(shù)字溫度傳感器是DALLAS公司的DS18B20。本設(shè)計(jì)屬于一種多功能溫度計(jì),溫度測(cè)量范圍是55℃到125℃。顯示是用4位共陰極LED數(shù)碼管實(shí)現(xiàn)溫度顯示,LED數(shù)碼管的優(yōu)點(diǎn)是顯示數(shù)字比較大,查看方便??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。溫度報(bào)警觸發(fā)器TH和TL,可通過(guò)軟件寫入戶報(bào)警上下限。高速暫存RAM的第8字節(jié)保留未用,表現(xiàn)為全邏輯1。表22 DS18B20輸出的溫度值溫度值二進(jìn)制輸出十六進(jìn)制輸出+125℃0000 0111 1101 000007D0h+85℃0000 0101 0101 00000550h+℃0000 0001 1001 00010191h+℃0000 0000 1010 001000A2h+℃0000 0000 0000 10000008h0℃0000 0000 0000 00000000h℃1111 1111 1111 1000FFF8h℃1111 1111 0101 1110FF5Eh℃1111 1110 0110 1111FF6Fh55℃1111 1100 1001 0000FC90hDS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。報(bào)警模塊是由一個(gè)PNP型的三極管9012驅(qū)動(dòng)的5V蜂鳴器,和一個(gè)加一限流電阻的發(fā)光二極管組成的。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。圖29 報(bào)警電路原理圖3 軟件設(shè)計(jì) DS18B20程序設(shè)計(jì) DS18B20傳感器操作流程根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:? 每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位操作? 復(fù)位成功后發(fā)送一條ROM指令? 最后發(fā)送RAM指令這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。跳過(guò) ROM0xCC忽略 64 位 ROM 地址,直接向 DS1820 發(fā)溫度變換命令。讀供電方式0xB4讀DS1820的供電模式。有兩種類型的寫時(shí)序:寫“0”時(shí)序,寫“1”時(shí)序。如圖32的下半部分。圖36 按鍵程序流程圖4實(shí)物制作及調(diào)試制作好的實(shí)物如圖41所示。此次單片機(jī)設(shè)計(jì)也為我們以后進(jìn)行更復(fù)雜的單片機(jī)系統(tǒng)設(shè)計(jì)提供了寶貴的經(jīng)驗(yàn)。參考文獻(xiàn)[1] (第三版).北京:清華大學(xué)出版社, [2] 余發(fā)山,:中國(guó)礦業(yè)大學(xué)出版社, [3] :人民郵電出版社, [4] :人民郵電出版社, [5] 于永,戴佳,(第2版).北京:電子工業(yè)出版社, 附1 源程序代碼/********************************************************************* 程序名。 //s1標(biāo)志位用于上下限查看時(shí)的顯示void display1(uint z)。 //按鍵掃面函數(shù) display(temp,temp_d*)。 //uchar temp=0。 for(i=t。 //延時(shí)480μs左右 DQ=1。i0。 ds18b20_delayus(10)。_nop_()。 ds18b20_init()。 //向DS18B20發(fā)跳過(guò)讀ROM命令 ds18b20_write(0xbe)。} //將上限溫度符號(hào)標(biāo)志位置‘1’表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 //i為0,表示讀取的溫度是正溫度,設(shè)立正溫度標(biāo)記 temp=((a4)|(b4))。 //整數(shù)部分 a=(aamp。 //向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?和3(TH和TL)命令 ds18b20_write(max)。} //當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 if((temp+temp_d*)maxamp。} } if(f==1) //若測(cè)量值是負(fù)值 { if((temp+temp_d*)=min)//當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 {w=1。} //當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警 } if(f==0){w=1。 //定義全局變量i用于不同功能模式的選擇,‘0’正常模式,‘1’上限調(diào)節(jié)模式,‘2’下限調(diào)節(jié)模式uchar a=0。i) for(j=120。}//當(dāng)溫度值大于125時(shí)不上調(diào) if(a==2){if(count125) count=125。 if(key3==0) //K3按按鍵時(shí)消抖 { beer=1。 keyscan_delay(10)。 //關(guān)定時(shí)器1 k4=0。break。}//顯示上限溫度 else if(a==2amp。 if(a==1) {if(max55) f_max=0。 if(key2==0) { beer=1。 if(key3==0) { beer=1。TR1=0。 __ds18b20_display_H__ * 功 能: ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件,通過(guò)定時(shí)器0延時(shí)實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示* 編程者:zicreate* 編程時(shí)間:2009/10/2 **********************************************************************/ifndef __ds18b20_display_H__ //定義頭文件define __ds18b20_display_H__define uint unsigned int //變量類型宏定義,用uint表示無(wú)符號(hào)整形(16位)define uchar unsigned char //變量類型宏定義,用uchar表示無(wú)符號(hào)字符型(8位)sbit wei1=P2^4。 //依次是‘不顯示’‘.’‘’‘H’‘L’/*****************************延時(shí)子函數(shù)******************************/void display_delay(uint t) //延時(shí)1ms左右{ uint i,j。 //定時(shí)器賦初值,定時(shí)50ms TL0=0xb0。if(w==1){beer=1。led=1。 }}void selsct_2(bit f,uchar k) //消除十位的0顯示,及正負(fù)溫度的顯示選擇{ if(f==0) //若為正溫度,百位十位均為0則不顯示十位,否則顯示十位 { if((k/100==0)amp。i4。 //開(kāi)第一個(gè)數(shù)碼管 break。 } wei1=0。 if(s1==1) selsct_2(f_max,max)。 break。 } wei1=0。 for(i=0。 wei1=1。 case 2:P0=temperature3[2]。 wei2=0。 wei4=1。 wei2=0。 case 1:P0=temperature3[2]。i++) //‘z’是顯示遍數(shù)的設(shè)定 { for(j=0。 wei3=0。}//若a=0則在第四個(gè)數(shù)碼管上顯示測(cè)量溫度的小數(shù)位 if(a==1) //若a=1則在第四個(gè)數(shù)碼管上顯示上限報(bào)警溫度的個(gè)位 { if(s==0) P0=temperature1[max%10]。 else P0=temperature3[0]。 wei4=0。} //若a=0則在第二個(gè)數(shù)碼管上顯示測(cè)量溫度的十位或‘’ if(a==1) //若a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或‘’ { if(s==0) selsct_1(f_max,max)。} //若a=0則在第一個(gè)數(shù)碼管上顯示測(cè)量溫度的百位或‘’ if(a==1) { P0=temperature3[3]。(k%100/10==0)) P0=temperature3[0]。 //num歸0,重新定開(kāi)始定時(shí)1s s1=0。}else{beer=1。 //開(kāi)總中斷 ET1=1。i0。 //sbit wei3=P2^6。 keyscan_delay(10)。 //選擇下限顯示 TR1=1。 //選擇上限顯示 TR1=1。}//當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 if(a==2) {if(min55) f_max=0。v==1) //a=2選擇顯示下限溫度且v=1時(shí)選擇上下限溫度減功能 {led=1。 } } while(key1==0)。 //在正常模式下選擇KK3的查看上下限報(bào)警溫度功能 store_t()。 TR1=1。 //每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1 if(a==1){if(count0) count=0。 //每按一下K2溫度下調(diào)1 if(a==1){if(count55) count=55。j)。 //K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能bit v=0。} //若測(cè)量值是正值時(shí)報(bào)警 } } }endif/*********************************************************************** 程序名。} if((temp+temp_d*)min)//當(dāng)測(cè)量值小于最小值時(shí)不報(bào)警 {w=0。(temp+temp_d*)min) {w=0。 //向暫存器TL(下限溫度暫存器)寫溫度 ds18b20_write(0xff)。 //小數(shù)部分 temp_d=a。0x0f)。0x80)==0x80)//若讀取的下限溫度的最高位(符號(hào)位)為‘1’表明是負(fù)溫度 {f_min=1。 //讀內(nèi)部RAM (LSB) b=ds18b20_read()。//向DS18B20發(fā)跳過(guò)讀ROM命令 ds18b20_write(0x44)。0x01。 //返回讀取的值}/*************************ds18b20字節(jié)寫函數(shù)**************************/void ds18b20_write(uchar d) // ds18b20字節(jié)寫{ uchar i。 //d左移一位,低位先發(fā); DQ = 0。
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1