用到:超声波,OLED,蓝牙,火焰报警传感器,温湿度传感器;
不足:没有用到操作系统,当时想学ucos3的,然后再写的,但是发下看了一下之后,有点蒙,就直接写裸机
单片机源程序如下:
- #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"
- //===================================//
- /************全局变量声明区************/
- //===================================//
- //0x01:时间显示标志 0x02:清除时间标志 0x04:温湿度显示标志 0x08:清除温湿度显示 0x10:显示超声波距离和火焰检测标志
- //0x20:清除超声波距离和火焰检测显示标志
- volatile uint32_t g_Flags = 0;
- __IO uint32_t g_HS0038data = 0; //接收红外遥控的数据
- volatile uint8_t g_HS0038key = 0; //红外键值
-
- __IO uint8_t SYSClockMode = 0; //用做选择系统时钟源,默认系统时钟由PLL提供
- uint32_t TimeOut = 0; //用作优化
- u8 *AM_PM[2] = {".AM", ".PM" }; //上下午显示
- uint8_t g_FlashRecordBuff[128] = {0}; //用作读取记录缓存
- uint8_t g_FlashRecordCnt = 0; //记录读取FLASH位置
- uint32_t g_WarningDistance = 100; //超声波报警距离,默认100mm
- volatile uint8_t g_LedBright = 50; //控制LED亮度
- extern uint8_t g_USART_DataBuf[DATA_BUF_MAX]; //接收串口数据缓冲区
- extern uint8_t g_USART_RxCnt; //记录串口接收数据的字节数
- extern uint8_t g_USART_RxDoneFlag; //串口数据接收完成标志位
- extern volatile uint8_t g_RCTWakeUpFlag; //RTC唤醒标志位
- //MFRC522数据区
- extern u8 mfrc552pidbuf[18];
- extern u8 card_pydebuf[2];
- extern u8 card_numberbuf[5];
- //***************结束****************//
- int main(void)
- {
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组2
- InitLED(); //初始化LED
- InitKey(); //初始化按键
- InitBeep(); //初始化蜂鸣器
- InitHS0038(); //初始化红外遥控
- InitSr04(); //初始化超声波
- InitKeyExit(); //使能按键外部中断
- InitUsart1(115200); //初始化串口1 波特率115200bps
- InitUsart3(9600); //初始化串口3:波特率9600bps
- // InitTIM2(10); //初始化定时器2 定时时间100ms
- // InitTIM3(100); //初始化定时器3 定时时间10ms
- // InitTIM8(100); //初始化定时器8 定时时间10ms
- InitDHT11(); //初始化温湿度
- OLED_Init(); //初始化OLED
- OLED_Clear(); //清除屏幕
- InitRTC_f(); //初始化RTC和读取RTC备份寄存器
- InitADC(); //初始化ADC
- InitFires(); //初始化火焰传感器,并启动ADC
- BootGrap(); //启动页面
- // MFRC522_Initializtion();
- if(g_WarningDistance == 100) //读取超声波报警距离
- ReadWarnDist();
-
- while(1)
- {
- delay_us(50);
- TimeOut++;
-
- if(g_USART_RxDoneFlag) //接收蓝牙命令执行相应功能
- {
- ChangeTime_Date(g_USART_DataBuf);
- Ctrl_LED(g_USART_DataBuf);
- ShiftOrder(g_USART_DataBuf);
-
- if((g_Flags & 0x100) == 0x100)
- g_Flags |= 0x400; //开启修改标志为
-
- ChangeWarnDist(); //修改超声波报警距离
-
- ClearUsartBuf_Flag(); //清除串口相关标志和缓冲区
- }
-
- WarningBeep(); //蜂鸣器报警
-
- if(TimeOut/10000 != 0 && TimeOut%10000 == 0 ) //显示FLASH内容
- 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); //显示时间日期
-
- g_RCTWakeUpFlag = 0; //清除RTC唤醒标志
-
- ShowSR04_Fire(); //显示超声波距离和火焰检测
-
- ShowTH(); //显示温湿度
-
- ReadCard(); //读卡
- #ifdef DEBUG //调试用
- 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);
- //------------------------------------------------------------------------------------
- /****************** 蜂鸣器实验:复位响*****************/
- //------------------------------------------------------------------------------------
- // BeepOn();
- // delay_ms(200);
- // BeepOff();
- //------------------------------------------------------------------------------------
- // revID = Read_w25qxxID();
- //
- // printf("revID = %04X\r\n",revID);
- //------------------------------------------------------------------------------------
- /****************** 串口3蓝牙实验:发送命令点亮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实验 *****************/
- //------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------
- /****************** 温湿度传感器实验,获取温湿度值*****************/
- //------------------------------------------------------------------------------------
- // 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实验:控制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);
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 定时器实验:控制LED闪烁时间*****************/
- //------------------------------------------------------------------------------------
- // LED1 ^= OFF;
- // delay_ms(100);
- //------------------------------------------------------------------------------------
-
-
- //------------------------------------------------------------------------------------
- /****************** 外部中断实验:按键控制LED*****************/
- //------------------------------------------------------------------------------------
- // LED1 ^= OFF;
- // delay_ms(100);
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 按键实验:按键控制LED*****************/
- //------------------------------------------------------------------------------------
- // if(KEY0 == 0)
- // {
- // delay_ms(100); //软件消除按键抖动
- // if(KEY0 == 0)
- // {
- // LED1 ^= OFF;
- // }
- // }
- //------------------------------------------------------------------------------------
-
- //------------------------------------------------------------------------------------
- /****************** 串口1实验:发送命令点亮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;
- // }
- //------------------------------------------------------------------------------------
复制代码
所有资料51hei提供下载:
智能安防.rar
(109.13 KB, 下载次数: 22)
|