基于51单片机的温度检测系统程序及仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);