花了幾個小時做了一個濕度報警,做了一個濕度報警現在分享給大家.引腳定義,已經存在制作前閱讀里面了
編寫環境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)
2019-1-22 11:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|