標(biāo)題:
單只18B20測溫程序帶負(fù)溫度(LCD1602寫單字符方式)
[打印本頁]
作者:
經(jīng)年
時間:
2017-5-21 16:10
標(biāo)題:
單只18B20測溫程序帶負(fù)溫度(LCD1602寫單字符方式)
0.png
(72.26 KB, 下載次數(shù): 69)
下載附件
2017-5-21 16:23 上傳
單片機源程序如下:
//單只DS18B20的溫度檢測,測溫范圍-55 —— +125度,1602液晶顯示。
#include "STC15W4K.H"
#include "DS18b20.h"
#include "myfun.h"
#include "LCD1602.h"
bit flag; // flag=0表示正溫,flag=1表示負(fù)溫。
unsigned char baiw,shiw,gew; // 百位、十位、個位 ASCII碼
unsigned char point_1,point_2,point_3,point_4; // 小數(shù)點后1、2、3、4位ASCII碼
//****************溫度數(shù)據(jù)處理函數(shù)************************/
void gettemp() //讀取溫度值
{
unsigned int temp0,temp1,temp; // 存放小數(shù)、整數(shù)、符號,10000倍小數(shù)值
unsigned char temh,teml; // 存放原始高字節(jié)與低字節(jié)
temp=DS18B20_ReadTemperature(); // 從18B20中讀取2字節(jié)原始溫度值
flag=0;
if ((temp&0xf800)!=0) // 如果是負(fù)溫,將補碼取反加1變?yōu)樵a
{
temp=~temp +1;
flag=1;
}
temh=temp/256; // 高字節(jié)(5位符號+3位數(shù)據(jù))
teml=temp%256; // 低字節(jié)(4位整數(shù)+4位小數(shù))
temp0=teml&0x0F; // 4 位小數(shù)
temp1=(temh<<4)|(teml>>4); // 8 位整數(shù)(最高一位符號0不用管)
baiw=temp1/100+48; // 百位ASCII碼
shiw=(temp1%100)/10+48; // 十位 ASCII碼
gew=(temp1%100)%10+48; // 個位 ASCII碼
temp=temp0*625; // 將結(jié)果中的小數(shù)乘以分辨溫度0.0625
// 擴大10000倍進(jìn)行輸出,不用浮點,同樣可以保留4位小數(shù)精度
point_1=temp/1000+48; // 小數(shù)點后1位ASCII碼
point_2=(temp%1000)/100+48; // 小數(shù)點后2位ASCII碼
point_3=(temp%100)/10+48; // 小數(shù)點后3位ASCII碼
point_4=temp%10+48; // 小數(shù)點后4位ASCII碼
}
void port_mode() // 端口模式
{
P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
unsigned char xPos,yPos;
unsigned char *s="Now temp is:";
port_mode(); // 所有IO口設(shè)為準(zhǔn)雙向弱上拉方式。
xPos=0; // xPos表示水平右移字符數(shù)(0-15)
yPos=0; // yPos表示垂直下移字符數(shù)(0-1)
delay100ms(); // 等待LCD1602上電時內(nèi)部復(fù)位
LCD1602_Init();
WriteString(xPos,yPos,s); // X坐標(biāo)、Y坐標(biāo)、字符串,屏幕左上角為坐標(biāo)原點
DS18B20_SetResolution(3); //設(shè)置DS18B20的分辨率為12位(默認(rèn)值,新器件可以不作任何設(shè)置)
while(1)
{
gettemp();
if(flag) // 負(fù)溫度
{
WriteChar(0,1,'-');
}
if(!flag) // 正溫度
{
WriteChar(0,1,'+');
}
WriteChar(1,1,baiw);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
單只18B20測溫(1602寫單字符方式).rar
(57.38 KB, 下載次數(shù): 11)
2017-5-21 16:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1