#include<stc12.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code digit[10]={"0123456789"}; //定义字符数组显示数字
unsigned char code Temp[]={"Temp:"}; //说明显示的是温度
unsigned char code Cent[]={"Cent"}; //温度单位
sbit DS=P1^1;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
uchar TH,TL,TN,TD;
void delay(uint sum) //延时函数
{
uint i;
for(i=sum;i>0;i--)
_nop_();
}
void begin(void) //初始化
{
uint i=4;
DS=0;
delay(720);
DS=1;
while(i>0) i--;
}
void write(uchar dat) //写数据
{
uint i=0;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
DS=0;
i++;i++;
DS=1;
delay(50);
}
else
{
DS=0;
delay(60);
DS=1;
i++;i++;
}
}
}
bit readbit(void) //读取一位
{
uint i;
bit dat;
DS=0;
i++;
DS=1;
i++;i++;
dat=DS;
delay(50);
return(dat);
}
uchar read(void) //读取一个字节
{
uint i;
uchar j,dat=0;
for(i=1;i<=8;i++)
{
j=readbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void wenduchange() //温度转换
{
begin();
delay(1);
write(0xcc);
write(0x44);
delay(100);
}
wendu() //读取温度数值
{
// float tempp;
begin();
delay(1);
write(0xcc);
write(0xbe);
// TL=read();
// TH=read();
// temp=TH;
// temp<<=8;
// temp=temp|TL;
// tempp=temp*0.0625;
// temp=tempp*10+0.5;
// return temp;
}
void write_date(uchar date) //对液晶写入数据
{
rs=1;
rw=0;
P0=date;
delay(1000);
en=1;
delay(1000);
en=0;
}
void write_com(uint com) //对液晶写入指令
{
rs=0;
rw=0;
P0=com;
delay(1000);
en=1;
delay(1000);
en=0;
}
void init() //1602初始化
{
en=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
// write_com(0x80+0x10);
}
void display_symbol(void) //显示温度字符
{
uint num;
write_com(0x80);
for(num=0;num<4;num++)
{
write_date(Temp[num]);
}
}
void display_cent(void) //显示温度单位
{
uint num;
write_com(0x80+0x0b);
for(num=0;num<4;num++)
{
write_date(Cent[num]);
}
}
void display_dot() //显示温度小数点
{
write_com(0x80+0x08);
write_date('.');
}
void display_temp1(uchar x) //显示温度整数部分
{
uchar j,k,l;
j=x/100;
k=(x%100)/10;
l=x%10;
write_com(0x80+0x05);
write_date(digit[j]);
write_date(digit[k]);
write_date(digit[l]);
delay(50000);
}
void display_temp2(uchar x) //显示温度小数部分
{
write_com(0x80+0x09);
write_date(digit[x]);
delay(1000);
}
void main()
{
// uchar TH,TL,TN,TD;
init();
delay(5000);
display_symbol();
display_dot();
display_cent();
while(1)
{
wenduchange();
wendu();
TL=read();
TH=read();
TN=TH*16+TL/16;
TD=(TL%16)*10/16;
display_temp1(TN); //显示温度的整数部分
display_temp2(TD); //显示温度的小数部分
delay(1000);
}
}
温度显示为255,9而且不变,不知道原因在哪?求解 |