18B20温度1602显示
void ReadTemp(void)
{
uchar a=0;
uchar b=0;
uchar t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay_18B20(100); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
delay_18B20(100);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
}本文引用地址:https://www.eepw.com.cn/article/201611/323945.htm
void time1(void)
{
unsigned char i;
for(i=0;i<20;i++)
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0x0B0;
TR0 = 1;
while(!TF0);
TF0=0;
TH0=0x3c;
TL0=0x0b0;
TR0=1;
}
}
void wait() //等待繁忙
{
P0=0xff;
do
{
EN=0;
RS=0;
RW=1;
EN=1;
}while(busy==1);
EN=0;
}
void writecmd(unsigned char k)//写命令
{
wait();
RS=0;
RW=0;
P0=k;
EN=1;
EN=0;
}
void writedat(unsigned char p) //写数据
{
wait();
RS=1;
RW=0;
P0=p;
EN=1;
EN=0;
}
void init1602() //1602初始化
{
writecmd(0x38);
writecmd(0x0c);
writecmd(0x06);
writecmd(0x01);
}
void main()
{
unsigned char *p;
init1602();
p=show1;
writecmd(0x80);
while(*p!= ) //读到字符末尾结束
{
writedat(*p);
++p;
}
p=show2;
writecmd(0xc0);
while(*p!= )
{
writedat(*p);
++p;
}
writedat( );
writecmd(0x06);
writecmd(0xcc);
while(1)
{ ReadTemp();
writecmd(0xcc);
writedat(tab[(int)temp_value/10]);
writecmd(0xcd);
writedat(tab[(int)temp_value%10]);
time1();
}
}
评论