|
用到:超聲波,OLED,藍(lán)牙,火焰報(bào)警傳感器,溫濕度傳感器;
不足:沒有用到操作系統(tǒng),當(dāng)時(shí)想學(xué)ucos3的,然后再寫的,但是發(fā)下看了一下之后,有點(diǎn)蒙,就直接寫裸機(jī)
單片機(jī)源程序如下:
- #include "led.h"
- #include "timer.h"
- #include "HS0038.h"
- #include "usart.h"
- #include "instruct.h"
- #include "key.h"
- #include "exit.h"
- #include "beep.h"
- #include "pwm.h"
- #include "DHT11.h"
- #include "oled.h"
- #include "SR04.h"
- #include "adc.h"
- #include "flash.h"
- #include "rc522.h"
- #include "rtc.h"
- //===================================//
- /************全局變量聲明區(qū)************/
- //===================================//
- //0x01:時(shí)間顯示標(biāo)志 0x02:清除時(shí)間標(biāo)志 0x04:溫濕度顯示標(biāo)志 0x08:清除溫濕度顯示 0x10:顯示超聲波距離和火焰檢測標(biāo)志
- //0x20:清除超聲波距離和火焰檢測顯示標(biāo)志
- volatile uint32_t g_Flags = 0;
- __IO uint32_t g_HS0038data = 0; //接收紅外遙控的數(shù)據(jù)
- volatile uint8_t g_HS0038key = 0; //紅外鍵值
-
- __IO uint8_t SYSClockMode = 0; //用做選擇系統(tǒng)時(shí)鐘源,默認(rèn)系統(tǒng)時(shí)鐘由PLL提供
- uint32_t TimeOut = 0; //用作優(yōu)化
- u8 *AM_PM[2] = {".AM", ".PM" }; //上下午顯示
- uint8_t g_FlashRecordBuff[128] = {0}; //用作讀取記錄緩存
- uint8_t g_FlashRecordCnt = 0; //記錄讀取FLASH位置
- uint32_t g_WarningDistance = 100; //超聲波報(bào)警距離,默認(rèn)100mm
- volatile uint8_t g_LedBright = 50; //控制LED亮度
- extern uint8_t g_USART_DataBuf[DATA_BUF_MAX]; //接收串口數(shù)據(jù)緩沖區(qū)
- extern uint8_t g_USART_RxCnt; //記錄串口接收數(shù)據(jù)的字節(jié)數(shù)
- extern uint8_t g_USART_RxDoneFlag; //串口數(shù)據(jù)接收完成標(biāo)志位
- extern volatile uint8_t g_RCTWakeUpFlag; //RTC喚醒標(biāo)志位
- //MFRC522數(shù)據(jù)區(qū)
- extern u8 mfrc552pidbuf[18];
- extern u8 card_pydebuf[2];
- extern u8 card_numberbuf[5];
- //***************結(jié)束****************//
- int main(void)
- {
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優(yōu)先級分組2
- InitLED(); //初始化LED
- InitKey(); //初始化按鍵
- InitBeep(); //初始化蜂鳴器
- InitHS0038(); //初始化紅外遙控
- InitSr04(); //初始化超聲波
- InitKeyExit(); //使能按鍵外部中斷
- InitUsart1(115200); //初始化串口1 波特率115200bps
- InitUsart3(9600); //初始化串口3:波特率9600bps
- // InitTIM2(10); //初始化定時(shí)器2 定時(shí)時(shí)間100ms
- // InitTIM3(100); //初始化定時(shí)器3 定時(shí)時(shí)間10ms
- // InitTIM8(100); //初始化定時(shí)器8 定時(shí)時(shí)間10ms
- InitDHT11(); //初始化溫濕度
- OLED_Init(); //初始化OLED
- OLED_Clear(); //清除屏幕
- InitRTC_f(); //初始化RTC和讀取RTC備份寄存器
- InitADC(); //初始化ADC
- InitFires(); //初始化火焰?zhèn)鞲衅鳎覣DC
- BootGrap(); //啟動頁面
- // MFRC522_Initializtion();
- if(g_WarningDistance == 100) //讀取超聲波報(bào)警距離
- ReadWarnDist();
-
- while(1)
- {
- delay_us(50);
- TimeOut++;
-
- if(g_USART_RxDoneFlag) //接收藍(lán)牙命令執(zhí)行相應(yīng)功能
- {
- ChangeTime_Date(g_USART_DataBuf);
- Ctrl_LED(g_USART_DataBuf);
- ShiftOrder(g_USART_DataBuf);
-
- if((g_Flags & 0x100) == 0x100)
- g_Flags |= 0x400; //開啟修改標(biāo)志為
-
- ChangeWarnDist(); //修改超聲波報(bào)警距離
-
- ClearUsartBuf_Flag(); //清除串口相關(guān)標(biāo)志和緩沖區(qū)
- }
-
- WarningBeep(); //蜂鳴器報(bào)警
-
- if(TimeOut/10000 != 0 && TimeOut%10000 == 0 ) //顯示FLASH內(nèi)容
- CardRecord();
-
- if(PAin(8) == 0)
- {
- g_HS0038data = GET_HS0038Data();
-
- g_HS0038key = GetKey(g_HS0038data);
- // if(TimeOut/20000!=0 && TimeOut%20000==0)
- printf("%d\r\n",g_HS0038key);
-
- if(g_HS0038key == 17)
- {
- LED3 ^= 1;
- }
- }
-
- if(TimeOut/5000 != 0 && TimeOut%5000 == 0 )
- ShowTime_Date(g_RCTWakeUpFlag); //顯示時(shí)間日期
-
- g_RCTWakeUpFlag = 0; //清除RTC喚醒標(biāo)志
-
- ShowSR04_Fire(); //顯示超聲波距離和火焰檢測
-
- ShowTH(); //顯示溫濕度
-
- ReadCard(); //讀卡
- #ifdef DEBUG //調(diào)試用
- if(TimeOut/20000!=0 && TimeOut%20000==0)
- {
- TimeOut = 0;
- printf("%d\r\n",g_WarningDistance);
- }
- #endif
- }
- }
- //-------------------------------------------------------------------------------------
- // PWM2Led(100);
- // PWM2Beep(100);
- // AdjustLed3Brightness(0);
- // AdjustLed4Brightness(0);
- // AdjustBeepVOL(0);
- //------------------------------------------------------------------------------------
- /****************** 蜂鳴器實(shí)驗(yàn):復(fù)位響*****************/
- //------------------------------------------------------------------------------------
- // BeepOn();
- // delay_ms(200);
- // BeepOff();
- //------------------------------------------------------------------------------------
- // revID = Read_w25qxxID();
- //
- // printf("revID = %04X\r\n",revID);
- //------------------------------------------------------------------------------------
- /****************** 串口3藍(lán)牙實(shí)驗(yàn):發(fā)送命令點(diǎn)亮LED*****************/
- //------------------------------------------------------------------------------------
- // if(TimeOut/10000!=0 && TimeOut%10000 ==0)
- // {
- // if(g_USART_RxDoneFlag)
- // {
- //// SendUartData(USART1,g_USART_DataBuf);
- // Ctrl_LED(g_USART_DataBuf);
- //
- // ClearUsartBuf_Flag();
- // }
- // printf("SECOND: %d\r\n",sec++);
- // if(sec==7)
- // sec = 1;
- // }
- //------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------
- /****************** RTC實(shí)驗(yàn) *****************/
- //------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------
- /****************** 溫濕度傳感器實(shí)驗(yàn),獲取溫濕度值*****************/
- //------------------------------------------------------------------------------------
- // delay_us(100);
- // TimeOut++;
- // if(TimeOut/60000 != 0 && TimeOut%60000 == 0)
- // {
- // i_DHT11data = GET_DHT11Data();
- // printf("Humidity: %d.%d\r\n",(i_DHT11data>>24&0xff),(i_DHT11data>>16&0xff));
- // printf("Temperature: %d.%d\r\n",(i_DHT11data>>8&0xff),(i_DHT11data&0xff));
- // TimeOut=0;
- // }
- //
- //
- //------------------------------------------------------------------------------------
- /****************** PWM實(shí)驗(yàn):控制LED亮度*****************/
- //------------------------------------------------------------------------------------
- // delay_ms(100);
- // g_HS0038data = GET_HS0038Data();
- // i_HS0038key = GetKey(g_HS0038data);
- // printf("%d\r\n",i_HS0038key);
- // if(i_HS0038key == 13 && g_LedBright > 0)
- // {
- // g_LedBright -= 10;
- // }
- // else if(i_HS0038key == 12 && g_LedBright < 100)
- // {
- // g_LedBright += 10;
- // }
- //
- // AdjustLed1Brightness(g_LedBright);
- // delay_ms(100);
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 定時(shí)器實(shí)驗(yàn):控制LED閃爍時(shí)間*****************/
- //------------------------------------------------------------------------------------
- // LED1 ^= OFF;
- // delay_ms(100);
- //------------------------------------------------------------------------------------
-
-
- //------------------------------------------------------------------------------------
- /****************** 外部中斷實(shí)驗(yàn):按鍵控制LED*****************/
- //------------------------------------------------------------------------------------
- // LED1 ^= OFF;
- // delay_ms(100);
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 按鍵實(shí)驗(yàn):按鍵控制LED*****************/
- //------------------------------------------------------------------------------------
- // if(KEY0 == 0)
- // {
- // delay_ms(100); //軟件消除按鍵抖動
- // if(KEY0 == 0)
- // {
- // LED1 ^= OFF;
- // }
- // }
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 串口1實(shí)驗(yàn):發(fā)送命令點(diǎn)亮LED*****************/
- //------------------------------------------------------------------------------------
- // delay_ms(100);
- // if(g_USART_RxDoneFlag)
- // {
- // Ctrl_LED(g_USART_DataBuf);
- // ClearBuf_Flag();
- // }
- //------------------------------------------------------------------------------------
-
-
- //------------------------------------------------------------------------------------
- /****************** 紅外遙控:按鍵0控制燈*****************/
- //------------------------------------------------------------------------------------
- // g_HS0038data = GET_HS0038Data();
- // g_HS0038key = GetKey(g_HS0038data);
- // if(g_HS0038key<21)
- // {
- // if(g_HS0038key == 0)
- // LED1 ^= 1;
- // if(g_HS0038key == 1)
- // {
- // i_DHT11data = GET_DHT11Data();
- // printf("Humidity: %d.%d\n",(i_DHT11data>>24&0xff),(i_DHT11data>>16&0xff));
- // printf("Temperature: %d.%d\n",(i_DHT11data>>8&0xff),(i_DHT11data&0xff));
- // TimeOut=0;
- // }
- // g_HS0038key = 21;
- // g_HS0038data = 0;
- // }
- //------------------------------------------------------------------------------------
復(fù)制代碼
所有資料51hei提供下載:
智能安防.rar
(109.13 KB, 下載次數(shù): 22)
2019-10-29 16:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|