基于51单片机的温度检测系统程序及仿真

  • 格式:doc
  • 大小:97.50 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//****************************************

//**用DS18B20进行测量,lcd1602显示**

//****************************************

#include "reg51.h"

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int

uchar code table1 []={"ID: "}; //欢迎显示,包括空格在内<=16 uchar code table2 []={"Name: "};//欢迎显示,包括空格在内<=16 uchar code str1 []={" Temperature "};

uchar code str2 []={" "};

//************管脚定义************************

sbit lcd_rs = P3^0; //液晶数据命令选择端

sbit lcd_en = P3^1; //液晶使能

sbit DQ = P3^6; //液晶使能

//************参数定义************************

uint tvalue;//温度值

uchar tflag;//温度正负标志

uchar data disdata[5];

//************子函数定义************************

void delay(uchar z); //delay延时子程序

void init_lcd(); //LCD1602初始化函数

void write_com(uchar com); //LCD1602写指令函数

void write_data(uchar date); //LCD1602写数据函数

void lcd1602_display(uchar *q,uchar *p);//LCD1602显示函数

void welcome(); //LCD1602显示欢迎函数

void delay_DS18B20(uint i); //delay_DS18B20函数

void Init_DS18B20_display(); //DS18B20初始化显示

void Init_DS18B20(); //DS18B20初始化

uchar ReadOneByte(); //DS18B20读一字节

void WriteOneByte(uchar dat); //DS18B20写一字节

Read_Temperature(); //DS18B20读取温度值并转换

void DS18B20_display(); //DS18B20温度显示

//************主函数************************

void main()

{ welcome();

delay(2000);

Init_DS18B20_display();

while(1)

{

Read_Temperature();

DS18B20_display();

}

}

//************delay延时子程序************************

void delay(uchar z)

{

uchar x,y;

for(x=0;x

for(y=0;y<114;y++);

}

//************LCD1602初始化函数************************

void init_lcd()

{

write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口write_com(0x08); //写一个字符后地址指针加1

write_com(0x01); //显示清零,数据指针清零

write_com(0x06); //写一个字符后地址指针加1

write_com(0x0c); //关显示,光标不显示不闪烁

}

//************LCD1602写指令函数************************

void write_com(uchar com)

{

delay(5);

lcd_rs = 0; // 选择写指令

lcd_en = 0; // 将使能端置0

P2 = com; // 将要写的命令送到数据总线上

delay(5); // 延时5ms,待数据稳定

lcd_en = 1; // 由于初始化已将lcd_en置为0,使能端给一个高脉冲,delay(5); // 延时5ms,待数据稳定

lcd_en = 0; // 将使能端置0以完成脉冲

}

//************LCD1602写数据函数************************

void write_data(uchar date)

{

delay(5);

lcd_rs = 1; // 选择写数据

lcd_en = 0; // 将使能端置0

P2 = date; // 将要写的数据送到数据总线上

delay(5); // 延时5ms,待数据稳定

lcd_en = 1; // 由于初始化已将lcd_en置为0,使能端给一个高脉冲,delay(5); // 延时5ms,待数据稳定

lcd_en = 0; // 将使能端置0以完成脉冲

}

//************LCD1602显示函数******************

void lcd1602_display(uchar *q,uchar *p)

{

write_com(0x80); // 现将数据指针定位到第一行第一个字处

while(*q!='\0')

{

write_data(*q);

q++;

delay(1);

}

write_com(0xc0); // 现将数据指针定位到第二行第一个字处

while(*p!='\0')

{

write_data(*p);