久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3193|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

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

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

單片機(jī)源程序如下:
  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:時(shí)間顯示標(biāo)志 0x02:清除時(shí)間標(biāo)志 0x04:溫濕度顯示標(biāo)志 0x08:清除溫濕度顯示 0x10:顯示超聲波距離和火焰檢測標(biāo)志
  21. //0x20:清除超聲波距離和火焰檢測顯示標(biāo)志
  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)時(shí)鐘源,默認(rèn)系統(tǒng)時(shí)鐘由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;                                                //超聲波報(bào)警距離,默認(rèn)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ù)接收完成標(biāo)志位
  36. extern volatile uint8_t g_RCTWakeUpFlag;                                //RTC喚醒標(biāo)志位
  37. //MFRC522數(shù)據(jù)區(qū)
  38. extern u8  mfrc552pidbuf[18];
  39. extern u8  card_pydebuf[2];
  40. extern u8  card_numberbuf[5];

  41. //***************結(jié)束****************//

  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);                                                                                //初始化定時(shí)器2 定時(shí)時(shí)間100ms
  55. //        InitTIM3(100);                                                                                //初始化定時(shí)器3 定時(shí)時(shí)間10ms
  56. //        InitTIM8(100);                                                                                //初始化定時(shí)器8 定時(shí)時(shí)間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)                                                //讀取超聲波報(bào)警距離
  66.                 ReadWarnDist();
  67.        
  68.         while(1)
  69.         {
  70.                 delay_us(50);
  71.                 TimeOut++;       
  72.                
  73.                 if(g_USART_RxDoneFlag)                                                        //接收藍(lán)牙命令執(zhí)行相應(yīng)功能
  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;                                                //開啟修改標(biāo)志為       
  81.                        
  82.                         ChangeWarnDist();                                                        //修改超聲波報(bào)警距離
  83.                
  84.                         ClearUsartBuf_Flag();                                                //清除串口相關(guān)標(biāo)志和緩沖區(qū)
  85.                 }

  86.                
  87.                 WarningBeep();                                                                        //蜂鳴器報(bào)警
  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);                                //顯示時(shí)間日期
  108.                
  109.                 g_RCTWakeUpFlag = 0;                                                        //清除RTC喚醒標(biāo)志
  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.                 /****************** 蜂鳴器實(shí)驗(yàn):復(fù)位響*****************/
  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藍(lán)牙實(shí)驗(yàn):發(fā)送命令點(diǎn)亮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實(shí)驗(yàn) *****************/
  160. //------------------------------------------------------------------------------------
  161. //------------------------------------------------------------------------------------
  162. //------------------------------------------------------------------------------------               
  163.                 /****************** 溫濕度傳感器實(shí)驗(yàn),獲取溫濕度值*****************/
  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實(shí)驗(yàn):控制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.                 /****************** 定時(shí)器實(shí)驗(yàn):控制LED閃爍時(shí)間*****************/
  198. //------------------------------------------------------------------------------------
  199. //                LED1 ^= OFF;
  200. //                delay_ms(100);
  201. //------------------------------------------------------------------------------------
  202.                
  203.                
  204. //------------------------------------------------------------------------------------               
  205.                 /****************** 外部中斷實(shí)驗(yàn):按鍵控制LED*****************/
  206. //------------------------------------------------------------------------------------
  207. //                LED1 ^= OFF;
  208. //                delay_ms(100);
  209. //------------------------------------------------------------------------------------
  210.                
  211. //------------------------------------------------------------------------------------               
  212.                 /****************** 按鍵實(shí)驗(yàn):按鍵控制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實(shí)驗(yàn):發(fā)送命令點(diǎn)亮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. //------------------------------------------------------------------------------------
復(fù)制代碼

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


評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线看 | 久草视频在线播放 | 狠狠躁躁夜夜躁波多野结依 | 爱爱视频在线观看 | 337p日本欧洲亚洲大胆鲁鲁 | 欧美黄色一区 | 一区二区国产在线 | 日韩视频一区二区三区 | 99精品国自产在线 | 精品成人在线观看 | 日本久久久一区二区三区 | 亚洲国产欧美在线 | 91久色 | 一道本在线 | 黄免费观看视频 | 在线观看亚洲专区 | 青青草一区 | 一区精品在线观看 | 自拍偷拍第1页 | 麻豆一区一区三区四区 | 毛片免费观看 | 中文字幕高清 | www.亚洲视频 | 久久一 | 日韩av在线中文字幕 | 久久一 | 欧美一区二区三区 | 国产精品一区在线 | 夜夜夜操 | 神马久久av | 欧美性猛交 | 91成人午夜性a一级毛片 | 搞黄网站在线观看 | 欧美高清成人 | 国内在线视频 | 韩国久久精品 | 久久精品一区 | 宅男伊人 | 欧美福利 | 国内精品视频一区二区三区 | 玩丰满女领导对白露脸hd |