DS18B20温度传感器
选用芯片:AT89S52
函数功能:如下
/*************************************************************************
此程序功能如下:此程序为DS18B20的使用程序。将DS18B20的温度值读取出来,并显
示在液晶LCD1602上。
作者:Crazy Wind
日期:2020.11.9
version:1.0.0
**************************************************************************/
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code digit[11]={
"0123456789-"}; //定义字符数组显示数字
uchar code Str[]={
"DS18B20"}; //说明显示的是温度
uchar code Error[]={
" DS18B20 ERROR"}; //说明没有检测到DS18B20
uchar code Error1[]={
" PLEASE CHECK"}; //说明没有检测到DS18B20
uchar code Temp[]={
"Temp:"}; //说明显示的是温度
uchar code Cent[]={
"C"}; //温度单位
uchar flag,tltemp; //负温度标志和临时暂存变量
/*****************************************************
函数功能:ms延时
******************************************************/
void delayms(uint ms)
{
uchar i,j;
for(i=0;i<ms;i++)
{
for(j=115;j>0;j--);
}
}
/*****************************************************************/
/***********************液晶LCD1602操作程序***********************/
/*****************************************************************/
sbit RS=P2^0; //寄存器选择位RS为P2.0
sbit RW=P2^1; //读写选择位RW为P2.1
sbit E=P2^2; //使能信号位E为P2.2
sbit BF=P0^7; //忙碌标志位BF为P0.7
/*****************************************************
函数功能:判断液晶模块的忙碌状态
返回值:busy。busy=1,忙碌;busy=0,不忙
******************************************************/
bit BusyTest(void)
{
bit busy;
RS=0; //RS为低电平,RW为高电平时,可以读状态
RW=1;
E=1; //E=1,才允许读写
_nop_(); //空操作四个机器周期,给硬件反应时间
_nop_();
_nop_();
_nop_();
busy=BF; //将忙碌标志电平赋给m
E=0;
return busy; //将忙碌标志电平赋给m
}
/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:z
******************************************************/
void Write_zl(uchar z)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //RS和RW同时为低电平时,可以写入指令
RW=0;
E=0; //使能信号E置低电平(写指令前先赋低电平0)
_nop_();
_nop_(); //空操作两个机器周期,给硬件反应时间
P0=z; //将数据送入P0口(数据总线line),即写入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=1; //使能信号E上升沿(0到1)时读取信息
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=0; //使能信号E下降沿(1到0)时执行指令
}
/*****************************************************
函数功能:指定字符显示的实际地址
入口参数:x
******************************************************/
void WriteAddress(uchar x)
{
Write_zl(