標(biāo)題:
自己寫的一個(gè)基于STM32F104的智能安防源程序
[打印本頁(yè)]
作者:
NOTHIN9
時(shí)間:
2019-10-29 16:50
標(biāo)題:
自己寫的一個(gè)基于STM32F104的智能安防源程序
用到:超聲波,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:顯示超聲波距離和火焰檢測(cè)標(biāo)志
//0x20:清除超聲波距離和火焰檢測(cè)顯示標(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)先級(jí)分組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)鞲衅,并啟?dòng)ADC
BootGrap(); //啟動(dòng)頁(yè)面
// 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(); //顯示超聲波距離和火焰檢測(cè)
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); //軟件消除按鍵抖動(dòng)
// 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
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1