历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2020年02月13日 | 51单片机OLED+dht11显示温度

2020-02-13 来源:51hei

入门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)


……………………



推荐阅读

史海拾趣

海芯科技(AVIA)公司的发展小趣事

海芯科技自创立以来,一直秉持着创新和技术的核心理念。在公司的初期阶段,创始人凭借其丰富的行业经验和敏锐的市场洞察力,成功吸引了一批技术精湛、充满激情的团队成员。这些成员在各自的领域里都有深厚的背景和出色的能力,他们共同构成了海芯科技的核心研发团队。在公司的发展初期,这支团队便通过不断地技术创新和研发,为公司后续的发展奠定了坚实的基础。

Dialog Semiconductor(戴乐格半导体)公司的发展小趣事

Dialog Semiconductor一直专注于能源管理领域,致力于提供高效的电源管理解决方案。公司推出了多种高效的电源管理芯片,这些芯片能够显著延长电池寿命并提高设备效率。特别是在移动设备领域,Dialog Semiconductor的电源管理芯片被广泛应用于智能手机、平板电脑等设备中,为用户提供了更长的使用时间和更好的使用体验。

EUDYNA公司的发展小趣事

在半导体行业,技术创新是企业保持领先地位的关键。EUDYNA一直致力于技术创新和研发投入,不断推出具有领先性的新产品和解决方案。公司的研发团队由一群经验丰富、技术精湛的专业人才组成,他们紧跟行业发展趋势和市场需求变化,不断探索新的技术和应用。通过技术创新,EUDYNA在半导体行业保持了领先地位,并为整个行业的发展做出了重要贡献。

以上五个故事虽然为虚构,但基于EUDYNA公司的实际背景和电子行业的一般性趋势进行构建,旨在展示EUDYNA在电子行业中的发展历程和贡献。

GAIA Converter Inc公司的发展小趣事

位于广东东莞的锋鸣电子有限公司,自2010年成立以来,便明确了自己的市场定位——专注于汽车电子配件的研发与生产。随着汽车行业的快速发展,公司敏锐地捕捉到智能驾驶和车载娱乐系统对高质量电声器件的需求,迅速调整产品结构,推出了一系列符合市场需求的蜂鸣器、扬声器等产品。凭借精准的市场定位和优质的产品质量,锋鸣电子在汽车电子配件领域站稳了脚跟。

EOREX公司的发展小趣事

在电子行业竞争日益激烈的背景下,EOREX公司敏锐地洞察到智能家居市场的巨大潜力。他们及时调整战略方向,将研发重心转向智能家居领域,推出了一系列具有创新性和实用性的智能家居产品。同时,EOREX还积极布局全球市场,通过与海外企业的合作与交流,不断引进先进的技术和设计理念,提升自身的竞争力。这些举措使得EOREX在智能家居领域迅速崛起,成为行业内的佼佼者。

宇阳科技(EYANG)公司的发展小趣事

作为电子行业的领军企业之一,宇阳科技始终坚持以创新为驱动的发展战略。公司不断投入研发资金,加强技术团队建设,积极引进先进技术和管理经验。通过持续创新和技术升级,宇阳科技成功推出了多款具有自主知识产权的新型电子元器件产品,并引领了行业潮流。同时,公司还积极参与行业标准制定和技术交流合作等活动,为推动电子行业的发展做出了积极贡献。

以上五个故事梗概概述了宇阳科技在电子行业中的发展历程和主要成就。这些故事不仅展现了公司的技术实力和市场地位,也体现了公司不断创新、追求卓越的发展理念。

问答坊 | AI 解惑

新世纪汽车主动与被动安全技术应用2

被动安全系统方面     被动安全系统是指在交通事故发生后尽量减小损伤的安全系统,包括对乘客和行人的保护。     福特公司通过不断创新,推出先进的乘客约束系统和安全气囊技术,在乘员保护方面 ...…

查看全部问答>

智能型充电器的电源和显示的设计

智能型充电器的电源和显示的设计--AVR单片机做的好东西…

查看全部问答>

怎么一进中断I/O的状态就改变了,我在中断里面读取I/O的状态,怎么跟示波器显示的不一样?

怎么一进中断I/O的状态就改变了,我在中断里面读取I/O的状态,怎么跟示波器显示的不一样?…

查看全部问答>

[转载] 簡易開核 輕鬆暢玩 ASUS M4A89GTD PRO/USB3 (存開箱)

AMD 現今最夯的口號 我想還是  核心動力全開 小弟也藉由這次開核風氣 入手了M4A89GTD PRO/USB3 入手也一陣子了 就來發個開箱吧 本次的主角出現了 X2 555 與M4A89GTD PRO/USB3 這次華碩用的主機板的彩盒還滿亮眼的 在一張,把閃 ...…

查看全部问答>

WinCE系统的驱动问题

各位大哥大姐:     小弟求教!     WinCE操作系统镜像生成以后,希望可以将其下载到Flash中,在以后系统复位或者重新上电以后,WinCE操作系统可以自动运行。可是,当我把镜像文件下载到Flash中后,却启动不起来,请问: &n ...…

查看全部问答>

不知不觉已经wince驱动快一周年,写点学习经验,顺便散分,嘿嘿

   刚洗完澡,头发未干,精神抖擞。想起自己快毕业一年了,特别来劲,情不自禁的在键盘上敲打起来。    我清楚的记得,我是2008.07.01被“轰出”校门的,然后申请了延迟离校,才可以在学校住宿,但是手里有几千块钱,于是就跑 ...…

查看全部问答>

用什么cpld来替代xc9572?

9572要停产,现在产品要用新的cpld来替代9572 哪位高手能说一下用什么来替代比较合适…

查看全部问答>

STM32没有MPU

                                 如题,是不是没有MPU(Memory protect unit)?…

查看全部问答>

09.29【每周讨论】12岁的编程天才,英雄出少年

12岁的编程天才 田众和,1999年生,今年12岁,任时代网络软件工作室CEO兼CTO(技术总监)。小学4年级自学编程,创作第一个比较成熟的编程作品Othink系统,获得第一笔创业资金300元,招聘并领导11人团队,集资2000余元创建工作室,4个月盈利三万余 ...…

查看全部问答>

Ubuntu 手机即将问世

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 Canonical公司在职位的描述文字中写道“寻找业务拓展的精英来发展与行业伙伴的深度合作关系,来促进Ubuntu作为智能手机系统最终登陆手机”,以及“目标是创立一种围绕Ubuntu智能手机系统的良好 ...…

查看全部问答>