標(biāo)題:
單片機(jī)P0口接LCD1602顯示環(huán)境溫度,溫度檢測(cè)通過(guò)DS18B20實(shí)現(xiàn)。
[打印本頁(yè)]
作者:
一只楊九龜
時(shí)間:
2018-11-24 18:53
標(biāo)題:
單片機(jī)P0口接LCD1602顯示環(huán)境溫度,溫度檢測(cè)通過(guò)DS18B20實(shí)現(xiàn)。
下面是模塊化程序:需要私我。
模塊.png
(24.76 KB, 下載次數(shù): 88)
下載附件
2018-11-24 18:53 上傳
keilC51代碼:
#include <reg51.h>
#include<intrins.h>
#include "18B20.h"
#include "delay.h"
#include "LCD1602.h"
float TM; //讀一個(gè)溫度時(shí)的溫度轉(zhuǎn)換中間
int tvalue; //溫度值
unsigned char tflag; //溫度正負(fù)標(biāo)志
unsigned char data disdata[5]; //溫度字型顯示中間變量
void delay_18B20(unsigned int i)//延時(shí)1微秒
{
while(i--);
}
void ds1820rst() /*ds1820復(fù)位*/
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay_18B20(4); //延時(shí)
DQ = 0; //DQ拉低
delay_18B20(80); //精確延時(shí)大于480us 540us
DQ = 1; //拉高總線 15-60us
delay_18B20(20);
x=DQ; //讀總線狀態(tài) 為0復(fù)位成功,1復(fù)位不成功
delay(30);
DQ=1; //釋放總線
}
unsigned char ds1820rd() /*讀數(shù)據(jù)*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //給脈沖信號(hào)
dat>>=1;
DQ = 1; //給脈沖信號(hào)
if(DQ)
dat|=0x80; //dat和0x80做“或”運(yùn)算(最高位1,其他位保持不變)
delay_18B20(10);
}
return(dat);
}
void ds1820wr(unsigned char wdata) /*寫(xiě)數(shù)據(jù)*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01; //
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp()/*讀取溫度值并轉(zhuǎn)換*/
{
unsigned char a,b;
ds1820rst();
ds1820wr(0xcc);//*跳過(guò)讀序列號(hào)*/
ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/
ds1820rst();
ds1820wr(0xcc);//*跳過(guò)讀序列號(hào)*/
ds1820wr(0xbe);//*讀取溫度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
TM=tvalue*0.625;
tvalue=TM*1+0.5;
/*
if(tvalue<0x0FFF)
tflag=0;
else
{tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.425);//溫度值擴(kuò)大10倍,精確到1位小數(shù) */
return(tvalue);
}
void ds1820disp()//溫度值顯示
{
unsigned char flagdat;
disdata[0]=tvalue/1000+0x30;//百位數(shù)
disdata[1]=tvalue%1000/100+0x30;//十位數(shù)
disdata[2]=tvalue%100/10+0x30;//個(gè)位數(shù)
disdata[3]=tvalue%10+0x30;//小數(shù)位
if(tflag==0)
flagdat=0x20;//正溫度不顯示符號(hào)
else
flagdat=0x2d;//負(fù)溫度顯示負(fù)號(hào):-
if(disdata[0]==0x30)
{disdata[0]=0x20;//如果百位為0,不顯示
if(disdata[1]==0x30)
{disdata[1]=0x20;//如果百位為0,十位為0也不顯示
}
}
write_com(0x80+0x40);
write_date(flagdat);//顯示符號(hào)位
write_com(0x80+0x41);
write_date(disdata[0]);//顯示百位
write_com(0x80+0x42);
write_date(disdata[1]);//顯示十位
write_com(0x80+0x43);
write_date(disdata[2]);//顯示個(gè)位
write_com(0x80+0x44);
write_date(0x2e);//顯示小數(shù)點(diǎn)
write_com(0x80+0x45);
write_date(disdata[3]);//顯示小數(shù)位
write_com(0x80+0x46);
write_date('C');
}
復(fù)制代碼
下載:
http://www.torrancerestoration.com/bbs/dpj-143026-1.html
新手,大佬誤噴。
作者:
二九兒
時(shí)間:
2019-4-29 21:10
為什么我的運(yùn)行有錯(cuò)呢
作者:
newforce
時(shí)間:
2021-7-30 13:46
xiexie,xuexi~~~~~~~~~~
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1