#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; else Led_jiangwen = 1; //降温 if (humidity > HH) Led_qushi = 0; else Led_qushi = 1; //去湿 //键盘查询,在弹起时响应 if ((Key_TH1)&&(keyTH1==0)) {FlagKeyPress = 1; keyvalue = 1;} else if ((Key_TH2)&&(keyTH2==0)) {FlagKeyPress = 1; keyvalue = 2;} else if ((Key_HH1)&&(keyHH1==0)) {FlagKeyPress = 1; keyvalue = 3;} else if ((Key_HH2)&&(keyHH2==0)) {FlagKeyPress = 1; keyvalue = 4;} if (FlagKeyPress == 1) { KeyProcess(keyvalue); FlagKeyPress = 0; } if (!Key_TH1) keyTH1 = 0; else keyTH1 = 1; if (!Key_TH2) keyTH2 = 0; else keyTH2 = 1; if (!Key_HH1) keyHH1 = 0; else keyHH1 = 1; if (!Key_HH2) keyHH2 = 0; else keyHH2 = 1; } }
上一篇:基于单片机的室内环境参数自控系统设计
下一篇:基于单片机的简易电子琴系统设计(程序)
推荐阅读最新更新时间:2024-11-11 10:14
推荐帖子
- 那位高手会做单片机MIDI录播系统
- 那位高手会做单片机MIDI录播系统,就是可以先录外部输入到单片机的MIDI信号数据后存储起来,录好后可由单片机进行播放MIDI信号输出。会的可联系QQ/微信:533918那位高手会做单片机MIDI录播系统
- mikecom 单片机
- 比较器输出方波的上升沿是斜的原因?
- 用的LM2903比较器,之前输出正常,现在测出来上升沿是斜的,请问是什么原因呢?比较器输出方波的上升沿是斜的原因?这个是开漏输出的吧?上拉电阻太小了比较器是OC输出型,要接上拉电阻才能输出电源轨。而电路中存在容性环节,与上拉电阻共同构成RC回路,故上升沿的波形必然表现为RC曲线。容性环节越大,上拉电阻阻值越高,RC曲线自然就越平缓。想让上升沿陡直,减小上拉电阻阻值。 这是推挽输出吧,不是推挽输出需要接入上拉电阻吗我刚注意到截图不完整。上拉电阻您说的是R12那
- 好难好难123 电路观察室
- 【求助】关于延时的问题!
- 我用C写延时子程序,请问怎么样才可以算出延时了多久呀!好像430讲时序方面也讲的很少,哪位高手有这方面的资料或程序,可否借光参考一下。【求助】关于延时的问题!通过“软件仿真”可以看到执行周期。再按执行频率算出实际执行时间。请问lsdfae03“软件仿真”哪里可以看到执行周期啊!我没找到啊写常规的延时程序建议用汇编写这样就免得重新编译后延时常数改变 引用: 请问lsdfae03“软件仿真”哪里可以看到执行周期啊!我没找到啊
- 硬件工程师 微控制器 MCU
- Wi-Fi 架构以及 Wi-Fi 标准的未来发展
- 当今Wi-Fi产品的通用架构及其支持的功能,包括从Wi-Fi4(802.11n)到最新的Wi-Fi6(802.11ax)的硬件要求。Wi-Fi6E(6GHz802.11ax),IEEE在下一代标准802.11be中寻找的功能,如何解决未来产品中的这些挑战。这些一定都是大家想了解的,那么Wi-Fi产品的通用架构有哪些呢?可以看一下,Qorvo是怎么介绍的。Wi-Fi架构以及Wi-Fi标准的未来发展Wi-Fi架构以及Wi-Fi标准的未来
- alan000345 RF/无线
- 遇到这个问题,你觉得可信不?
- 器件:曾烧坏过模拟部分的F28035SPITXBUF写入0x5000输出0x47c6又将波特率改低后,写入0x55aa,它输出0x7777(用示波器看的结果)近来一直在做F28035带ADS8332,调了好久也不成功。原来做过的,是可以工作的,找了好久的原因,也没有找到,下午就仔细地看SPI的输出波形,突然发现问题。如上。本器件,使用GPIO口带LCD,正常。SPI的CLOCK输出正常,它难道把SPI部分SPI部分也烧坏了?遇到这个问题,你觉得可信不?芯片工作电流,温度有
- dontium 微控制器 MCU
- 【花雕动手做】有趣好玩的音乐可视化系列小项目(19)--通体光纤灯
- 偶然心血来潮,想要做一个音乐可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累些有用的音乐频谱可视化的资料,也会争取成型一些实用好玩的音乐可视器项目。上回项目17,第一次接触光导纤维,还整了50米长,实验的结果一般般。光纤只是端面亮,亮一点,光量太少了。这次搜寻到一种侧面亮的光导纤维(我给它起名叫做通体光纤),不同品种,规格是直径1.5mm,一下子收了500厘米长,
- eagler8 DIY/开源硬件专区
设计资源 培训 开发板 精华推荐
- 电路显示 LT3682、800kHz 功率降压稳压器安全地穿越汽车负载突降
- 电子收银终端机
- 【单片机最小系统】TMS320F28379S最小系统
- 适用于音频功率放大器的包络跟踪电源参考设计
- 使用 MaxLinear, Inc 的 SPX1004 的参考设计
- XPC56xxMB2: XPC56xxMB2
- NIOS-PROKIT-1S40, Nios II Development Kit, Stratix Professional Edition 提供了基于 Altera Stratix 器件开发嵌入式系统的硬件平台
- VL53L1激光测距
- DER-702 - 45 W USB PD 3.0,采用 3.3 V-16 V PPS 电源,使用 InnoSwitch3-Pro 和 Weltrend WT6635P 控制器
- 1-遥控器-1