51单片机OLED+dht11显示温度

发布者:创新思维最新更新时间:2020-02-13 来源: 51hei关键字:51单片机  OLED  dht11  显示温度 手机看文章 扫描二维码
随时随地手机看文章

入门51单片机一个多月,参加一个比赛熬夜写出了OLED+DHT11程序。

单片机源程序如下:

#include "REG51.h"

#include "oled.h"

#include

typedef unsigned char BYTE;

typedef unsigned int WORD;

#define uint unsigned int 

#define uchar unsigned char 

sbit io=P1^2;//dht11data端接单片机的P1^0口//

sbit IN1 = P1^0;                         

sbit IN2 = P1^1;  //输入电机接口

sbit K1  = P3^0;

sbit K2  = P3^1;          //按键接口

uchar data_byte; 


uchar RH,RL,TH,TL; 


int count1,a; 

void DelayUs2x(unsigned char t)


{


        while(--t);


}


void DelayMs(unsigned char t)


{


        while(t--)


        {


//大致延时1mS


        DelayUs2x(245);


        DelayUs2x(245);


        }


}


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++); 



//电机的程序

void ZHUAN(){

        

          IN2=0;

   }



void speed(int cnt,int sd) 

{  

if(cnt        {

        IN1=1;

        } 

else  

        {

        IN1=0;

        } 


}  

void turn(int cnt,int sd)                                   

{  

    ZHUAN();          

        speed(cnt,sd); 

}  




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; 

        } 

  } 


int main(void)

{        

        TMOD=0x01; 

        EA=1;  

        TH0=(65536-1000)/256;

        TL0=(65536-1000)%256; 

        ET0=1; 

        TR0=1; 

        

        a = 100;

                OLED_Init();                        //初始化OLED  

                OLED_Clear() ; 

                OLED_ShowCHinese(36,0,0);

                OLED_ShowCHinese(54,0,1);

                OLED_ShowCHinese(72,0,2);

                OLED_ShowCHinese(0,2,3);

                OLED_ShowCHinese(18,2,5);

                OLED_ShowCHinese(0,4,4);

                OLED_ShowCHinese(18,4,5);

                OLED_ShowString(37,4,":",16);

                  OLED_ShowString(37,2,":",16);

        while(1) 

        {

            turn(count1,a);


                if(K1==0)


                {


                        DelayMs(100);


                        if(K1==0)// 去抖动


                        {

                           if(a>=0)

                           a=a-10;

                        }


                        } 

                if(K2==0)


……………………



关键字:51单片机  OLED  dht11  显示温度 引用地址:51单片机OLED+dht11显示温度

上一篇:单片机指针学习
下一篇:oled显示温度报警的51单片机程序

推荐阅读最新更新时间:2024-11-06 19:28

iPhone X硬件成本357美元 毛利率达到64%
  11月7日据国外媒体报道, iPhone X 由于其昂贵的售价,成为了备受关注的一款产品。这款苹果有史以来价格最贵的iPhone,64GB版本售价售价为999美元,256GB版本售价为1149美元。国外数据研究公司Techlnsights对 iPhone X 的硬件成本进行了分析,总结了将 iPhone X 价格推高的部分原因。下面就随手机便携小编一起来了解一下相关内容吧。   据《路透社》的消息称,入门级iPhone X的硬件成本为357.5美元,售价为999美元,因此这就意味着该机的毛利率为64%。这一数字比iPhone 8略高一些,后者售价699美元,毛利率为59%。   将iPhone X拆解来看,5.8英寸 OLE
[手机便携]
奥迪将发布全新OLED车灯技术
    日前我们从官方获悉,奥迪将于9月15日开幕的法兰克福车展上发布全新的矩阵式OLED车灯技术,同时,车展现场将会展出一辆搭载OLED尾灯的概念车。     据悉,OLED全称为有机发光二极管,每个OLED单元含有两个电极,并且其中至少有一个是透明材料。这些电极单元由数层厚度不足千分之一毫米的有机半导体材料组成,低至3-4伏的直流电源就可使其发光,而发光的颜色则取决于不同的分子组合。     同时,不同于LED半导晶体结构的光源,OLED是平面光源,其优点是发出的光更加均匀,变光的调节过程也持续可变。同时,该技术无需反射器、导光板等光学组件,因此轻量化也是其一大优势。此外,OLED技术几乎无需任何冷却,并且
[汽车电子]
MCS-51单片机存储器扩展
主要内容: 第八部分 MCS-51单片机存储器扩展(1) 1、 概述 2、 系统总线及总线构造 3、 读写控制、地址空间分配和外部地址锁存器 4、 程序存储器EPROM的扩展 重点:系统总线及总线构造 存储器地址空间分配 外部地址锁存器74LS373 典型的外扩存储器的接口电路 难点:存储器地址空间分配 第8部分 MCS-51单片机扩展存储器的设计 8.1 概述 片内的资源如不满足需要,需外扩存储器和I/O功能部件:系统扩展问题,内容主要有: (1)外部存储器的扩展(外部存储器又分为外部程序存储器和外部数据存储器) (2) I/O接口部件的扩展。 本章介绍MCS – 51单片机如何扩展外部存储器,I/O接口部件
[单片机]
基于AT89C2051单片机的VCN-MIO智能节点模板电路设计
  0.引言   基于具有三个CPU且固化了LonTalk通信协议的神经元(Neuron)芯片的智能节点模板,由于Neuron芯片是八位处理器,而且只提供了11个通用I/O口,并采用了基于事件巡检的软件调度机制,故其控制功能相对较弱,使它无法完成实时性高的多进程、多任务的并行处理,不能满足采集量和控制量要求较多的多现场设备管控的高要求,且性价比较低。要满足这种高要求,就要减少Neuron芯片在外部事件上的开销,让其充分发挥它在通讯组网上的优越性,能使现场设备之间快速地交换信息,满足系统实时监控的要求;而对于提高网络节点的测控能力,必须另择门路。嵌入控制功能强、物美价廉的单片机,专门完成多节点的智能测控,构成一种基于AT89C2051
[单片机]
基于AT89C20<font color='red'>51单片机</font>的VCN-MIO智能节点模板电路设计
中移动科普OLED屏幕手机上DC调光的意义何在?
前阵子中国智能手机界流行上DC调光功能,由于手机厂商们把DC调光宣传的神乎其神,使得一些消费者以为只要OLED屏幕手机上了DC调光,就能保护视力,就可以放心大胆的玩手机了。 其实则不然,在近日中国移动终端实验室(简称中移动)特地发表长文科普手机上DC调光的意义。 中移动从手机上DC调光的原理进行了分析,DC调光是LCD屏幕常见的显示模式,要知道LCD屏本身不发光,主要通过背光层透过LCD面板来显示画面,而DC调光是通过改变电流或电压来调节屏幕整体的亮度,调光过程相对来讲自然柔和。 与之对应的是OLED屏的PWM调光,它是通过调整调光频率来调光,这时的屏幕是一直处在平常肉眼难以发现的高频闪烁,虽然难以发现但是闪烁是一直存在的,所
[手机便携]
从国内撕到美国 OLED和ULED为何这么拼?
国庆前夕是彩电企业发新品的高峰期,而2015年国庆新品的“口水仗”是OLED与ULED之争,并且这样“撕逼”大战已经传到了美国,我们先来看看在美国市场OLED与ULED发生了什么样的故事。 8月27日,海信在纽约设擂发布ULED电视,并公开叫板OLED电视。 随后海信65寸ULED电视65H10B在美国亚马逊上线,预售价格是2999美元。 在海信65H10B上线不久,就有用户发现,LG型号为65EG9600的65寸OLED电视下调了美国亚马逊的售价,从原本的8999.99美元下调到了5997.99美元,降幅达到了3002美元,将近降价三分之一。 美国亚马逊65寸OLED电视的价格大幅跳水 然后看似比较
[家用电子]
三星停产OLED电视是个错误:高端市场LG索尼得利
  对于 三星 来说,其最大的失误恐怕就是把精力都投入到中小尺寸 OLED 上。下面就随嵌入式小编一起来了解一下相关内容吧。   从2015年开始, 三星 停止生产 OLED 电视,声称市场还没有准备好接受高成本的技术,取而代之的是,重点发展QLED技术,但现在来看,这是一个错误的决定。   由于生产成本大幅下降, OLED 电视现在已经成为高端市场的主导技术。现在高端电视机指的是尺寸在55英寸或以上、售价在2500美元以上的电视机,而 三星 现在是唯一一家不生产OLED屏幕的大型电视机制造商,在这个领域上,LG则是最大的受益者。   除了LG外,另外一个受益者就是索尼,其成为了现在高端OLED屏电视的引领者,这也让三星羡慕不已
[嵌入式]
OLED产生白光的途径
  照明用白光应该具有好的显色指数( 75 )和好的色坐标位置(接近国际照明协会的色品图的( 0.33, 0.33 )点)。从 OLED 中产生白光大致可以分为以下两种途径。   ( a )波长转换。从 OLED 中发出的蓝光或紫外光被用来激发几种磷光材料,每种材料发出的不同颜色的光混合到一起,就可以得到具有丰富波长范围的白光。这个技术被成为磷光的下转换。   ( b )颜色混合。 这种方法是在一个器件中使用多个发光层,利用不同发光层发出的不同颜色的光混合,产生白光。白光可以通过混合2种互补色(蓝色和橙色)或三基色(红、绿、蓝)来得到。典型的通过多层结构来产生多种颜色的光,各种颜色混合起来得到白光的方法主要有:   (1)
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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