新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于1602液晶的溫度感應器

基于1602液晶的溫度感應器

作者: 時間:2016-11-25 來源:網絡 收藏
1602液晶單片機初學者必學的資源,其操作簡單,可讀可寫,相比數碼管而言,其顯示更為簡單。這里就不再介紹1602的具體特點和功能,可以去百度一下,可以搜索到很多資料。下面是我結合天祥視頻寫的一個溫度感應器。

--------------------------------------------------------------------------------------------------

本文引用地址:http://m.butianyuan.cn/article/201611/321148.htm

#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="The Tem is C";// 初始化溫度
uchar code table1[]="00:00:00"; //初始化時間
uchar code table2[]="MON TUE WEN THU FRI SAT SUN";//周日表
uchar code wendu[]="0123456789"; //溫度顯示表
sbit lcdrs=P1^4; //讀取命令選擇
sbit lcdrw=P1^5; //讀/寫數據選擇
sbit lcden=P1^6; //使能信號

uint num;
uchar count,shi,fen,miao,xq,t,tt;
void delay(uint z);


void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_date(uchar date)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void init()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);

write_com(0x80+0x40);
for(num=0;num<16;num++)
write_date(table[num]);

write_com(0x80+0x0c);
for(num=0;num<3;num++)
write_date(table2[num]);

write_com(0x80+0x02);
for(num=0;num<8;num++)
write_date(table1[num]);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器
}

void write_sfm(uchar add,uchar date) //第一個參數為地址,第二個參數為數據 修改時間
{
uchar shi,ge;
shi=date/10;
ge=date;
write_com(0x80+0x02+add); //先確定地址
write_date(0x30+shi); //數值分別送
write_date(0x30+ge);
}
void write_xq(uchar xq)//參數代表位置
{
write_com(0x80+0x0c);
for(num=xq;numwrite_date(table2[num]);
}


void showtime()
{
xq=0;

if(count==20)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
xq+=4;
if(xq==28)
xq=0;
write_xq(xq);
}
write_sfm(0,shi);
}
write_sfm(3,fen);
}
write_sfm(6,miao);
}
}

void main()
{
init();
showtime();
while(1)
{
showtime();
if(t==20)
{
t=0;
tt++;
if(tt==30)//30s采集一次溫度
{
tt=0;
}
}
}

}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
count++;t++;
}
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}



評論


技術專區(qū)

關閉