|
|
今天晚上沒事干編了一個(gè)極簡(jiǎn)的一個(gè)小程序,雖然簡(jiǎn)單但是還是很穩(wěn)定的,連接也很簡(jiǎn)單,用最小系統(tǒng)板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]; //顯示到屏幕的溫度數(shù)據(jù)
//開背光
TMOD = 0x21; //選擇方式2作為波特率發(fā)生
SCON = 0x50; //串口方式1,允許中斷
PCON |= 0x80; //SMOD=1
TL1 = 256 -(OSC/12/16/BAUDRATE);
TH1 = 256 -(OSC/12/16/BAUDRATE);
TR1 = 1; //啟動(dòng)定時(shí)器
TI = 1; //TI有效
//檢測(cè)DS18B20溫度傳感器是否存在并復(fù)位傳感器
if(DSReset())
printf("\r\Temp sensor ResetOK!");
else printf("\r\Temp Sensor Notready!");
while(1){
DSReset(); //復(fù)位傳感器
Delay(1);
DSWriteByte(SkipROM); //跳讀 省時(shí)
DSWriteByte(StartConvert); //溫度轉(zhuǎn)換
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);
//準(zhǔn)備輸出到顯示屏的數(shù)據(jù)
strTemp[0]=t.z/10+0x30; //十位
strTemp[1]=t.z%10+0x30; //個(gè)位
strTemp[2]='.'; //小數(shù)點(diǎn)
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);
}
}
|
評(píng)分
-
查看全部評(píng)分
|