历史上的今天
返回首页

历史上的今天

今天是:2025年02月24日(星期一)

正在发生

2020年02月24日 | 单片机粮仓温湿度控制系统

2020-02-24 来源:51hei

给大伙分享一个51单片机做粮仓温湿度控制系统,下面是原理图基于dht11传感器做的.

单片机源程序如下:

#include

#include "1602.h"

#include "dht.h"

#include "2402.h"


//定义三个LED灯

sbit Led_qushi=P1^6;                //去湿灯

sbit Led_jiangwen=P1^5;                //降温灯

sbit Led_shengwen=P1^4;                //升温灯

sbit Key_TH1 = P3^2;

sbit Key_TH2 = P3^3;

sbit Key_HH1 = P3^4;

sbit Key_HH2 = P3^5;


//定义标识

volatile bit FlagStartRH = 0;  //开始温湿度转换标志

volatile bit FlagKeyPress = 0; //有键按下



//定义温湿度传感器用外部变量

extern U8  U8FLAG,k;

extern U8  U8count,U8temp;

extern U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

extern U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

extern U8  U8comdata;

extern U8  count, count_r;


U16 temp;

S16 temperature, humidity;

S16 idata TH, HH;  //温度上限和湿度上限

char * pSave;

U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2;


//定义变量

U16 RHCounter;



//数据初始化

void Data_Init()

{

   RHCounter = 0;

   Led_qushi = 1;

   Led_jiangwen = 1;

   Led_shengwen = 1;

   TH = 40;

   HH = 85;

   keyvalue = 0;

   keyTH1 = 1;

   keyTH2 = 1;

   keyHH1 = 1;

   keyHH2 = 1;


}


//定时器0初始化

void Timer0_Init()

{

        ET0 = 1;        //允许定时器0中断

        TMOD = 1;       //定时器工作方式选择

        TL0 = 0x06;     

        TH0 = 0xf8;     //定时器赋予初值

        TR0 = 1;        //启动定时器

}


//定时器0中断

void Timer0_ISR (void) interrupt 1 using 0

{

        TL0 = 0x06;

        TH0 = 0xf8;     //定时器赋予初值


        //每2秒钟启动一次温湿度转换

    RHCounter ++;

    if (RHCounter >= 1000)

    {

       FlagStartRH = 1;

           RHCounter = 0;

    }

}


//存入设定值、

void Save_Setting()

{

   pSave =  (char *)&TH;          //地址低位对应低8位,高位对应高8位

   wrteeprom(0, *pSave);          //存温度上限值TH低8位

   DELAY(500);

   pSave ++;

   wrteeprom(1, *pSave);          //存温度上限值TH高8位

   DELAY(500);

   pSave =  (char *)&HH;

   wrteeprom(2, *pSave);          //存湿度上限值RH低8位

   DELAY(500);

   pSave ++;

   wrteeprom(3, *pSave);          //存湿度上限值RH高8位

   DELAY(500);


}


//载入设定值、

void Load_Setting()

{

   pSave =  (char *)&TH;

   *pSave++ = rdeeprom(0);

   *pSave = rdeeprom(1);

   pSave = (char *)&HH;

   *pSave++ = rdeeprom(2);

   *pSave = rdeeprom(3);

   if ((TH>99)||(TH<0)) TH = 40;

   if ((HH>99)||(HH<0)) HH = 85;

}


void KeyProcess(uint num)

{

   switch (num)

   {

      case 1:

             if (TH<99) TH++;

             L1602_char(1, 15, TH/10+48);

             L1602_char(1, 16, TH%10+48);

             break;

          case 2:

             if (TH>1) TH--;

             L1602_char(1, 15, TH/10+48);

             L1602_char(1, 16, TH%10+48);

             break;

          case 3:

             if (HH<99) HH++;

             L1602_char(2, 15, HH/10+48);

             L1602_char(2, 16, HH%10+48);

             break;

          case 4:

             if (HH>1) HH--;

             L1602_char(2, 15, HH/10+48);

             L1602_char(2, 16, HH%10+48);

             break;

          default:

             break;

   }

   Save_Setting();


}


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

* 名称 : Main()

* 功能 : 主函数

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

void main()

{

    U16 i, j, testnum;


    EA = 0;


        Timer0_Init();  //定时器0初始化


    Data_Init();

        EA = 1;


        L1602_init();

        L1602_string(1,1," Welcome to T&H   ");

        L1602_string(2,1," Control System!  ");

        //延时

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

           for (j=0;j<1000;j++)

           {;}

    //清屏

        L1602_string(1,1,"                ");

        L1602_string(2,1,"                ");

    L1602_string(1,1,"Tem:    C  TH:");

        L1602_string(2,1,"Hum:    %  HH:");

    

    //载入温度上限和湿度上限设定值

        Load_Setting();

        L1602_char(1, 15, TH/10+48);

        L1602_char(1, 16, TH%10+48);

        L1602_char(2, 15, HH/10+48);

        L1602_char(2, 16, HH%10+48);



        while(1)

        {

       //温湿度转换标志检查

                 if (FlagStartRH == 1)

                 {

                     TR0 = 0;

             testnum = RH();

                         FlagStartRH = 0;

                         TR0 = 1;

             //读出温湿度,只取整数部分

                         humidity = U8RH_data_H;

                         temperature = U8T_data_H;

                         //显示温湿度

                         L1602_int(1,5,temperature);

                     L1602_int(2,5,humidity);        

                }

                //温湿度控制

                if (temperature > TH) Led_jiangwen = 0;

……………………


推荐阅读

史海拾趣

DEWALT公司的发展小趣事

随着全球经济的不断发展和市场需求的不断增长,DEWALT公司开始积极拓展海外市场。公司在全球范围内设立了多个生产基地和销售网络,为不同地区的用户提供优质的产品和服务。同时,DEWALT还积极与全球知名的企业和品牌进行合作,共同推动电动工具行业的发展。在未来,DEWALT公司将继续致力于技术创新和产品拓展,为全球用户提供更加高效、耐用的电动工具产品。

DLP Design公司的发展小趣事

DLP联合科技公司,通过与国内外知名企业的技术合作,实现了技术的快速迭代和产品的升级换代。公司积极寻求与产业链上下游企业的合作机会,共同研发新技术、新产品。通过与合作伙伴的紧密合作,DLP联合科技在DLP技术领域取得了显著成果,为电子行业的发展做出了积极贡献。

Davico Industrial Ltd公司的发展小趣事

DLP创新设计公司,一家专注于DLP技术应用的企业,通过精准的市场定位和灵活的市场策略,成功在电子行业中脱颖而出。公司深入了解消费者需求,针对不同市场推出差异化产品。同时,DLP创新积极寻求合作伙伴,通过渠道拓展和品牌建设,逐渐提高了市场占有率。其独特的商业模式和敏锐的市场洞察力,使DLP创新在激烈的市场竞争中保持了稳健的发展。

Future Designs, Inc. (FDI)公司的发展小趣事

FDI深知客户需求的重要性,因此他们始终将客户服务放在首位。公司建立了一套完善的客户服务体系,从售前咨询、方案设计到售后支持,全程为客户提供专业、贴心的服务。此外,FDI还针对客户的特定需求,提供定制化解决方案。他们能够从概念设计、原型开发到大规模生产,全程参与客户的项目,确保产品能够完全符合客户的期望和要求。这种服务模式赢得了客户的广泛赞誉和信赖。

Analog Modules Inc公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,FDI实施了国际化战略。他们积极拓展海外市场,与多个国家和地区的客户建立了合作关系。通过参加国际展会、设立海外分支机构等方式,FDI不断提升品牌知名度和影响力。同时,他们还加强与当地供应商和合作伙伴的合作,共同开拓市场,实现互利共赢。这些努力使得FDI在全球电子行业中的地位日益稳固。

Condor公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,FDI实施了国际化战略。他们积极拓展海外市场,与多个国家和地区的客户建立了合作关系。通过参加国际展会、设立海外分支机构等方式,FDI不断提升品牌知名度和影响力。同时,他们还加强与当地供应商和合作伙伴的合作,共同开拓市场,实现互利共赢。这些努力使得FDI在全球电子行业中的地位日益稳固。

问答坊 | AI 解惑

完成无线局域网络搭建六要素

        无线网络以其“无所不在”的魅力正成为人们追逐的焦点。无论是网络升级还是重新组网,人们总希望自己的网络能够摆脱线缆的束缚,走进自由的天地。但与有线产品相比,无线产品还是新事物,并不是所有的用户都能很好地 ...…

查看全部问答>

一种Microwindows的汉字输入法

摘  要: Microwindows是一种常用的已开放源码的嵌入式GUI软件。本文论述了一种Microwindows下的汉字输入法。该输入法有别于Microwindows通用的汉字输入法设计,并已在桑达税控机SED-ED300系列上实现。关键词:嵌入式系统;Microwindows;ARM ...…

查看全部问答>

元器件封装查询

元器件封装查询.有图安装尺寸....…

查看全部问答>

DSP无法连接

大家觉得这可能是什么问题啊?是驱动,还是DSP坏了?…

查看全部问答>

linux下部分中文显示乱码,请大家帮帮忙

我的根目录下有两个中文文件夹:(目)    (我) 用loacale -a命令显示出来的locale有以下几项 .... zh_CN zh_CN.GB2312 zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.my zh_CN.utf8 .... 系统启动之后locale 命令的输出结果为 L ...…

查看全部问答>

开发板串口问题,求助!

我用的2440的板子,S3C2440A芯片,支持3个串口,硬件引出两个,一个用于控制台,另外一个是不是叫做扩展串口,按照《完全开发手册》上添加了扩展串口驱动, 使用命令:cat /proc/tty/driver/serial       显示:serinfo:1.0 ...…

查看全部问答>

VB.NET开发WINCE串口通讯程序

有没有用VB.NET做WIN MOBILE 5.0的串口通讯程序啊,最近在网上找到一些资料,可是总是调试不正确,无法打开端口,发送接收数据。 我现在是使用WIN MOBILE 5.0系统的PDA,希望开发WIN CE 串口通讯软件,进行对单片机的数据采集,只采集温度数据。 ...…

查看全部问答>

网络开发笔记3_多网页开发

一 网页开发平台        网页开发有多种开发平台,简单一点只要能写文本的工具都可以,如记事本。专业一点有Dreamweaver,还有开发ASP的.NET,开发JSP的eclipse等。我不用记事本,那是高手用的。     ...…

查看全部问答>

LED专用恒流IC集汇

SIPEX SP6682   为白色LED配置的高效电荷泵调节器 SP6683   平行结构配置的高功率LED驱动器 SP6685   用于照相机闪光灯的电荷泵LED驱动器 SP6686   400mA降压/升压电荷泵LED驱动器 SP6687&nb ...…

查看全部问答>

stm32105写U盘问题

我使用STM32F105RB程序作了一段写U盘扇区的代码 U8 MassStorageDevSectWrite(U32 LBAddr,U16 Len,U8 *PtrBuf){    U32 *tmp;    U32 Tag=0x0000000c,TotalByteNum_32,MassStorageDevSectReadTryCnt;  &nb ...…

查看全部问答>