找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3218|回復: 0
打印 上一主題 下一主題
收起左側

自己寫的一個基于STM32F104的智能安防源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:462746 發(fā)表于 2019-10-29 16:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用到:超聲波,OLED,藍牙,火焰報警傳感器,溫濕度傳感器;
不足:沒有用到操作系統(tǒng),當時想學ucos3的,然后再寫的,但是發(fā)下看了一下之后,有點蒙,就直接寫裸機

單片機源程序如下:
  1. #include "led.h"
  2. #include "timer.h"
  3. #include "HS0038.h"
  4. #include "usart.h"
  5. #include "instruct.h"
  6. #include "key.h"
  7. #include "exit.h"
  8. #include "beep.h"
  9. #include "pwm.h"
  10. #include "DHT11.h"
  11. #include "oled.h"
  12. #include "SR04.h"
  13. #include "adc.h"
  14. #include "flash.h"
  15. #include "rc522.h"
  16. #include "rtc.h"


  17. //===================================//
  18. /************全局變量聲明區(qū)************/
  19. //===================================//

  20. //0x01:時間顯示標志 0x02:清除時間標志 0x04:溫濕度顯示標志 0x08:清除溫濕度顯示 0x10:顯示超聲波距離和火焰檢測標志
  21. //0x20:清除超聲波距離和火焰檢測顯示標志
  22. volatile uint32_t g_Flags = 0;

  23. __IO uint32_t g_HS0038data = 0;                                                        //接收紅外遙控的數(shù)據(jù)
  24. volatile uint8_t g_HS0038key = 0;                                                //紅外鍵值
  25.                                                        
  26. __IO uint8_t SYSClockMode = 0;                                                         //用做選擇系統(tǒng)時鐘源,默認系統(tǒng)時鐘由PLL提供
  27. uint32_t TimeOut = 0;                                                                        //用作優(yōu)化                                                                       
  28. u8 *AM_PM[2] = {".AM", ".PM" };                                                        //上下午顯示

  29. uint8_t g_FlashRecordBuff[128] = {0};                                        //用作讀取記錄緩存
  30. uint8_t g_FlashRecordCnt = 0;                                                        //記錄讀取FLASH位置
  31. uint32_t g_WarningDistance = 100;                                                //超聲波報警距離,默認100mm
  32. volatile uint8_t g_LedBright = 50;                                                //控制LED亮度
  33. extern uint8_t g_USART_DataBuf[DATA_BUF_MAX];                        //接收串口數(shù)據(jù)緩沖區(qū)
  34. extern uint8_t g_USART_RxCnt;                                                        //記錄串口接收數(shù)據(jù)的字節(jié)數(shù)
  35. extern uint8_t g_USART_RxDoneFlag;                                                //串口數(shù)據(jù)接收完成標志位
  36. extern volatile uint8_t g_RCTWakeUpFlag;                                //RTC喚醒標志位
  37. //MFRC522數(shù)據(jù)區(qū)
  38. extern u8  mfrc552pidbuf[18];
  39. extern u8  card_pydebuf[2];
  40. extern u8  card_numberbuf[5];

  41. //***************結束****************//

  42. int main(void)
  43. {
  44.        
  45.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //中斷優(yōu)先級分組2
  46.         InitLED();                                                                                        //初始化LED
  47.         InitKey();                                                                                        //初始化按鍵
  48.         InitBeep();                                                                                        //初始化蜂鳴器
  49.         InitHS0038();                                                                                //初始化紅外遙控
  50.         InitSr04();                                                                                        //初始化超聲波
  51.         InitKeyExit();                                                                                //使能按鍵外部中斷
  52.         InitUsart1(115200);                                                                        //初始化串口1 波特率115200bps
  53.         InitUsart3(9600);                                                                        //初始化串口3:波特率9600bps
  54. //        InitTIM2(10);                                                                                //初始化定時器2 定時時間100ms
  55. //        InitTIM3(100);                                                                                //初始化定時器3 定時時間10ms
  56. //        InitTIM8(100);                                                                                //初始化定時器8 定時時間10ms
  57.         InitDHT11();                                                                                //初始化溫濕度
  58.         OLED_Init();                                                                                //初始化OLED  
  59.         OLED_Clear();                                                                                 //清除屏幕       
  60.         InitRTC_f();                                                                                //初始化RTC和讀取RTC備份寄存器
  61.         InitADC();                                                                                        //初始化ADC
  62.         InitFires();                                                                                //初始化火焰?zhèn)鞲衅鳎覣DC

  63.         BootGrap();                                                                                        //啟動頁面
  64. //        MFRC522_Initializtion();
  65.         if(g_WarningDistance == 100)                                                //讀取超聲波報警距離
  66.                 ReadWarnDist();
  67.        
  68.         while(1)
  69.         {
  70.                 delay_us(50);
  71.                 TimeOut++;       
  72.                
  73.                 if(g_USART_RxDoneFlag)                                                        //接收藍牙命令執(zhí)行相應功能
  74.                 {
  75.                         ChangeTime_Date(g_USART_DataBuf);
  76.                         Ctrl_LED(g_USART_DataBuf);
  77.                         ShiftOrder(g_USART_DataBuf);
  78.                        
  79.                         if((g_Flags & 0x100) == 0x100)
  80.                                 g_Flags |= 0x400;                                                //開啟修改標志為       
  81.                        
  82.                         ChangeWarnDist();                                                        //修改超聲波報警距離
  83.                
  84.                         ClearUsartBuf_Flag();                                                //清除串口相關標志和緩沖區(qū)
  85.                 }

  86.                
  87.                 WarningBeep();                                                                        //蜂鳴器報警
  88.                
  89.                 if(TimeOut/10000 != 0 && TimeOut%10000 == 0 )        //顯示FLASH內(nèi)容
  90.                         CardRecord();                                                                                                                                               
  91.                
  92.                 if(PAin(8) == 0)
  93.                 {
  94.                         g_HS0038data = GET_HS0038Data();
  95.                        
  96.                         g_HS0038key = GetKey(g_HS0038data);
  97. //                        if(TimeOut/20000!=0 && TimeOut%20000==0)
  98.                                 printf("%d\r\n",g_HS0038key);
  99.                        
  100.                         if(g_HS0038key == 17)
  101.                         {
  102.                                 LED3 ^= 1;
  103.                         }
  104.                 }
  105.                
  106.                 if(TimeOut/5000 != 0 && TimeOut%5000 == 0 )               
  107.                         ShowTime_Date(g_RCTWakeUpFlag);                                //顯示時間日期
  108.                
  109.                 g_RCTWakeUpFlag = 0;                                                        //清除RTC喚醒標志
  110.                
  111.                 ShowSR04_Fire();                                                                //顯示超聲波距離和火焰檢測
  112.                
  113.                 ShowTH();                                                                                //顯示溫濕度
  114.                
  115.                 ReadCard();                                                                                //讀卡


  116. #ifdef DEBUG                                                                                        //調(diào)試用
  117.                 if(TimeOut/20000!=0 && TimeOut%20000==0)
  118.                 {
  119.                         TimeOut = 0;
  120.                         printf("%d\r\n",g_WarningDistance);
  121.                 }
  122. #endif
  123.         }
  124. }




  125. //-------------------------------------------------------------------------------------
  126. //        PWM2Led(100);
  127. //        PWM2Beep(100);
  128. //        AdjustLed3Brightness(0);
  129. //        AdjustLed4Brightness(0);
  130. //        AdjustBeepVOL(0);
  131. //------------------------------------------------------------------------------------               
  132.                 /****************** 蜂鳴器實驗:復位響*****************/
  133. //------------------------------------------------------------------------------------
  134. //        BeepOn();
  135. //        delay_ms(200);
  136. //        BeepOff();
  137. //------------------------------------------------------------------------------------       
  138. //        revID = Read_w25qxxID();
  139. //       
  140. //        printf("revID = %04X\r\n",revID);
  141. //------------------------------------------------------------------------------------               
  142.                 /****************** 串口3藍牙實驗:發(fā)送命令點亮LED*****************/
  143. //------------------------------------------------------------------------------------
  144. //                if(TimeOut/10000!=0 && TimeOut%10000 ==0)
  145. //                {
  146. //                        if(g_USART_RxDoneFlag)
  147. //                        {
  148. ////                                SendUartData(USART1,g_USART_DataBuf);               
  149. //                                Ctrl_LED(g_USART_DataBuf);
  150. //                               
  151. //                                ClearUsartBuf_Flag();
  152. //                        }
  153. //                        printf("SECOND: %d\r\n",sec++);
  154. //                                if(sec==7)
  155. //                                        sec = 1;
  156. //                }
  157. //------------------------------------------------------------------------------------               

  158. //------------------------------------------------------------------------------------               
  159.                 /****************** RTC實驗 *****************/
  160. //------------------------------------------------------------------------------------
  161. //------------------------------------------------------------------------------------
  162. //------------------------------------------------------------------------------------               
  163.                 /****************** 溫濕度傳感器實驗,獲取溫濕度值*****************/
  164. //------------------------------------------------------------------------------------
  165. //                delay_us(100);
  166. //                TimeOut++;
  167. //                if(TimeOut/60000 != 0 && TimeOut%60000 == 0)
  168. //                {
  169. //                        i_DHT11data = GET_DHT11Data();
  170. //                        printf("Humidity: %d.%d\r\n",(i_DHT11data>>24&0xff),(i_DHT11data>>16&0xff));
  171. //                        printf("Temperature: %d.%d\r\n",(i_DHT11data>>8&0xff),(i_DHT11data&0xff));
  172. //                        TimeOut=0;
  173. //                }
  174. //               
  175. //       
  176. //------------------------------------------------------------------------------------               
  177.                 /****************** PWM實驗:控制LED亮度*****************/
  178. //------------------------------------------------------------------------------------
  179. //                delay_ms(100);
  180. //                g_HS0038data = GET_HS0038Data();
  181. //                i_HS0038key = GetKey(g_HS0038data);
  182. //                printf("%d\r\n",i_HS0038key);
  183. //                if(i_HS0038key == 13 && g_LedBright > 0)
  184. //                {
  185. //                        g_LedBright -= 10;
  186. //                }
  187. //                else if(i_HS0038key == 12 && g_LedBright < 100)
  188. //                {
  189. //                        g_LedBright += 10;
  190. //                }
  191. //       
  192. //                AdjustLed1Brightness(g_LedBright);
  193. //                delay_ms(100);
  194. //------------------------------------------------------------------------------------
  195.                
  196. //------------------------------------------------------------------------------------               
  197.                 /****************** 定時器實驗:控制LED閃爍時間*****************/
  198. //------------------------------------------------------------------------------------
  199. //                LED1 ^= OFF;
  200. //                delay_ms(100);
  201. //------------------------------------------------------------------------------------
  202.                
  203.                
  204. //------------------------------------------------------------------------------------               
  205.                 /****************** 外部中斷實驗:按鍵控制LED*****************/
  206. //------------------------------------------------------------------------------------
  207. //                LED1 ^= OFF;
  208. //                delay_ms(100);
  209. //------------------------------------------------------------------------------------
  210.                
  211. //------------------------------------------------------------------------------------               
  212.                 /****************** 按鍵實驗:按鍵控制LED*****************/
  213. //------------------------------------------------------------------------------------
  214. //                if(KEY0 == 0)
  215. //                {
  216. //                        delay_ms(100);                                                        //軟件消除按鍵抖動
  217. //                        if(KEY0 == 0)
  218. //                        {
  219. //                                LED1 ^= OFF;
  220. //                        }
  221. //                }
  222. //------------------------------------------------------------------------------------       
  223.                
  224. //------------------------------------------------------------------------------------               
  225.                 /****************** 串口1實驗:發(fā)送命令點亮LED*****************/
  226. //------------------------------------------------------------------------------------
  227. //                delay_ms(100);
  228. //                if(g_USART_RxDoneFlag)
  229. //                {
  230. //                        Ctrl_LED(g_USART_DataBuf);
  231. //                        ClearBuf_Flag();
  232. //                }
  233. //------------------------------------------------------------------------------------
  234.                
  235.                
  236. //------------------------------------------------------------------------------------               
  237.                 /****************** 紅外遙控:按鍵0控制燈*****************/                               
  238. //------------------------------------------------------------------------------------

  239. //                g_HS0038data = GET_HS0038Data();
  240. //                g_HS0038key = GetKey(g_HS0038data);
  241. //                if(g_HS0038key<21)
  242. //                {
  243. //                        if(g_HS0038key == 0)
  244. //                                LED1 ^= 1;
  245. //                        if(g_HS0038key == 1)
  246. //                        {
  247. //                                i_DHT11data = GET_DHT11Data();
  248. //                                printf("Humidity: %d.%d\n",(i_DHT11data>>24&0xff),(i_DHT11data>>16&0xff));
  249. //                                printf("Temperature: %d.%d\n",(i_DHT11data>>8&0xff),(i_DHT11data&0xff));
  250. //                                TimeOut=0;
  251. //                        }
  252. //                        g_HS0038key = 21;
  253. //                        g_HS0038data = 0;
  254. //                }
  255. //------------------------------------------------------------------------------------
復制代碼

所有資料51hei提供下載:
智能安防.rar (109.13 KB, 下載次數(shù): 22)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表