1. 程式人生 > 其它 >藍橋杯微控制器實訓版學習周總結1-溫度感測器DS18B20

藍橋杯微控制器實訓版學習周總結1-溫度感測器DS18B20

技術標籤:微控制器微控制器stm32

#include<reg51.h>
#include<stdio.h>
#include<math.h>
//#include"onewire.c"
//#include"onewire.h"
#define OW_SKIP_ROM 0xcc
#define DS18B20_CONVERT 0x44
#define DS18B20_READ 0xbe
 
//IC引腳定義
sbit DQ = P1^4;
 
//函式宣告
void Delay_OneWire(unsigned int t);
void
Write_DS18B20(unsigned char dat); bit Init_DS18B20(void); unsigned char Read_DS18B20(void); code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0xc6};//0~9 滅 橫槓 unsigned char dspbuft[]={10,10,10,10,10,10,10,12}; //unsigned char dspcom=0; //單匯流排延時函式 void Delay_OneWire(unsigned int t) { char z; while
(t--) for(z=0;z<6;z++); } //DS18B20晶片初始化 bit Init_DS18B20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); DQ = 1; Delay_OneWire(10); initflag = DQ; Delay_OneWire(5); return initflag; } //通過單匯流排向DS18B20寫一個位元組 void Write_DS18B20(unsigned char dat) { unsigned
char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //從DS18B20讀取一個位元組 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } int read() { unsigned char low,high; int temp; Init_DS18B20(); //初始化 Write_DS18B20(OW_SKIP_ROM); //跳過ROM 0XCC Write_DS18B20(DS18B20_CONVERT); //傳送溫度轉換命令 0X44 Delay_OneWire(200); //適當延時 Init_DS18B20(); //初始化 Write_DS18B20(OW_SKIP_ROM); //跳過ROM 0XCC Write_DS18B20(DS18B20_READ); //傳送讀暫存器命令 0XBE low=Read_DS18B20(); //分別讀高位和低位 high=Read_DS18B20(); temp=((high<<4)|(low>>4)); //temp取二進位制 temp=temp*0.0625*10; //二進位制轉化為十進位制數 return temp; } void Delay5ms() //@12.000MHz { unsigned char a,b; for(a=19;a>0;a--) for(b=130;b>0;b--); } void NO_buzzrelay() { P2&=0x1f; P2|=0xa0; P0&=0xaf; P2&=0x1f; } void main() { NO_buzzrelay(); while(1) { display(read()); } }

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
PS:注意底層驅動的更改。