DS18b20与1602搭配,还带高低温(可调)报警
/*******************************************************************/
void ds1820disp()//温度值显示
{ uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{disdata[1]=0x20;//如果百位为0,十位为0也不显示
}
}
wr_com(0xc0);
wr_dat(flagdat);//显示符号位
wr_com(0xc1);
wr_dat(disdata[0]);//显示百位
wr_com(0xc2);
wr_dat(disdata[1]);//显示十位
wr_com(0xc3);
wr_dat(disdata[2]);//显示个位
wr_com(0xc4);
wr_dat(0x2e);//显示小数点
wr_com(0xc5);
wr_dat(disdata[3]);//显示小数位
wr_com(0x80+0x40+7);
wr_dat(0xdf); //写入摄氏度的小圈
wr_com(0x80+0x40+8);//写入摄氏度的C
wr_dat(C);
}本文引用地址:https://www.eepw.com.cn/article/201612/324682.htm
/*功能按键扫描函数*/
void keyscan()//按键扫描函数 ,如果有按键按下,按照按下的功能键执行相应功能
{
if(s1==0)
{
delay1ms(5);
if(s1==0)
{
s1num++;
while(!s1);//松手检测
if(s1num==1) //
{
wr_com(0x80+13);
wr_com(0x0f);//光标开始闪
}
if(s1num==2)//被按两下,
{
wr_com(0x80+5);
wr_com(0x0f);//光标开始闪
}
if(s1num==3)//被按三下
{
s1num=0;
wr_com(0x0c);//开显示,光标不显示
}
}
}
if(s1num!=0)
{
if(s2==0)
{
delay1ms(5);
while(!s2);
if(s1num==1)
{
Tl++;
wr_Tl(12,Tl);//
wr_com(0x80+13);//因为每次写入指
针自动加一,所以将批针前移一位
}
if(s1num==2)
{
Th++;
wr_Th(4,Th);
wr_com(0x80+5);
}
}
if(s3==0)
{
delay1ms(5);
while(!s3);
if(s1num==1)
{
Tl--;
wr_Tl(12,Tl);
wr_com(0x80+13);
}
if(s1num==2)
{
Th--;
wr_Th(4,Th);
wr_com(0x80+5);
}
}
}
}
void exter0()interrupt 0
{
BEEP=1;
keyscan();
}
/********************主程序***********************************/
void main()
{
gnd=0;
init_play();//初始化显示
EA=1;//开总中断
EX0=1;//开外中部断0
IT0=0;//设定中断触发方式。IT0=0是电平触发方式。IT0=1是下降沿触发方式。12脚当中断源
while(1)
{
read_temp();//读取温度
ds1820disp();//显示
if((tvalue/10)>=Th||(tvalue/10)<=Tl)
{
delay1ms(2000);
//BEEP=0;
}
else
BEEP=1;
}
}
评论