历史上的今天
今天是: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; ……………………
下一篇:基于51单片机的温控风扇设计
史海拾趣
|
无线网络以其“无所不在”的魅力正成为人们追逐的焦点。无论是网络升级还是重新组网,人们总希望自己的网络能够摆脱线缆的束缚,走进自由的天地。但与有线产品相比,无线产品还是新事物,并不是所有的用户都能很好地 ...… 查看全部问答> |
|
摘 要: Microwindows是一种常用的已开放源码的嵌入式GUI软件。本文论述了一种Microwindows下的汉字输入法。该输入法有别于Microwindows通用的汉字输入法设计,并已在桑达税控机SED-ED300系列上实现。关键词:嵌入式系统;Microwindows;ARM ...… 查看全部问答> |
|
我的根目录下有两个中文文件夹:(目) (我) 用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做WIN MOBILE 5.0的串口通讯程序啊,最近在网上找到一些资料,可是总是调试不正确,无法打开端口,发送接收数据。 我现在是使用WIN MOBILE 5.0系统的PDA,希望开发WIN CE 串口通讯软件,进行对单片机的数据采集,只采集温度数据。 ...… 查看全部问答> |
|
一 网页开发平台 网页开发有多种开发平台,简单一点只要能写文本的工具都可以,如记事本。专业一点有Dreamweaver,还有开发ASP的.NET,开发JSP的eclipse等。我不用记事本,那是高手用的。   ...… 查看全部问答> |
|
SIPEX SP6682 为白色LED配置的高效电荷泵调节器 SP6683 平行结构配置的高功率LED驱动器 SP6685 用于照相机闪光灯的电荷泵LED驱动器 SP6686 400mA降压/升压电荷泵LED驱动器 SP6687&nb ...… 查看全部问答> |
|
我使用STM32F105RB程序作了一段写U盘扇区的代码 U8 MassStorageDevSectWrite(U32 LBAddr,U16 Len,U8 *PtrBuf){ U32 *tmp; U32 Tag=0x0000000c,TotalByteNum_32,MassStorageDevSectReadTryCnt; &nb ...… 查看全部问答> |




