#include<reg51.h>
#include<stdlib.h>
#include<stdio.h>//头文件
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^6;//ds18b20与单片机连接口
sbit PWM=P2^5;//控制信号的输出
unsigned char code str[]={"my name is zhb "};
unsigned char code str_[]={"MADE IN NUPT... "};
unsigned char code str1[]={"temper:"};
unsigned char code str2[]={" "};
unsigned char code nul[]={" "};
unsigned char code str3[]={"target: "};
unsigned char str4[6];//设定温度的存储
uchar data disdata[5];
uchar a[4]={0,0,0,0},j,i,k,num=0; //定义变量
sbit js=P3^2; //红外接收端
uchar zhb_flag=0;//保证一次解码,只执行一次代码
uint tvalue;//温度值
uchar tflag;//温度正负标志
uint count=0;//按键次数初始化为0
uint number=4;//暂时规定输入的温度为xx.x的形式
uchar j,key;
uint time_flag=0;
bit enterflag=0; // 确认键按下与否标志
uint new_t; //转化后的十进制实时温度
uint target=0; //转化后的十进制的目标温度---有键盘输入
//------------定义接口-------------//
sbit RS=P2^2 ;
sbit RW=P2^3 ;
sbit E=P2^4;
sbit PSB= P2^5; //H=并口; L="串口";
#define Lcd_Bus P0
// P0 接 LCM
#define uchar unsigned char
#define FIRST_ADDR 0
//定义字符/汉字显示起始位置
/*------------------检查忙位-----------------------------*/
void chk_busy()
{
RS=0 ;
RW=1 ;
E=1 ;
Lcd_Bus=0xff ;
while((Lcd_Bus&0x80)==0x80);
E=0 ;
}
/*------------------延时子程序-----------------------------*/
void lcd_delay(unsigned int t)
{
unsigned int i,j ;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
chk_busy();
RS=0 ;
RW=0 ;
E=1 ;
Lcd_Bus=cmdcode ;
lcd_delay(5);
//------------------在数据写入的时候加入适当的延时
E=0 ;
lcd_delay(5);
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
chk_busy();
RS=1 ;
RW=0 ;
E=1 ;
Lcd_Bus=Dispdata ;
lcd_delay(5);
//------------------在数据写入的时候加入适当的延时
E=0 ;
lcd_delay(5);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{
PSB = 1;
lcd_delay(2000);
write_com(0x30);
lcd_delay(10);
//选择基本指令集
write_com(0x30);
//选择8bit数据流
lcd_delay(5);
write_com(0x0c);
//开显示(无游标、不反白)
lcd_delay(10);
write_com(0x01);
//清除显示,并且设定地址指针为00H
lcd_delay(500);
write_com(0x06);
//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
lcd_delay(0);
}
/*------------------显示字符串--------------------------*/
void hzkdis(unsigned char code*s)
{
while(*s>0)
{
write_data(*s);
s++;
lcd_delay(50);
}
}
/*------------------首屏显示--------------------------*/
void ceshi()
{
write_com(0x01);
//清除显示,并且设定地址指针为00H
lcd_delay(5);
write_com(0x80);
//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
hzkdis("南