● 功能描述:利用单片机控制Lcd 显示温度,该温度计具有安全温度
预警功能。
● 原理概述:
(1) 数字温度计设置温度上限为37度,温度下限为10度。有预警提示功能,高过黄灯闪烁,低于绿灯闪烁。
(2)温度计的显示是使用Lcd 模块,其软件设计原理是:由数字温度传感器芯片DS18B20输入温度,经转换子程序转换成Lcd 上显示的数据,并通过单片机执得的显示函数,在Lcd 上显示出来。
(3)调整温度功能是利用了单片机的输入功能,把DS18B20作为单片机的输入信号,通过检测所示温度,从而执行赋予该芯片调整温度功能。
● 端口说明:
黄色警示灯与P1.0相连,绿色警示灯与P1.1相连。液晶显示芯片LM016L 的4-6与P3.0-P3.2相连,7-14与P2.0-P2.7相连。
● 效果显示:
如图所示,这是温度计在一般情况下的状态。
1. 如图所示,此时温度时43度,超出上限温度,黄灯亮,实现报警。
2. 如图所示,此时温度为1度,低于下限温度,绿灯亮,实现报警。
3. 如图所示,此时温度为26度,在所设范围内,两灯都没亮,说明温度正常。
程序清单
#include
#define uchar unsigned char
#define uint unsigned int
uchar i;
sbit lcdrs=P3^0;
sbit lcdrw=P3^1;
sbit lcden=P3^2;
sbit d1=P1^0;
sbit d2=P1^1;
uchar code t0[]="the temperature ";
uchar code t1[]=" is ";
uchar code wendu[]="0123456789"; //利用一个温度表解决温度显示
乱码
sbit DQ = P3^7; //定义ds18B20总线IO
//液晶显示模块
void delay(uint z)
{
uint x,y;
for(x=100;x>1;x--)
for(y=z;y>1;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(i=0;i
} { write_date(t0[i]); delay(0); } write_com(0x80+0x40); for(i=0;i
//温度采集模块
void tmpDelay(int num) //延时函数
{
while(num--) ;
}
void Init_DS18B20() //初始化ds1820
{
unsigned char x=0;
DQ = 1; //DQ复位
tmpDelay(8); //稍做延时
DQ = 0; //单片机将DQ 拉低
tmpDelay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
tmpDelay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功
x=1则初始化失败
tmpDelay(20);
}
unsigned char ReadOneChar() //读一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat) //写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
● 功能描述:利用单片机控制Lcd 显示温度,该温度计具有安全温度
预警功能。
● 原理概述:
(1) 数字温度计设置温度上限为37度,温度下限为10度。有预警提示功能,高过黄灯闪烁,低于绿灯闪烁。
(2)温度计的显示是使用Lcd 模块,其软件设计原理是:由数字温度传感器芯片DS18B20输入温度,经转换子程序转换成Lcd 上显示的数据,并通过单片机执得的显示函数,在Lcd 上显示出来。
(3)调整温度功能是利用了单片机的输入功能,把DS18B20作为单片机的输入信号,通过检测所示温度,从而执行赋予该芯片调整温度功能。
● 端口说明:
黄色警示灯与P1.0相连,绿色警示灯与P1.1相连。液晶显示芯片LM016L 的4-6与P3.0-P3.2相连,7-14与P2.0-P2.7相连。
● 效果显示:
如图所示,这是温度计在一般情况下的状态。
1. 如图所示,此时温度时43度,超出上限温度,黄灯亮,实现报警。
2. 如图所示,此时温度为1度,低于下限温度,绿灯亮,实现报警。
3. 如图所示,此时温度为26度,在所设范围内,两灯都没亮,说明温度正常。
程序清单
#include
#define uchar unsigned char
#define uint unsigned int
uchar i;
sbit lcdrs=P3^0;
sbit lcdrw=P3^1;
sbit lcden=P3^2;
sbit d1=P1^0;
sbit d2=P1^1;
uchar code t0[]="the temperature ";
uchar code t1[]=" is ";
uchar code wendu[]="0123456789"; //利用一个温度表解决温度显示
乱码
sbit DQ = P3^7; //定义ds18B20总线IO
//液晶显示模块
void delay(uint z)
{
uint x,y;
for(x=100;x>1;x--)
for(y=z;y>1;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(i=0;i
} { write_date(t0[i]); delay(0); } write_com(0x80+0x40); for(i=0;i
//温度采集模块
void tmpDelay(int num) //延时函数
{
while(num--) ;
}
void Init_DS18B20() //初始化ds1820
{
unsigned char x=0;
DQ = 1; //DQ复位
tmpDelay(8); //稍做延时
DQ = 0; //单片机将DQ 拉低
tmpDelay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
tmpDelay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功
x=1则初始化失败
tmpDelay(20);
}
unsigned char ReadOneChar() //读一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat) //写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;