📄 text1.c
字号:
#include<reg51.h>
#include<xuanze.h>
unsigned int shu[]={0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39};
unsigned long t;
void flcd_1602() //当为负温度时,液晶显示可以高位为0屏蔽.
{ init(0x80);write_data(0x4e);//NO
init(0x81);write_data(0x4f);
init(0x82);write_data(0x80);
init(0x85);write_data(0x74);//temperature
init(0x86);write_data(0x65);
init(0x87);write_data(0x6d);
init(0x88);write_data(0x70);
init(0x89);write_data(0x65);
init(0x8a);write_data(0x72);
init(0x8b);write_data(0x61);
init(0x8c);write_data(0x74);
init(0x8d);write_data(0x75);
init(0x8e);write_data(0x72);
init(0x8f);write_data(0x65);
init(0xc0);write_data(0x80);
init(0xc1);write_data(0x80);
init(0xc2);write_data(0x69); //is:
init(0xc3);write_data(0x73);
init(0xc4);write_data(0x3a);
if((t/1000%10)!=0)
{init(0xc5);write_data(0x2d);
init(0xc6);write_data(shu[t/1000%10]);
init(0xc7);write_data(shu[t/100%10]);
}
else
{init(0xc5);write_data(0xfe);
init(0xc6);write_data(0x2d);
init(0xc7);write_data(shu[t/100%10]);
}
init(0xc8);write_data(0x2e);
init(0xc9);write_data(shu[(t%100)/10]);
init(0xca);write_data(shu[t%10]);
init(0xcb);write_data(0x27);
init(0xcc);write_data(0x43);
init(0xcd);write_data(0x80);
init(0xce);write_data(0x80);
init(0xcf);write_data(0x80);
}
void lcd_1602() //当为正温度时,液晶显示可以高位为0屏蔽.
{ init(0x80);write_data(0x4e);//NO
init(0x81);write_data(0x4f);
init(0x82);write_data(0x80);
init(0x84);write_data(0x80);
init(0x85);write_data(0x74); //temperature
init(0x86);write_data(0x65);
init(0x87);write_data(0x6d);
init(0x88);write_data(0x70);
init(0x89);write_data(0x65);
init(0x8a);write_data(0x72);
init(0x8b);write_data(0x61);
init(0x8c);write_data(0x74);
init(0x8d);write_data(0x75);
init(0x8e);write_data(0x72);
init(0x8f);write_data(0x65);
init(0xc0);write_data(0x80);
init(0xc1);write_data(0x80);
init(0xc2);write_data(0x69); //is:
init(0xc3);write_data(0x73);
init(0xc4);write_data(0x3a);
if(t/10000!=0)
{init(0xc5);write_data(shu[t/10000]);
init(0xc6);write_data(shu[t/1000%10]);
init(0xc7);write_data(shu[t/100%10]);
}
else
{if((t/1000%10)!=0)
{init(0xc5);write_data(0xfe);
init(0xc6);write_data(shu[t/1000%10]);
init(0xc7);write_data(shu[t/100%10]);
}
else
{init(0xc5);write_data(0xfe);
init(0xc6);write_data(0xfe);
init(0xc7);write_data(shu[t/100%10]);}
}
init(0xc8);write_data(0x2e);
init(0xc9);write_data(shu[(t%100)/10]);
init(0xca);write_data(shu[t%10]);
init(0xcb);write_data(0x27);
init(0xcc);write_data(0x43);
init(0xcd);write_data(0x80);
init(0xce);write_data(0x80);
init(0xcf);write_data(0x80);
}
void jiance() //初始化,即检测是否存在DS18B20.
{unsigned char k=0;
loop:DS=1;
DS=0; //主机将总线从高电平拉到低电平
del(100); //持续400us~960us
DS=1; //然后释放总线
del(10); //DS18B20检测到总线上升沿后,等待15us~60u后发低电平。
k=DS;
del(20); //低电平至少要持续60~240us
if(k==1) // 60~240us内 若为高电平则要重新检测。
goto loop;
}
read() //从DS18B20中读出数据
{ unsigned char i;
unsigned long date=0;
for(i=0;i<16;i++)
{ DS=0; //主机在某一时刻将总线从高电平拉到低电平.
date>>=1;
DS=1;
del(3); //保持15us将总线拉到高电平,产生读时间隙
if(DS)
date|=0x8000;
del(8); //读数据需要持续35us~60us.
}
return(date);
}
void main()
{ unsigned long flag=0;
EA=0;
SP=0X60;
init(0x01); //对液晶屏初始化
init(0x38);
init(0x0c);
init(0x06);
while(1)
{
jiance(); //对DS18B20初始化
matchrom();
write(0x44); //启动温度变换
del(100);
jiance();
matchrom();
if(f==1)
{f=0;}
else
{ write(0xbe); // 读暂存存储器
t=read();
flag=t&0x8000; //对读取的数据进行处理
if(flag==0x8000)
{t=~t;
t=t+1;
t=t*25;
t>>=2;
flcd_1602();
}
else
{ t=t*25;
t>>=2;
lcd_1602();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -