单片机+DHT11+1602显示屏

发布者:二进制游侠最新更新时间:2020-11-28 来源: 51hei关键字:单片机  DHT11  1602显示屏 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

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

  本实验仅限学习交流  AT89C52  12Mhz DHT11 LCD1602

   接线如下

   DHT11_DQ = P2^0

   LCD1602_E= P2^7

   LCD1602_RW=P2^5

   LCD1602_RS=P2^6

   D0—D7接到P0口

   本实验没有用到DHT的校验位Check_Init,想使用校验位,定义一个变量t,t=HUMI_Buffer_Int+HUMI_Low_Int+TEM_Buffer_Int+TEM_Low_Int;

   判断t与Check_Init是否相等。

         本实验只显示了整数部分,小数部分没显示,小数部分显示和整数部分显示一样,类别进行。

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

#include"dht11.h"

#include"reg52.h"

#include"lcd.h"

unsigned char dis[]="RH:";        //湿度字符串

unsigned char dis1[]="TEMP:"; //温度字符串

unsigned char i;

int main()

{ LcdInit();           //1602初始化

DHT11_Init();           //DHT11初始化

while(1)

{

   DHT11_Read();  //DHT11数值读取

   LcdWriteCom(0x80);//第一列第一个字符

   for(i=0;i<3;i++)

   {

           LcdWriteData(dis[i]); //显示“RH:”

   }

   LcdWriteData(HUMI_Buffer_Int/10+0x30);        //显示湿度的十位

   LcdWriteData(HUMI_Buffer_Int%10+0x30);        //显示湿度的个位

   LcdWriteData(0x25);                                                //显示字符“%”

   LcdWriteCom(0x80+0x40);                                        //第二行第一个

   for(i=0;i<5;i++)

   {

                   LcdWriteData(dis1[i]);                           //显示字符“TEMP”

   }

   LcdWriteData(TEM_Buffer_Int/10+0x30);   //显示温度的十位

   LcdWriteData(TEM_Buffer_Int%10+0x30);   //显示温度的个位

   LcdWriteData(0xDF);

   LcdWriteData(0x43);                                   //显示字符“%”

}



}


#include "DHT11.h"


//定义变量

unsigned char HUMI_Buffer_Int = 0;            //湿度高位

unsigned char HUMI_Low_Int=0;                        //湿度低位

unsigned char TEM_Buffer_Int = 0;                //温度高位

unsigned char TEM_Low_Int=0;                        //温度低位

unsigned char Check_Init=0;                                //检验位

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

//MS延时函数(12M晶振下测试)

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

void DHT11_delay_ms(unsigned int n)

{

        unsigned int  i,j;

        for(i=n;i>0;i--)

        {

        for(j=112;j>0;j--);

        }

}

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

//延时函数

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

void DHT11_Delay( unsigned int n )

{

        unsigned int i;

        for(i = 0 ; i < n ; i++ );

}


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

//初始化DHT11

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

bit DHT11_Init()

{

        bit Flag_DHT11 = 1;

        DHT11_DQ = 0;

        DHT11_delay_ms(25);                        //延时>18ms


        DHT11_DQ = 1;

        DHT11_Delay(2);                                //延时20~40us


        DHT11_Delay(2);                                

        Flag_DHT11 = DHT11_DQ;               

        DHT11_Delay(2);                                //DHT11响应总时间80us


        DHT11_Delay(4);                                //DHT11拉高信号80us


        return Flag_DHT11;               

}


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

//读一个字节DHT11数据

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

unsigned char DHT11_Read_Byte()

{

        unsigned char i,dat,j;

        while( DHT11_DQ == 1 );

        for( i = 0 ; i < 8 ; i++ )

        {

                while( DHT11_DQ == 0 );        

                dat <<= 1;

                for( j = 0 ; DHT11_DQ == 1 ; j++);

                if( j < 10 )

                        dat &= 0xfe;                //低位清零

                else

                        dat |= 0x01;                //低位置一

        }

        return dat;

}


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

//读取温湿度值,存放在TEM_Buffer和HUMI_Buffer

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

void DHT11_Read()

{

        if( DHT11_Init() == 0 )

        {

                HUMI_Buffer_Int = DHT11_Read_Byte();                   //读取湿度的整数值

                HUMI_Low_Int=DHT11_Read_Byte();                                //读取湿度的小数值

                TEM_Buffer_Int = DHT11_Read_Byte();                        //读取温度的整数值

                TEM_Low_Int=DHT11_Read_Byte();                    //读取温度的小数值

                Check_Init=DHT11_Read_Byte();                                //读取校验和

                DHT11_Delay(3);                                        //DHT11拉低总线50us


                DHT11_DQ = 1;                                        //释放总线                        

        }        

}



关键字:单片机  DHT11  1602显示屏 引用地址:单片机+DHT11+1602显示屏

上一篇:单片机+L298直流电机驱动程序
下一篇:单片机89C52 控制ISD4004语音芯片,多段录放音源码

推荐阅读最新更新时间:2024-11-17 07:36

打开汽车仪表盘,看看里面都用啥MCU
随着汽车电子技术的飞速发展,传统的车用机械仪表盘已呈现出向数字仪表过度的趋势,与之对应的全部功能显示也将被渲染后的高清画面所取代。而引起这一巨大变革的根源,却是一个只有一元硬币大小的集成电子芯片——图形仪表盘MCU(图形仪表盘微控制单元),今天我们就以之为题为您讲述汽车仪表变革背后的故事。 数字仪表盘背后的秘密 我相信很多人在第一次看到数字仪表盘的时候跟我一样,都会觉得既科幻又漂亮,可不知你是否想过这种绚丽的效果是如何打造出来的呢?是不是只要有一个分辨率够高的显示屏幕就万事大吉了呢?其实并没有想象中那样简单。高品质的图像的确离不开一块好的显示屏,但与之相比更为核心的部件,是一个被称为车用MCU的小家伙。 车用MC
[嵌入式]
基于单片机设计的通用汉字文本播音系统
嵌入式语音播放系统应用日益广泛。汉字语音播放的方法有录音芯片法、语音合成芯片法及汉字语音库法等。Flash存储器容量不断增大,利用Windows的Speech SDK可以方便地提取汉字语音文件,因此汉字语音库法得以广泛应用。   汉字语音库法可分为专用语音播放和通用语音播放两类。专用语音播放系统只存储少量固定的语音资源,只需较小的存储容量,但应用范围有限。通用语音播放系统存储所有不同读音汉字的单字语音资源,可实现任意文本组合的语音播放,适用于播放内容经常更新的场合。本系统由1220个不同读音汉字读音文件构成语音库,存于一片Flash存储器中,实现了基于SPCE061A的嵌入式通用汉字文本语音播放系统。系统硬件简单,使用方便
[单片机]
恩智浦推出首款集成CAN-FD的汽车级蓝牙5-Ready无线微控制器
恩智浦半导体公司(纳斯达克代码:NXPI)今天宣布推出Kinetis KW35/36 MCU系列,这是业界首个集成CAN-FD连接功能的汽车级蓝牙5-ready无线MCU系列。其AEC Q100-Grade 2温度范围配合最新的蓝牙技术,使得这个全新MCU系列能够在汽车应用中提供卓越的耐用性和性能。 Kinetis KW35/36蓝牙技术旨在简化汽车中的蓝牙连接功能集成,使汽车制造商能够为消费者提供更多的便利,通过智能手机来控制许多功能,例如解锁汽车、与朋友或家人远程共享钥匙、个性化调整座椅位置以及温度和信息娱乐设置、控制车辆内外照明等。作为汽车和安全解决方案的市场领导者,全新Kinetis KW35/36无线MCU系列为公司
[汽车电子]
Microchip推出专为电机控制和通用应用的新型32位PIC32系列MCU
Microchip PIC32MK系列集成模拟外设、双USB功能,可支持多达4个CAN 2.0端口 全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)近日发布最新的PIC32单片机(MCU)系列。新的PIC32MK系列共包含4款高度集成、用于高精度双电机控制应用的MCU器件(PIC32MK MC),以及8款带有串行通信模块、用于通用应用的MCU器件(PIC32MK GP)。所有MC和GP器件均包含一个120 MHz 32位内核,可支持DSP(数字信号处理器)指令。此外,为了简化控制算法的开发工作,MCU内核中还集成了一个双精度浮点单元
[单片机]
Microchip推出专为电机控制和通用应用的新型32位PIC32系列<font color='red'>MCU</font>
MSP430单片机学习(一)——Flash读写操作
声明:本文以MSP430F2122为例说明Flash读写操作。 一、MSP430F2122的FLASH结构 FLASH模块结构图如图一 图一 MSP430 FLASH型单片机的FLASH存储器分为主存储器和信息存储器。主存储器根据不同的容量分为若干段(segment)每个段为512字节,每一个段又有四个块(block),每个块为64字节;信息存储器分为SegmengA、SegmentB、SegmentC和SegmentD,其中每个段各有64个字节。如图二所示 图二 二、FLASH模块的寄存器 相关的寄存器有:FCTL1、FCTL2、FCTL3和IE1 图三 图四 图五 图六
[单片机]
MSP430<font color='red'>单片机</font>学习(一)——Flash读写操作
基于PIC单片机的可编程电源设计
引言 随着各种电器和仪表设备的日渐丰富,对电源应用的灵活性提出了更高的要求。设计一款使用灵活、方便且价格相对便宜的通用电源,正越来越成为市场所需。现代单片机正朝着处理速度越来越快,外设资源越来越丰富,价格越来越便宜的方向发展,将单片机融入电源的设计中可以极大地提升电源的性能和灵活性。本文介绍了一种单片机加PWM芯片的开关电源设计方法,既可以保留PWM芯片带来的稳定工作性能,又可以利用单片机的控制能力提供各种人机交互和通信接口。笔者设计的电源作为通用电源使用,可以提供灵活可编程的电压电流输出,另外还可以设置成铅酸电池充电器的模式,具有广阔的应用前景。 1 系统功能 通过对电源的编程,可以方便地实现图1所示的电压输出波形。其中,
[单片机]
基于PIC<font color='red'>单片机</font>的可编程电源设计
一种基于单片机的函数发生器的设计实现
1 引 言      在自动控制系统设计及调试过程中,不同频率的正弦波、三角波和方波常作为信号源,应用十分方便。过去常由分立元件及集成运放构成振荡器,后来出现的ICL8038其最高频率仅能达到100kHz。而MAX038芯片性能更好,最高频率可达20MHz,且三种波形由同一端输出。单片机控制品质卓越,基于单片机的函数发生器运行可靠,操作方便。 2 高频信号发生器芯片MAX038简介      MAXIM公司生产的MAX038芯片是一种高频精密的函数发生器,可产生三角波、锯齿波、正弦波、方波及脉冲波,且频率及占空比的控制可独立进行。      Lin管脚电流范围在10~400μA时电路获得最佳工作性能。输出波形的选择由逻辑地
[单片机]
基于单片机的直接数字频率合成器的设计
1 引 言 频率合成技术迄今已经历了三代:直接频率合成技术、锁相环频率合成技术、直接数字式频率合成技术。直接数字式频率合成(Direct Digital Frequency Synthesis,DDFS或DDS)是第三代频率合成技术的标志,他的主要特点是计算机参与频率合成,既可以用软件来实现,也可以用硬件来实现,或二者结合。直接数字式频率合成器的最大优点就是频率切换的速度极快(可达几微秒),并且频率、相位和幅度都可控,输出频率稳定度可达系统时钟的稳定度量级,易于集成化,更主要的是由于计算机参与频率合成,故可充分发挥软件的作用。虽然现有的专用DDFS芯片的功能也比较多,但控制方式却是固定的,因此不一定是我们所需要的。本文利用80C
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved