51單片機的I2C例程
單片機源程序如下:
- #include <reg52.h>
- #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
- sbit BUZZER = P1^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;
- BUZZER = 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<1000;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);
- BUZZER = 0;
-
- 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;
-
- }
- }
復制代碼
所有資料51hei提供下載:
I2C.rar
(132.06 KB, 下載次數: 22)
2018-5-16 09:50 上傳
點擊文件名下載附件
I2C例程 下載積分: 黑幣 -5
|