谈谈DS18B20温度传感器PIC测温并用1602显示屏显示温度

温度传感器实验目的:接插件的基本性能可分为三大类:即机械性能、电气性能和环境性能。 另一个重要的机械性能是接插件的机械寿命。
熟悉使用单片机运用ds18b20温度传感器测试温度,并用1602显示屏显示温度
1、第一行显示:t
2、第二行显示:实测温度值
**************************************************
**************************************************
硬件设置:
1、sw2,sw4开关全部断开
2、插上ds18b20温度传感器
**************************************************
**************************************************
*****************定义头文件**********************
**************************************************
#
#
**************************************************
******************定义配置位*********************
**************************************************
__config(03545);
flash代码不保护,rb6和rb7为调试模式,flash不写保护,数据代码不保护
rb3为数字io口,低电压复位使能,上电延时开,看门狗开,4m晶体xt振荡器
**************************************************
******************定义常量***********************
**************************************************
#
#
**************************************************
***************定义ds18b20引脚*******************
**************************************************
#dqre0
#dq_iotrise0
**************************************************
******************定义lcd引脚*********************
**************************************************
#rsra1
#rwra2
#era3
**************************************************
******************定义变量***********************
**************************************************
,;低8位温度变量,高8位温度变量
,;温度整数变量,温度小数变量
;转换后的温度值bcd码形式
[7];转换后温度存放变量
**************************************************
******************定义数据***********************
**************************************************
显示:t
显示:wwwpicavrcom
[16]=
{020,020,020,054,065,06,070,065,072,061,074,075,072,065,020,020};
{020,057,057,057,02e,050,049,043,041,056,052,02e,043,04f,04d,020};
***********************************************
函数名:();
入口参数:
出口参数:无
函数作用:毫秒延时
说明:
***********************************************
()
{
;
(--)
{
(=93;0;--){;}
}
}
***********************************************
函数名:_();
入口参数:无
出口参数:无
函数作用:端口初始化
说明:
***********************************************
_()
{
adcon1=0x07;设置ra,re口为数字口
trisa=0x00;设置ra口为输出口
trisd=0x00;设置rd口为输出口
trise=0x00;设置re口为输出口
option=0x8f;分频给wdt,分频比为128
}
***********************************************
函数名:_();
入口参数:无
出口参数:无
函数作用:lcd写使能
说明:
***********************************************
_()
{
rs=0;写命令
rw=0;写操作
e=0;低电平信号
(10);低电平信号保持
e=1;拉高电平信号
}
***********************************************
函数名:_();
入口参数:
出口参数:无
函数作用:lcd写一个字节数据
说明:
***********************************************
_()
{
portd=;向rd口写数据
rs=1;写数据
rw=0;写操作
e=0;低电平信号
(10);低电平信号保持
e=1;拉高电平信号
}
***********************************************
函数名:_(*);
入口参数:*
出口参数:无
函数作用:lcd写数据块函数
说明:
***********************************************
_(*)
{
;
(=0;16;++)写16个字节数据
{
_([]);查表写数据
}
}
***********************************************
函数名:_();
入口参数:无
出口参数:无
函数作用:lcd初始化
说明:
***********************************************
_()
{
portd=0x01;清除显示
_();
portd=0x38;8位2行5*7点阵
_();
portd=0x0;显示开,光标开,闪烁
_();
portd=0x06;文字不动,光标右移
_();
}
***********************************************
函数名:1820_();
入口参数:无
出口参数:无
函数作用:ds18b20复位
说明:
***********************************************
1820_()
{
=1;
()
{
dq_io=0;设置re0为输出口
dq=0;re0输出低电平
du(201);延时503(最短480低电平信号)
dq_io=1;释放总线,进入接收(设置re0为输入口)
du(29);延时70(1820检测到上升沿时,等待15-60)
(dq){=1;}有应答信号,跳出
{=0;}没有应答信号,继续复位(低电平持续在60-240)
du(172);延时430
}
}
***********************************************
函数名:1820_();
入口参数:
出口参数:无
函数作用:ds18b20写一个字节数据
说明:
***********************************************
1820_()
{
,;
(=8;0;--)写8位数据
{
=001;先写低位数据
dq_io=0;设置re0为输出口
dq=0;re0输出低电平
du(1);延时6(15之内把数据送到总线上)
(){dq_io=1;}设置re0为输入口(写1时序)
du(25);延时61(总线采样时间15-60)
dq_io=1;设置re0为输入口(写0时序)
du(1);延时6(写第二位时间间隙大于1)
=1;右移一位
}
}
***********************************************
函数名:1820_();
入口参数:无
出口参数:无
函数作用:ds18b20读一个字节数据
说明:
***********************************************
1820_()
{
,=0;读出温度
(=8;0;--)读8位数据
{
=1;数据先右移一位
dq_io=0;设置re0为输出口
dq=0;re0输出低电平
du(1);延时6(低电平时间大于1)
dq_io=1;拉高总线,产生读时间间隙(设置re0为输入口)
du(1);延时6(从拉低电平开始15之内完成读位)
(dq){=|080;}先读高位数据,高位为1
{=|000;}高位为0
du(25);延时61(从拉低电平开始60-120之内释放总线)
}
();
}
***********************************************
函数名:_1820_();
入口参数:无
出口参数:无
函数作用:读ds18b20测试的温度数据
说明:
***********************************************
_1820_()
{
dq_io=1;设置re0为输入口
1820_();调用复位函数
1820_(0xcc);跳过rom匹配
1820_(0x44);发送温度变换命令
1820_();再次复位
1820_(0xcc);跳过rom匹配
1820_(0xbe);发送读温度命令
=1820_();读出低8位温度值
=1820_();读出高8位温度值
dq_io=1;释放总线
=((4)|(4))0x3f;
=4;
[0]=(100)%10;整数百位
[1]=(10)%10;整数十位
[2]=%10;整数个位
=0;
(080)下面是把小数部分转换为bcd码形式
{
+=5000;
}
(040)
{
+=2500;
}
(020)
{
+=1250;
}
(010)
{
+=625;
}
[3]=(1000)%10;十分位
[4]=(100)%10;百分位
[5]=(10)%10;千分位
[6]=%10;万分位
du(1);延时6
}
***********************************************
函数名:__();
入口参数:无
出口参数:无
函数作用:lcd显示测试温度程序
说明:
***********************************************
__()
{
portd=0x80;设置第1行显示地址
_();
_();调用显示函数
portd=0xc0;设置第2行显示地址
_();调用写使能函数
_(020);
_(020);
_(020);
([0]==0)
{
_(020);
}
{
_([0]+030);
}
_([1]+030);
_([2]+030);
_(02);
_([3]+030);
_([4]+030);
_([5]+030);
_([6]+030);
_(020);
_(043);
_(020);
_(020);
_(020);
}
***********************************************
函数名:();
入口参数:无
出口参数:无
函数作用:main函数
说明:
***********************************************
()
{
_();调用端口初始化函数
_();调用lcd初始化函数
(1)
{
_1820_();调用温度转换函数
clrwdt();清看门狗
__();调用温度显示函数