|
#include<reg51.h>
#include"lcd.h"
#include"temp.h"
uchar CNCHAR[6] = "攝氏度";
void LcdDisplay(int);
void UsartConfiguration();
/*******************************************************************************
* 函數(shù)名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void main()
{
UsartConfiguration();
LcdInit(); //初始化LCD1602
LcdWriteCom(0x88); //寫地址 80表示初始地址
LcdWriteData('C');
while(1)
{
LcdDisplay(Ds18b20ReadTemp());
}
}
/*******************************************************************************
* 函數(shù)名 : LcdDisplay()
* 函數(shù)功能 : LCD顯示讀取到的溫度
* 輸入 : v
* 輸出 : 無
*******************************************************************************/
void LcdDisplay(int temp) //lcd顯示
{
unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
float tp;
if(temp< 0) //當(dāng)溫度值為負(fù)數(shù)
{
LcdWriteCom(0x80); //寫地址 80表示初始地址
SBUF='-'; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
LcdWriteData('-'); //顯示負(fù)
//因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
//后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
//算由?.5,還是在小數(shù)點(diǎn)后面。
}
else
{
LcdWriteCom(0x80); //寫地址 80表示初始地址
LcdWriteData('+'); //顯示正
SBUF='+';//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
//如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
temp=tp*0.0625*100+0.5;
//留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
//后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
//算加上0.5,還是在小數(shù)點(diǎn)后面。
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000;
datas[2] = temp % 1000 / 100;
datas[3] = temp % 100 / 10;
datas[4] = temp % 10;
LcdWriteCom(0x82); //寫地址 80表示初始地址
LcdWriteData('0'+datas[0]); //百位
SBUF = '0'+datas[0]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
LcdWriteCom(0x83); //寫地址 80表示初始地址
LcdWriteData('0'+datas[1]); //十位
SBUF = '0'+datas[1]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
LcdWriteCom(0x84); //寫地址 80表示初始地址
LcdWriteData('0'+datas[2]); //個(gè)位
SBUF = '0'+datas[2]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
LcdWriteCom(0x85); //寫地址 80表示初始地址
LcdWriteData('.'); //顯示 ‘.’
SBUF = '.'; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
LcdWriteCom(0x86); //寫地址 80表示初始地址
LcdWriteData('0'+datas[3]); //顯示小數(shù)點(diǎn)
SBUF = '0'+datas[3]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
LcdWriteCom(0x87); //寫地址 80表示初始地址
LcdWriteData('0'+datas[4]); //顯示小數(shù)點(diǎn)
SBUF = '0'+datas[4]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
for(i=0; i<6; i++)
{
SBUF = CNCHAR[i]; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while (!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0;
}
}
/*******************************************************************************
* 函 數(shù) 名 : UsartConfiguration()
* 函數(shù)功能 : 設(shè)置串口
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置,注意波特率是4800的
TL1=0XF3;
// ES=1; //打開接收中斷
// EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
|
-
-
LCD1602顯示 串口接收溫度.zip
2018-6-20 18:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
71.9 KB, 下載次數(shù): 11, 下載積分: 黑幣 -5
評分
-
查看全部評分
|