/*
我是初學者,僅供參考微笑
*/#include #include #include typedef unsigned char uint8;
typedef unsigned int uint16;
sbit dq=p3^2;
sbit smg3=p1^3;sbit smg2=p1^2;
sbit smg1=p1^1;sbit smg0=p1^0;
sbit smg4=p1^4;
typedef char int8;
typedef int int16;
#define nops(); //定義空指令
//巨集定義乙個nops(乙個nops相當於4個機器週期(4個nop())
uint8 shuma[4]; uint8 fh=0;
code uint16 sum=;
void refresh() //顯示函式
}void delay(uint16 n)
/*void delay_ms(uint16 n)
*//*
* 18b20復位函式
微控制器t0時刻傳送一復位脈衝(最短為480us的低電平訊號),
接著在tl時刻釋放匯流排並進入接收狀態,ds18b20 在檢測到匯流排的上公升沿之後,
等待15-60us,接著ds18b20在t2時刻發出存在脈衝(低電平持續60-240us),如圖中虛線所示。
換句話說如果t2~t3之間訊號電平如果為低,則說明ds18b20復位成功;否則失敗。
*/void t18b20_reset()
delay(45);
flag=~dq;
} dq=1;}/*
* 18b20寫1個位元組函式
* 向1-wire匯流排上寫乙個位元組
當微控制器將匯流排t0時刻從高拉至低電平時,就產生寫時間隙。
見上圖,從t0時刻開始 15us之內應將所需寫的位送到匯流排上。
ds18b20在t0後15-60us間對匯流排取樣,若低電平寫入的位是0;若高電平,寫入的位是1。
連續寫2位間的間隙應大於1us。
*/ void write_byte(uint8 dat)
dq=1;
delay(1);
}/** 18b20讀1個位元組函式
* 從1-wire匯流排上讀取乙個位元組
當微控制器將匯流排t0時刻從高拉至低電平時,匯流排只須保持低電平4us之後,
在t1時刻將匯流排拉高,產生讀時間隙,讀時間在t1時刻後t2時刻前有效,t2距t0為15us,
也就是說,t2時刻前主機必須完成讀位 並在t0後的60us~120us內釋放匯流排。
*/uint8 read_byte()
dq=1;
return(value);}/*
* 啟動溫度轉換
三個步驟:1、復位ds18b20
2、發出skip rom命令(cch)
3、發出convert t命令(44h)
讀取溫度五個步驟 :1、復位ds18b20
2、發出skip rom命令(cch)
3、發出read命令(beh)
4、讀兩位元組的溫度
5、溫度格式轉換
*/void start_temp_sensor()
uint16 read_temp()
/** *
* 數值轉換
*/void convert()
void main()
}
51微控制器ds18b20
溫度感測器是比較簡單的外設之一,學習51微控制器都會學習ds18b20來學習51的ad轉換。ds18b20是通過iic匯流排來進行通行的,屬於比較簡單的模組之一,這裡貼出ds18b20的驅動程式,呼叫時只要直接讀取對應位址的資料即可。include temp.h void delay1ms uint...
51微控制器之DS18B20
一文讀懂ds18b20溫度感測器及程式設計 對於新手而言,ds18b20基本概念僅做了解,最重要的是利用微控制器對ds18b20進行程式設計,讀取溫度資訊,並把讀取到的溫度資訊利用數碼管,lcd1602或者上位機進行顯示 ds18b20是常用的數字溫度感測器,其輸出的是數碼訊號,具有體積小,硬體開銷...
51微控制器 溫度感測器DS18B20
溫度感測器是各種感測器中最常用的一種,早期使用的是模擬溫度感測器,如熱敏電阻,隨著環境溫度的變化,它的阻值也發生線性變化,用處理器採集電阻兩端的電壓,然後根據某個公式就可以計算出當前環境溫度。美國dallas半導體公司推出的數位化溫度感測器ds18b20採用單匯流排協議,即與微控制器介面僅需占用乙個...