单片机+DS18B20+12864液晶显示温度及温度变化的波形

该博客介绍了一个使用单片机结合DS18B20传感器和12864液晶显示器来显示温度和温度变化波形的项目。博主详细地分享了代码实现,包括初始化设置、数据读取、LCD显示和红外遥控接收等部分。
摘要由CSDN通过智能技术生成

#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("南

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值