51单片机+1602+dht11显示温湿度例程代码如下:

/*****************************************************************联系:请勿转载!
**功能描述:1602显示 dht11温度湿度
**管脚说明:显示器1602管脚RS_P2.4,RW_P2.5,EN_P2.6 排口P0dht11管脚date_P2.7 蜂鸣器P2^3 加湿器继电器控制端_P2^2
**更新时间:2019/4/16****************************************************************/# include <reg51.h>             //头文件不需做修改
# include <intrins.h>typedef unsigned char BYTE;     //定义部分
typedef unsigned int WORD;
#define uint unsigned int
#define uchar unsigned char sbit beep=P2^3;                   //蜂鸣器
sbit hd=P2^2;                   //继电器控制端
sbit io=P2^7;                   //dht11data端接单片机的P2.7口
sbit rw=P2^5;                   //一下三行是设置lcd1602的使能端
sbit rs=P2^4;
sbit ep=P2^6; typedef bit BOOL;               //此声明一个布尔型变量即真或假// uchar data_byte;                //定义部分
uchar RH,RL,TH,TL; //***************延时函数************************************* void delay(uchar ms)          //毫秒延时模块//
{ uchar i; while(ms--)                 for(i=0;i<100;i++);
} void delay1()                  //一个for循环大概需要8个多机器周期,一个机器周期为1us,晶振为12MHz,本函数延时8us
{ uchar i; for(i=0;i<1;i++);
} //***************************************************************
//lcd模块//
BOOL lcd_bz()//测试lcd忙碌状态返回值为布尔型数值真或假'1'.'0'
{ BOOL result;rs=0;           // 读忙信号rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P0&0x80);ep=0;result ;
}     void write_cmd(uchar cmd)//写指令//
{ while (lcd_bz());rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd ;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;
}
void write_addr(uchar addr)//写地址//
{ write_cmd(addr|0x80);//LCD第一行的首地址为0x80第二行的首地址为0x80+0x40=0xc0
}
void write_byte(uchar dat) //写字节//
{ while (lcd_bz());rs=1;rw=0;ep=0;_nop_();_nop_();P0=dat ;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;
}
void lcd_init() //lcd初始化//
{ write_cmd(0x38);//设置LCD两行显示一个数据由5*7点阵表示,数据由8跟线传输 delay(1); write_cmd(0x0c);//清除屏幕显示 delay(1); write_cmd(0x06);//设定输入方式增量不移位 delay(1); write_cmd(0x01);//开整体显示关光标不闪烁 delay(1);
}
void display(uchar addr,uchar q)//在某一地址上显示内容adder表示的是地址偏移量q表示显示的字符或数字//
{ delay(10);   write_addr(addr); write_byte(q); delay(1);//修改此时间可以改变LCD上数值跳变的数度
} //**************************dht11测试模块*************************************// void start()//开始信号
{ io=1; delay1(); io=0; delay(25);// 主机把总线拉低必须大于18ms保证DHT11能检测到起始信号 io=1;    //发送开始信号结束后拉高电平延时20-40us delay1();//以下三个延时函数差不多为24us符合要求 delay1(); delay1();
}
uchar receive_byte()//接收一个字节//
{ uchar i,temp; for(i=0;i<8;i++)//接收8bit的数据 { while(!io);//等待50us的低电平开始信号结束 delay1();//开始信号结束之后延时26us-28us以下三个延时函数 delay1(); delay1(); temp=0;//时间为26us-28us表示接收的为数据'0' if(io==1) temp=1; //如果26us-28us之后还为高电平则表示接收的数据为'1' while(io);//等待数据信号高电平'0'为26us-28us'1'为70us data_byte<<=1;//接收的数据为高位在前右移 data_byte|=temp; } return data_byte;
}
void receive()//接收数据//
{ uchar T_H,T_L,R_H,R_L,check,num_check,i; start();//开始信号// io=1;   //主机设为输入判断从机DHT11响应信号 if(!io)//判断从机是否有低电平响应信号// {  while(!io);//判断从机发出 80us 的低电平响应信号是否结束// while(io);//判断从机发出 80us 的高电平是否结束如结束则主机进入数据接收状态 R_H=receive_byte();//湿度高位 R_L=receive_byte();//湿度低位 T_H=receive_byte();//温度高位 T_L=receive_byte();//温度低位 check=receive_byte();//校验位 io=0; //当最后一bit数据接完毕后从机拉低电平50us// for(i=0;i<7;i++)//差不多50us的延时 delay1(); io=1;//总线由上拉电阻拉高进入空闲状态 num_check=R_H+R_L+T_H+T_L; if(num_check==check)//判断读到的四个数据之和是否与校验位相同 { RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=num_check; } }
}
//**************功能函数******************************************************
void dis_t_h()        //扫描显示温度湿度数据
{receive();//接收数据 display(0x00,'R');//LCD的第一行显示 display(0x01,':'); display(0x02,RH/10+0x30); //0x30表示带字库的LCD1602中0x30的位置放有数字0RH/10+0x30即表示湿度的十位数字在字库RH/10+0x30的位置处放着 display(0x03,RH%10+0x30); display(0X04,'%'); display(0x40,'T');//LCD的第二行显示 display(0x41,':'); display(0x42,TH/10+0x30); display(0x43,TH%10+0x30); display(0x44,0xdf);//以下两个是温度单位的处理 display(0x45,0x43);
}
void deep_alarm()
{int i;for(i=0;i<3;i++){beep=0;delay(500);beep=1;delay(500);}
}
//*****************************************************************************void main()//主函数模块//
{ lcd_init();//初始化LCD beep=0;      //关闭继电器和蜂鸣器hd=1;while(1) { dis_t_h();}
}

【嵌入式】51单片机+1602+dht11显示温湿度相关推荐

  1. 基于51单片机的LCD1602显示温湿度

    51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...

  2. 基于51单片机1602温度显示时钟

    基于51单片机LCD1602温度显示时钟 要在1602上显示时间和温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 :时间显示可以用时钟芯片DS1302,但是此次我 ...

  3. 【无标题】基于51单片机和DHT11的温湿度检测系统

    基于51单片机的温湿度检测系统 摘 要:设计一款能够实时检测当前空气温度和湿度的装置.主控芯片采用STC12C5A60S2芯片,温湿度传感器采用DHT11数字温湿度传感器,显示屏幕采用OLED屏幕.整 ...

  4. 51单片机控制DHT11温湿度传感器,并使用OLED屏幕显示

    目录 前言 一.MCU主控选型 二.DHT11温湿度传感器 1.模块介绍 2.软件实现 DHT11.c DHT11.h 三.OLED显示屏 1.模块介绍 2.软件实现 OLED.c OLED.h OL ...

  5. ADC0832测电阻原理及51单片机1602显示

    前言:今天中午和高中老同学一起吃了个饭,同学计算机专业代码大佬,问起我有没有CSDN,我说有些时候会在上面看一些程序,他随即向我说起了他已经在CSDN上发表了很多文章目前排名一万多,因为我学集成电路专 ...

  6. 51lcd显示光传感器c语言程序,基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例...

    基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例,系统由GY-30数字光照传感器.51单片机最小系统.1602液晶显示屏组成,电路简单,附件中的程序是实物验证过了的.1 ...

  7. 电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键

    电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键 这次课程设计要完成的是制作一个基于51单片机的电子时钟的万年历(protues仿真),需要用到1602液晶屏+DS130 ...

  8. 基于51单片机LCD1602温度显示(DS18B20测温)

    基于51单片机DS18B20测温 要在1602上显示温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 DS18B20是美国DALLAS半导体公司推出的第一片支持&q ...

  9. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

最新文章

  1. CNN模型 INT8 量化实现方式(一)
  2. pythonis啥意思-isinstance在python中的意思是什么?
  3. seo优化源码_seo按天计费系统,无需登陆批量查询关键词价格
  4. 边框border属性总结
  5. 云原生应用程序运行时 Kyma 简介
  6. Java泛型中的子类型化
  7. 在python中使用zookeeper管理你的应用集群
  8. 安装JavaFX Scene Builder 到Eclipse
  9. 常见排序算法之选择排序
  10. PHP聚合直播盒子网站源码聚合全网直播
  11. UNIX网络编程的5种IO模型
  12. 对抗机器学习——Min Max模型(Towards Deep Learning Models Resistant to Adversarial Attacks)
  13. hbase+phoenix开发预演小例子
  14. Python 合并两个或多个pdf文件(获取pdf文件指定页)
  15. 高中生自我评语 高中毕业生自我鉴定
  16. Springboot毕设项目基于Vue和Springboot的会议室管理系统hbb9kjava+VUE+Mybatis+Maven+Mysql+sprnig)
  17. pcl::compute3DCentroid()计算质心算法原理
  18. MySQL 数据库存储引擎
  19. php采集网页 alpha版
  20. Linux进程和计划任务的管理

热门文章

  1. 你人生中的那口井挖了没有?(转潇湘隐者)
  2. 管理咨询的甲方和乙方
  3. 南大计算机学院在职博士,南京大学双证在职博士
  4. 小区网络视频监控系统解决方案
  5. python中文聊天_Python下两种曲线救国实现AIML中文聊天机器人功能的方法
  6. 使用handeye_calib_camodocal进行手眼标定
  7. level2买股技巧_同花顺level2使用技巧
  8. Android 新建module时的ByteCode Level
  9. 【专题5:硬件设计】 之 【49.运算放大器详解a - 三极管的放大作用和静态工作点】
  10. 微米级颗粒清洗新技术