標(biāo)題:
51單片機(jī)實(shí)驗(yàn)程序:LCD1602顯示溫度報(bào)警
[打印本頁(yè)]
作者:
凱旋小飛
時(shí)間:
2017-6-4 13:15
標(biāo)題:
51單片機(jī)實(shí)驗(yàn)程序:LCD1602顯示溫度報(bào)警
實(shí)驗(yàn)6:LCD1602顯示溫度報(bào)警
單片機(jī)源程序如下:
/**************************************************************************************
* ** *
實(shí)現(xiàn)現(xiàn)象:下載程序后插上LCD1602液晶在開(kāi)發(fā)板上,即可顯示
注意事項(xiàng):如果不想讓點(diǎn)陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。
***************************************************************************************/
//DS18B20溫度采集,LCD1602顯示
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar table[]={" T: "};
uchar table1[]={" Tmax 32 "};
/********IO引腳定義**********/
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
sbit dq=P3^7;
sbit beep=P1^5;
uchar num;
uint tempwarn,d=0,h=0;
void delay(uint n) //延時(shí)程序
{
while(n--);
}
//液晶寫(xiě)命令程序
void write_com(uchar com)
{
rs=0; //等0輸入命令
en=0; //液晶使能信號(hào)初始化
P0=com; //把com參數(shù),液晶的命令值送到P0口
delay(100); //延時(shí),按照液晶的時(shí)序圖的要求
en=1; //使能信號(hào),0到1表示上升沿打開(kāi)可以寫(xiě)命令數(shù)據(jù)到液晶里
delay(100);
en=0; //使能信號(hào)回復(fù)
}
void write_data(uchar date) //液晶寫(xiě)數(shù)據(jù)程序
{
rs=1; //等1表示輸入數(shù)據(jù)
en=0;
P0=date; //把date參數(shù),液晶的數(shù)據(jù)送到P0口
delay(100);
en=1;
delay(100);
en=0;
} //液晶初始化程序
void init()
{
en=0;
write_com(0x38); //設(shè)置16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)口
write_com(0x0c); //設(shè)置開(kāi)顯示,不顯示光標(biāo)
write_com(0x06); //寫(xiě)一個(gè)字符后地址指針加1
write_com(0x01); //顯示清0,數(shù)據(jù)指針清0
}
void Writebyte(uchar dat)//DS18B20溫度芯片的寫(xiě)字節(jié)程序
{
uchar j;
for(j=0;j<8;j++)
{
dq=0;
dq=dat&0x01;
delay(5);
dq=1;
dat>>=1;
}
}
uchar Readbyte(void)//DS18B20溫度芯片讀字節(jié)程序
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
dq=0;
dat>>=1;
dq=1;
if(dq==1)
dat|=0x80;
delay(4);
}
return dat;
}
void initds18b20(void)//溫度芯片初始化程序
{
uchar x=0;
dq=1;
delay(8);
dq=0;
delay(80);
dq=1;
delay(14);
x=dq;
delay(20);
}
void Readtemp(void)//讀溫度程序
{
initds18b20();
Writebyte(0xcc);
Writebyte(0x44);
initds18b20();
Writebyte(0xcc);
Writebyte(0xbe);
d=Readbyte(); //溫度信號(hào)的低8位數(shù)據(jù)函數(shù)
h=Readbyte(); //溫度信號(hào)的高8位數(shù)據(jù)函數(shù)
}
get() //溫度信號(hào)處理程序,把溫度信號(hào)數(shù)據(jù)值轉(zhuǎn)換為液晶顯示
{
uint temp,tmp;
float tt;
tmp=d; //低8位數(shù)據(jù)給tmp
temp=h; //高8位數(shù)據(jù)給temp
temp<<=8; //高8位左移8位
temp|=d; //高低8位數(shù)據(jù)或起來(lái)再賦給temp
if((h&0x80)!=0) //高8位h&10000000是否等0,不等0表示負(fù)多少度
{
table[7]='-'; //把-賦給液晶數(shù)組的第8個(gè)元素,表示-號(hào)在第8位,1602一行有16個(gè)字符
temp=temp-1;
temp=~temp;
}
else
table[7]='+';
temp>>=4;
table[8]=(temp/100)+'0'; //液晶第9位字符為溫度的百位數(shù),例如120度的1
table[9]=(temp/10)%10+'0'; //液晶第10位字符為溫度的十位數(shù),例如120度的2
table[10]=(temp%10)+'0'; //液晶第9位字符為溫度的個(gè)位數(shù),例如120度的0
tmp=tmp&0x0f; //低位溫度提取小數(shù)數(shù)據(jù)
tt=tmp*0.0625; //小數(shù)部分?jǐn)?shù)據(jù)轉(zhuǎn)換
table[11]='.'; //顯示小數(shù)點(diǎn)
table[12]=((uchar)(tt*10))%10+'0';//小數(shù)點(diǎn)后面的小數(shù)數(shù)字
tempwarn=temp;
return tempwarn;//溫度值返回
}
void warn(uint tempwarn)//溫度報(bào)警程序
{
if(tempwarn>=32)//如果溫度大于25度并且啟動(dòng)報(bào)警
{
beep=0;
delay(5000);
beep=1;
delay(50000);
}
}
void main()
{
rw=0; //rw直接置0,應(yīng)該在液晶初始化前,否則斷電后再通電就不能顯示,切記。!
init(); //液晶初始化函數(shù)
write_com(0x80+0x40); //0x80+0x40表示液晶的第二行開(kāi)始顯示
for(num=0;num<16;num++) //num<16,16表示顯示16位
{
write_data(table1[num]); //液晶顯示需要的內(nèi)容,調(diào)用寫(xiě)液晶數(shù)據(jù)函數(shù),這行顯示拼音dengtianming
}
while(1) //大循環(huán),不斷檢測(cè)和更新溫度
{
Readtemp();
get();
warn(tempwarn);
write_com(0x80); //液晶的第一行開(kāi)始地址
for(num=0;num<15;num++)//顯示16位數(shù)據(jù),后面的幾位沒(méi)有用到就寫(xiě)不到16,以免后面的幾位會(huì)出現(xiàn)一個(gè)隨機(jī)數(shù)據(jù)顯示亂碼
{
write_data(table[num]);//液晶需要顯示的內(nèi)容
}
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
實(shí)驗(yàn)6:LCD1602顯示溫度報(bào)警.rar
(32.49 KB, 下載次數(shù): 297)
2017-6-4 13:14 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
wpzj
時(shí)間:
2018-4-10 10:10
絕世好文 啊
作者:
嚶葉知秋
時(shí)間:
2018-4-25 08:17
最近正在做相關(guān)設(shè)計(jì),非常感謝分享
作者:
銘樂(lè)
時(shí)間:
2018-5-25 16:27
很好,值得學(xué)習(xí)
作者:
Jaciky
時(shí)間:
2018-12-31 20:25
很好,對(duì)我正在做的課設(shè)很有幫助
作者:
yaoyao886
時(shí)間:
2019-1-11 11:02
大佬 請(qǐng)問(wèn)為什么用了這程序 無(wú)論怎么調(diào) 聲音都是滴 滴 滴,不是尖銳的報(bào)警聲呢》?
作者:
tiwen
時(shí)間:
2019-1-11 15:06
很好 值得學(xué)習(xí)
作者:
920842613
時(shí)間:
2019-3-22 16:07
程序編譯有問(wèn)題,沒(méi)“l(fā)cd1602.h" "adc0832.h"
作者:
1114935347
時(shí)間:
2019-10-30 10:01
謝謝樓主,正需要
作者:
1114935347
時(shí)間:
2019-10-30 10:01
感謝樓住,正需要這個(gè)
作者:
whb040400
時(shí)間:
2019-12-28 16:11
很好,對(duì)我正在做的課設(shè)很有幫助
作者:
15852832597
時(shí)間:
2019-12-28 17:11
有沒(méi)有好的
作者:
zyszyszys
時(shí)間:
2019-12-28 23:17
為什么顯示的溫度一直是-0.09
作者:
譚露95
時(shí)間:
2020-1-2 02:10
很好 被自己誤刪了
作者:
15877120502
時(shí)間:
2020-1-4 00:29
謝謝樓主
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1