历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2020年12月29日 | 基于51单片机的dht11温湿度数码管显示

2020-12-29 来源:51hei


按button1可以切换模式

模式0 只显示温度

模式1 只显示湿度

模式2 动态显示温度和湿度,每5s切换一次



实物如下


温度显示

温度显示

湿度显示  小数

模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。


单片机源程序如下:

#include


bit DHT_Start();

bit DHT_ByteRead(unsigned char *dat);

void ConfigTimer0(unsigned int ms);

void Display_hum(unsigned char *num);

void Display_temp(unsigned char *num);



unsigned char T0RH = 0;  //T0重载值的高字节

unsigned char T0RL = 0;  //T0重载值的低字节

unsigned char str=88;

unsigned char DHT[5];


unsigned int tmr1s = 0;

unsigned int tmr10ms = 0;

unsigned char st=0;

unsigned int sdd=0;

unsigned char td=0;

unsigned char mode=0;


bit flag1s = 0;

bit flag10ms = 0;

int x;

            

sbit button1=P0^0;

sbit dot=P1^3;   //数码管小数点



void delay(unsigned char x)   //延时ms

{

    unsigned char a,b,c;

        for(c=x;c>0;c--)

    {

                for(b=102;b>0;b--)

        for(a=3;a>0;a--);

        }

}

void main()          

{                 


    bit tmp;

        dot=0;

    EA = 1;            //开总中断

    ConfigTimer0(10);  //T0定时10ms

//        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;

    DHT_Start();

    delay(5);


    while (1)

    {



        if(flag10ms)  //数码管刷新频率

                {

                   if(st==0){

                                Display_temp(&str);

                                flag10ms=0;

                        }

                   else if(st==1)

                   {

                      Display_hum(&str);

                          flag10ms=0;

                        }


                  

                  

                }

                else if (flag1s)  //每秒更新一次温度、湿度

        {

                DHT_Start();

                   tmp=DHT_ByteRead(&DHT);

                   if(tmp==1)

                   {


                          if(st==0)

                          {

                            str = DHT[2] ;             //温度

                                Display_temp(&str);                     

                            flag1s =0;         //标志位清零

                          }

                          else if(st==1){


                          str = DHT[0] ;  //湿度

                  Display_hum(&str);

                                  flag1s =0;         //标志位清零

                          }


                          


                   }

        }

                if(button1==0)

                {

                   delay(2);

                  

                   if(button1==0)

                   {

                     

                                mode++;

                                switch(mode)

                                {

                                  case 0:  st=0;      break;

                                  case 1:  st=1;      break;

                                  case 2:  td=1;      break;

                                  default:     break;

                                }

                                if(mode>=3)

                                {

                                  td=0;

                                  mode=0;

                                }

                                while(button1==0)

                                {

                                }



                   }


                }




         }

}



/* 配置并启动T0,ms-T0定时时间 */

void ConfigTimer0(unsigned int ms)

{

    unsigned long tmp;  //临时变量

   

    tmp = 11059200 / 12;      //定时器计数频率

    tmp = (tmp * ms) / 1000;  //计算所需的计数值

    tmp = 65536 - tmp;        //计算定时器重载值

    tmp = tmp + 12;           //补偿中断响应延时造成的误差

    T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节

    T0RL = (unsigned char)tmp;

    TMOD &= 0xF0;   //清零T0的控制位

    TMOD |= 0x01;   //配置T0为模式1

    TH0 = T0RH;     //加载T0重载值

    TL0 = T0RL;

    ET0 = 1;        //使能T0中断

    TR0 = 1;        //启动T0

}

/* T0中断服务函数,完成1秒定时 */

void InterruptTimer0() interrupt 1

{


    TH0 = T0RH;  //重新加载重载值

    TL0 = T0RL;

    tmr1s++;

        sdd++;

        tmr10ms++;


        if(tmr10ms>=1)           //  数码管刷新频率

        {

                  tmr10ms=0;

                flag10ms = 1;

        }

        if(td==1)

        {

          if(sdd>=500)           //温度显示5s        、湿度显示5s

          {

             sdd=0;

             if(st==0)

             {

               st=1;

                 }

                 else st=0;

          }

        }

    if (tmr1s >= 200)  //1s 数据更新频率

    {

        tmr1s = 0;

        flag1s = 1;

        }


   

}




推荐阅读

史海拾趣

FOCI Fiber Optic Communications Inc公司的发展小趣事

FOCI Fiber Optic Communications Inc.公司发展的五个故事

故事一:成立与初创期

FOCI Fiber Optic Communications Inc.(以下简称FOCI)成立于1995年,由台湾工业技术研究院(工研院)的核心团队创立。这家公司自诞生之初就专注于光纤互连技术的发展,致力于设计、制造和销售高性能的光纤组件和集成模块。初创时期,FOCI凭借其对光纤技术的深刻理解和市场需求的敏锐洞察,逐步在市场上站稳脚跟,成为光纤通信领域的一股新兴力量。

故事二:技术创新与突破

FOCI在发展过程中,始终将技术创新视为企业发展的核心驱动力。公司不断投入研发资源,在光纤耦合器、PLC分配器、薄膜粗波分复用/密集波分复用以及多光纤电缆组装模块等领域取得了多项技术突破。这些技术创新不仅提升了产品的性能和质量,还大幅降低了生产成本,使得FOCI的产品在市场上更具竞争力。

故事三:与奇景光电的战略合作

2024年,半导体解决方案无晶圆厂巨头奇景光电(Himax Technologies)宣布向FOCI投入5.22亿新台币(折合约为1610万美元)的资金。这次投资不仅是两家公司财务合作的结果,更是双方在技术融合与应用拓展上迈出的重要一步。根据合作协议,FOCI的共封装光学器件(CPO)与奇景光电的晶圆级光学器件(WLO)将被整合到多芯片模块中,这些模块将广泛应用于高性能计算、云服务器、人工智能等多个领域。

故事四:全球化布局与市场拓展

随着全球光纤通信市场的快速发展,FOCI积极实施全球化战略,不断拓展国际市场。公司通过参加国际展会、建立海外销售网络等方式,将高性能的光纤组件和集成模块带到了世界各地。特别是在光纤到户(FTTH)和云计算领域,FOCI的产品因其高效、低成本的特性而广受欢迎,成功在全球市场占据了一席之地。

故事五:子公司设立与多元化发展

为了进一步拓展业务领域和市场份额,FOCI在国内设立了多家子公司,如中山上诠通信科技有限公司等。这些子公司不仅继承了FOCI在光纤通信领域的深厚底蕴和技术优势,还根据当地市场需求进行了产品和服务的本地化调整。同时,FOCI还积极探索多元化发展路径,涉足光纤高速数据传输技术开发设计、研发和咨询等多个领域,为公司未来的持续发展奠定了坚实基础。

旌芯半导体(GN)公司的发展小趣事

机顶盒,全称数字视频变换盒(Set Top Box,简称STB),是连接电视机与外部信号源的关键设备。它不仅能接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能将这些信号转换成适合电视机播放的格式,极大地丰富了电视节目的选择,提升了观看体验。

从技术层面看,机顶盒具备强大的媒体处理能力和交互功能。它能接收高清乃至4K的超高清电视节目,并通过内置的解码器将数字信号转换为电视可识别的视频和音频流,实现细腻的画面和震撼的音效。此外,机顶盒还支持数据广播、电子节目指南(EPG)、因特网接入、视频点播等多种增值服务,使电视机成为了一个互动的智能终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。智能化技术如人工智能(AI)的集成,使机顶盒具备了语音助手、智能推荐等功能,为用户提供了更为便捷、智能的使用体验。同时,云计算和边缘计算技术的应用,也进一步提升了内容分发和管理的效率。

综上所述,机顶盒作为连接电视与外部世界的桥梁,不仅是现代家庭娱乐不可或缺的一部分,也是推动数字电视技术发展的重要力量。随着技术的持续进步和市场需求的不断增长,机顶盒的未来将更加丰富多彩,为用户提供更加优质、便捷的观影体验。

Belden Wire & Cable公司的发展小趣事

在1902年,Joseph C. Belden在美国芝加哥创立了Belden公司,标志着这家电线电缆公司的诞生。创立初期,公司便专注于电线电缆的研发和生产,凭借其卓越的产品质量和可靠的性能,逐渐在市场上崭露头角。随着业务的发展,Belden逐渐扩大了生产规模,并增设了多个生产基地,以满足不断增长的市场需求。

Baton Lock公司的发展小趣事

Baton Lock公司最初是一家小型电子元件制造商,面临着激烈的市场竞争。然而,公司凭借其研发团队对新型半导体技术的深入研究,成功开发出了一种高效能、低成本的芯片。这一技术创新迅速吸引了市场的关注,Baton Lock的订单量激增,公司规模迅速扩大。

ACEINNA公司的发展小趣事

随着公司规模的扩大,Baton Lock意识到单一市场已无法满足其增长需求。于是,公司开始在全球范围内寻找合作伙伴和设立生产基地。通过在欧洲、亚洲等地建立分支机构,Baton Lock成功打开了多个新市场,进一步提升了其品牌影响力。

Aydin Corp公司的发展小趣事

在国内市场取得一定成绩后,Aydin Corp开始积极拓展国际市场。通过与全球知名企业的合作,公司成功将产品打入多个国家和地区的市场。同时,Aydin Corp还积极参加国际电子展会和交流活动,与业界同行建立了广泛的合作关系。这些举措不仅提升了公司的国际知名度,也为公司的持续发展注入了新的动力。

问答坊 | AI 解惑

AOL新战略8月初出炉 时代华纳否认媒体报道

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 7月12日消息,据国外媒体报道,本周二,时代华纳表示计划于8月初公布旗下互联网部门AOL的商业战略计划,并否认了《华尔街日报》此前的一份报道,该报道称由于AOL打算提供免费服务,因此到2009 ...…

查看全部问答>

汽车电子保护电路设计

汽车环境对电子产品而言是非常苛刻的:任何连接到12V电源上的电路都必须工作在9V至16V的标称电压范围内,其它需要迫切应对的问题包括负载突降、冷车发动、电池反向、双电池助推、尖峰信号、噪声和极宽的温度范围。在负载突降时,交流发电机的输出电 ...…

查看全部问答>

硬件工程师如何转变成一个项目经理

项目经理掌控着产品从立项、开发到市场,到技术支持等整个环节。硬件工程师要想成为一个项目经理除了要拓宽自己的知识面,提高自己的技术外,要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等 ...…

查看全部问答>

探讨安防人生路,大家来现身说法

从加入安防的那天起,有种如鱼得水的感觉。一转眼几个年头过去了,感受颇深。安防行业跟其他行业一样,职位很多,销售、技术、工程管理、调试、研发(个人一直认为研发不该属于安防,应属于电子或软件),你对哪个有兴趣?如果你选择了销售,那么恭 ...…

查看全部问答>

被某人成为世界难题(干扰和信号),坛里的高手来看看

公司历经三年,耗资3000万始终没有解决问题。我们系统中GPRS wifi 等大功率大电流的模块都是实时工作 在他们工作的时候 系统中模拟电路 始终受到大功率模块的 辐射干扰和传导干扰导致系统无**常工作。 现在我们系统重新架构如上图所示。所有模块 ...…

查看全部问答>

同步连接ActiveSync问题

同步连接问题: 请问谁用过串口或以太网实现过ActiveSync连接啊,我的USB从接口有问题了,所以想改用那些串口,但不知道要修改或设置什么参数,请用过的大虾多指教一下,谢了。…

查看全部问答>

5.6寸真彩色智能终端 比 单色液晶屏还低?

  单片机的各种应用产品设计中,LCD和触摸屏作为人机交换的界面使其应用越来越广泛,但在实际应用中单片机要去直接控制大尺寸的彩色LCD(5.6寸以上)是比较困难的。我公司推出的智能显示产品正是为了单片机可以直接控制大尺寸LCD和触摸屏而 ...…

查看全部问答>

串口这是怎么回事???

接上arm板,可以接收到armlinux启动的信息,但是arm却无法接受键盘的信息!再其他电脑测试下,arm正常 就是串口无法接受信息 这是什么问题??会是串口烧掉了么?烧掉了 为什么还可以发送信息?? 需要换串口芯片??…

查看全部问答>