|
今天晚上沒事干編了一個極簡的一個小程序,雖然簡單但是還是很穩定的,連接也很簡單,用最小系統板p0.0口接上ds18b20模塊就可以了
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include "DS18B20.h"
#define OSC 11059200 //晶振頻率
#define BAUDRATE 9600 //波特率
void main(void)
{
unsigned int i;
unsigned char tmph,tmpl;
Temp t;
unsigned char strTemp[8]; //顯示到屏幕的溫度數據
//開背光
TMOD = 0x21; //選擇方式2作為波特率發生
SCON = 0x50; //串口方式1,允許中斷
PCON |= 0x80; //SMOD=1
TL1 = 256 -(OSC/12/16/BAUDRATE);
TH1 = 256 -(OSC/12/16/BAUDRATE);
TR1 = 1; //啟動定時器
TI = 1; //TI有效
//檢測DS18B20溫度傳感器是否存在并復位傳感器
if(DSReset())
printf("\r\Temp sensor ResetOK!");
else printf("\r\Temp Sensor Notready!");
while(1){
DSReset(); //復位傳感器
Delay(1);
DSWriteByte(SkipROM); //跳讀 省時
DSWriteByte(StartConvert); //溫度轉換
for(i=0;i<40000;i++);
DSReset();
Delay(1);
DSWriteByte(SkipROM);
DSWriteByte(ReadMemory); //讀RAM程序
tmpl = DSReadByte();
tmph = DSReadByte();
printf("\r\nTemperature code HI=%02bX,LO=%02bX ",tmph,tmpl);
DSReadTemp(&t);
//準備輸出到顯示屏的數據
strTemp[0]=t.z/10+0x30; //十位
strTemp[1]=t.z%10+0x30; //個位
strTemp[2]='.'; //小數點
strTemp[3]=t.x/1000+0x30; //十分位
strTemp[4]=(t.x/100)%10+0x30; //百分位
strTemp[5]=(t.x/10)%10+0x30;//千分位
strTemp[6]=t.x%10+0x30; //萬分位
strTemp[7]='C';
if(t.z>=30)
printf("\nWarning!!!Temperature= %d.%04d ",t.z,t.x) ; //大于30度溫度警告
else
printf("\r\nTemperature = %d.%04d",t.z,t.x);
}
}
|
-
串口助手顯示選9600波特率
-
實物連接,其實就一根線
-
-
溫度串口顯示.zip
2019-9-24 23:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
47 KB, 下載次數: 65, 下載積分: 黑幣 -5
評分
-
查看全部評分
|