花了几个小时做了一个湿度报警,做了一个湿度报警现在分享给大家.引脚定义,已经存在制作前阅读里面了
编写环境Keil5
引脚定义
湿度计引脚定义
蜂鸣器 P2^0
LED报警灯 P1^6
风扇 P1^5
按键1 P3^4
按键2 P3^5
Dht11数据线 P1^7
AT24C02:
SCL P1^0
SDA P1^1
LCD1602
E P2^7
RW P2^6
RS P2^5
数据线 P0
编写时间2019.1.22
湿度上限+AT24C02+蜂鸣器+风扇+LCD1602
单片机源程序如下:
- #include <reg52.h>
- #include "1602.h"
- #include "dht.h"
- #include "2402.h"
- sbit speaker=P2^0;
- //定义LED灯
- sbit Led_qushi=P1^6; //去湿灯
- sbit fan=P1^5;
- 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 humidity;
- S16 idata HH; //湿度上限
- char * pSave;
- //定义变量
- U16 RHCounter;
- //数据初始化
- void Data_Init() {
- RHCounter = 0;
- Led_qushi = 1;
- HH = 85;
- }
- //定时器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 *)&HH;
- wrteeprom(2, *pSave); //存湿度上限值RH低8位
- DELAY(500);
- pSave ++;
- wrteeprom(3, *pSave); //存湿度上限值RH高8位
- DELAY(500);
- }
- //载入设定值、
- void Load_Setting() {
- pSave = (char *)&HH;
- *pSave++ = rdeeprom(2);
- *pSave = rdeeprom(3);
- if ((HH>99)||(HH<0)) HH = 99;
- }
- /********************************************************************
- * 名称 : Main()
- * 功能 : 主函数
- ***********************************************************************/
- void main() {
- U16 i, j, testnum;
- EA = 0;
- Timer0_Init(); //定时器0初始化
- Data_Init();
- EA = 1;
- L1602_init();
- // L1602_string(1,1," Welcome to H ");
- //延时
- for (i=0; i<500; i++)
- for (j=0; j<1000; j++)
- {;}
- //清屏
- L1602_string(1,1,"Sd: % H: % ");
- //载入湿度上限设定值
- Load_Setting();
- L1602_char(1, 13, HH/10+48);
- L1602_char(1, 14, HH%10+48);
- while(1) {
- //温湿度转换标志检查
- if (FlagStartRH == 1) { //定时器
- TR0 = 0;
- testnum = RH();
- FlagStartRH = 0;
- //读出湿度,只取整数部分
- TR0 = 1;
- humidity = U8RH_data_H;
- //显示湿度
- L1602_int(1,2,humidity);
- }
- if (!Key_HH1) { //上下限处理
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- if (!Key_HH1) {
- if(HH>0)
- HH--;
- else HH=0;
- L1602_char(1, 13, HH/10+48);
- L1602_char(1, 14, HH%10+48);
- Save_Setting();
- }
- }
- if (!Key_HH2) {
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- DELAY(5000);
- if (!Key_HH2) {
- if(HH>99)
- HH=99;
- else HH++;
- L1602_char(1, 13, HH/10+48);
- L1602_char(1, 14, HH%10+48);
- Save_Setting();
- }
- }
- if (humidity > HH) {
- fan=0;
- Led_qushi = 1; //湿度灯打开
- speaker=0;
- DELAY(5000);
- Led_qushi = 0; //湿度灯打开
- speaker=1;
- DELAY(5000);
- } else {
- fan=1;
- }
- }
- }
复制代码
所有资料51hei提供下载:
湿度上限 AT24C02 蜂鸣器 风扇 LCD6022019.1.22.rar
(58.7 KB, 下载次数: 32)
|