找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2421|回复: 0
打印 上一主题 下一主题
收起左侧

自己写的一个基于STM32F104的智能安防源程序

[复制链接]
跳转到指定楼层
楼主
ID:462746 发表于 2019-10-29 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用到:超声波,OLED,蓝牙,火焰报警传感器,温湿度传感器;
不足:没有用到操作系统,当时想学ucos3的,然后再写的,但是发下看了一下之后,有点蒙,就直接写裸机

单片机源程序如下:
  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. /************全局变量声明区************/
  19. //===================================//

  20. //0x01:时间显示标志 0x02:清除时间标志 0x04:温湿度显示标志 0x08:清除温湿度显示 0x10:显示超声波距离和火焰检测标志
  21. //0x20:清除超声波距离和火焰检测显示标志
  22. volatile uint32_t g_Flags = 0;

  23. __IO uint32_t g_HS0038data = 0;                                                        //接收红外遥控的数据
  24. volatile uint8_t g_HS0038key = 0;                                                //红外键值
  25.                                                        
  26. __IO uint8_t SYSClockMode = 0;                                                         //用做选择系统时钟源,默认系统时钟由PLL提供
  27. uint32_t TimeOut = 0;                                                                        //用作优化                                                                       
  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];                        //接收串口数据缓冲区
  34. extern uint8_t g_USART_RxCnt;                                                        //记录串口接收数据的字节数
  35. extern uint8_t g_USART_RxDoneFlag;                                                //串口数据接收完成标志位
  36. extern volatile uint8_t g_RCTWakeUpFlag;                                //RTC唤醒标志位
  37. //MFRC522数据区
  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);         //中断优先级分组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();                                                                                //初始化火焰传感器,并启动ADC

  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)                                                        //接收蓝牙命令执行相应功能
  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();                                                //清除串口相关标志和缓冲区
  85.                 }

  86.                
  87.                 WarningBeep();                                                                        //蜂鸣器报警
  88.                
  89.                 if(TimeOut/10000 != 0 && TimeOut%10000 == 0 )        //显示FLASH内容
  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                                                                                        //调试用
  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蓝牙实验:发送命令点亮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实验:发送命令点亮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, 下载次数: 22)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表