找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4397|回复: 0
收起左侧

基于STM32的温度传感器和烟雾报警器程序源码,在LCD显示的同时通过HC05与手机通讯

[复制链接]
ID:642248 发表于 2019-11-14 20:54 | 显示全部楼层 |阅读模式
单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"
  7. #include "hc05.h"
  8. #include "usart3.h"                                 
  9. #include "string.h"           
  10. #include "usmart.h"        
  11. #include "beep.h"
  12. #include "adc.h"
  13. #include "tsensor.h"



  14. //显示ATK-HC05模块的主从状态
  15. void HC05_Role_Show(void)
  16. {
  17.         if(HC05_Get_Role()==1)LCD_ShowString(30,140,200,16,16,"ROLE:Master");        //主机
  18.         else LCD_ShowString(30,140,200,16,16,"ROLE:Slave ");                                         //从机
  19. }
  20. //显示ATK-HC05模块的连接状态
  21. void HC05_Sta_Show(void)
  22. {                                                                                                
  23.         if(HC05_LED)LCD_ShowString(120,140,120,16,16,"STA:Connected ");                        //连接成功
  24.         else LCD_ShowString(120,140,120,16,16,"STA:Disconnect");                                 //未连接                                 
  25. }        

  26. int main(void)
  27. {
  28.         short temp;  
  29.         u8 key;
  30.         u8 sendmask=0;
  31.         //u8 sendcnt=0;
  32.         u8 sendbuf[20];         
  33.         u8 reclen=0;         
  34.         delay_init();                     //延时函数初始化         
  35.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  36.         uart_init(115200);                 //串口初始化为9600
  37.         LED_Init();                                //初始化与LED连接的硬件接口
  38.         KEY_Init();                                //初始化按键
  39.   LCD_Init();                                //初始化LCD
  40.   usmart_dev.init(72);         //初始化USMART        
  41.          
  42.          
  43.   BEEP_Init();
  44.          T_Adc_Init();                                  //ADC初始化                  
  45.         

  46.          
  47.         POINT_COLOR=BLUE;//设置字体为蓝色      
  48.          LCD_ShowString(30,280,200,16,16,"TEMPERATE: 00.00C");
  49.         LCD_ShowString(30,310,200,16,16,"SMOKE:    ");
  50.          
  51.          
  52.          
  53.         delay_ms(1000);                        //等待蓝牙模块上电稳定
  54.          while(HC05_Init())                 //初始化ATK-HC05模块  
  55.         {
  56.                 LCD_ShowString(30,90,200,16,16,"ATK-HC05 Error!");
  57.                 delay_ms(500);
  58.                 LCD_ShowString(30,90,200,16,16,"Please Check!!!");
  59.                 delay_ms(100);
  60.         }                                                                                                      

  61.         LCD_ShowString(30,110,200,16,16,"ATK-HC05 Standby!");  
  62.   LCD_ShowString(30,160,200,16,16,"Send:");        
  63.         LCD_ShowString(30,180,200,16,16,"Receive:");
  64.         POINT_COLOR=BLUE;
  65.         HC05_Role_Show();
  66.         delay_ms(100);
  67.         USART3_RX_STA=0;
  68.          while(1)
  69.         {               
  70.                 HC05_Sta_Show();
  71.                 temp=Get_Temprate();        //得到温度值
  72.                 //if(temp>70)
  73.                 //{LCD_ShowString(30+10*8,310,16,16,16,"DANGER");
  74.                 //LED0=1;
  75.                 //BEEP=0;}
  76.                 if(temp<0)
  77.                 {

  78.                         temp=-temp;
  79.                         LCD_ShowString(30+10*8,280,200,16,16,"-");        //显示负号
  80.                 }
  81.                 else

  82.                 LCD_ShowString(30+10*8,280,16,16,16," ");        //无符号               
  83.                 LCD_ShowxNum(30+11*8,280,temp/100,2,16,0);                //显示整数部分
  84.                 LCD_ShowxNum(30+14*8,280,temp%100,2,16, 0X80);        //显示小数部分
  85.                 LED1=1;        
  86.                
  87.                 if(PBin(13))
  88.                 {LED0=1;BEEP=0;LCD_ShowString(30+6*8,310,200,16,16," SAFE!  ");LED1=0;
  89.                 }

  90.                 else if(PBin(13)==0||temp>70)
  91.                
  92.          {LED0=0;
  93.                 BEEP=1;
  94.                 LCD_ShowString(30+6*8,310,200,16,16,"DANGER!");
  95.                 LED1=1;}

  96.                 delay_ms(250);
  97.                
  98.                
  99.                 key=KEY_Scan(0);
  100.                 if(key==KEY1_PRES)                                                //切换模块主从设置
  101.                 {
  102.                            key=HC05_Get_Role();
  103.                         if(key!=0XFF)
  104.                         {
  105.                                 key=!key;                                          //状态取反           
  106.                                 if(key==0)HC05_Set_Cmd("AT+ROLE=0");
  107.                                 else HC05_Set_Cmd("AT+ROLE=1");
  108.                                 HC05_Role_Show();
  109.                                 HC05_Set_Cmd("AT+RESET");        //复位ATK-HC05模块
  110.                                 delay_ms(200);
  111.                         }
  112.                 }
  113.                
  114.                 else if(BEEP==1)
  115.                 {
  116.                         sendmask=1;                                //发送/停止发送           
  117.         
  118.                 }
  119.                 else if
  120.                 (BEEP==0)
  121.                 {LCD_Fill(30+40,160,240,160+16,WHITE);
  122.                         sendmask=0;}//清除显示
  123.                
  124.                 delay_ms(10);           

  125.                         if(sendmask)                                        //定时发送
  126.                         {
  127.                                 sprintf((char*)sendbuf,"Danger\r\n");
  128.                                   LCD_ShowString(30+40,160,200,16,16,sendbuf);        //显示发送数据        
  129.                                 u3_printf("Danger\r\n");                //发送到蓝牙模块
  130.                         }
  131.                         HC05_Sta_Show();            
  132.                         
  133.       delay_ms(10);        
  134.                           
  135.                
  136.                 if(USART3_RX_STA&0X8000)                        //接收到一次数据了
  137.                 {
  138.                         LCD_Fill(30,200,64,64,WHITE);        //清除显示
  139.                          reclen=USART3_RX_STA&0X7FFF;        //得到数据长度
  140.                           USART3_RX_BUF[reclen]=0;                 //加入结束符
  141.                         if(reclen==9||reclen==8)                 //控制DS1检测
  142.                         {
  143.                                 if(strcmp((const char*)USART3_RX_BUF,"+LED0 ON")==0)LED0=0;        //打开LED1
  144.                                 if(strcmp((const char*)USART3_RX_BUF,"+LED0 OFF")==0)LED0=1;//关闭LED1
  145.                                 if(strcmp((const char*)USART3_RX_BUF,"+BEEP ON")==0) BEEP=1;
  146.                                 if(strcmp((const char*)USART3_RX_BUF,"+BEEP OFF")==0) BEEP=0;
  147.                         }
  148.                          LCD_ShowString(30,200,209,16,16,USART3_RX_BUF);//显示接收到的数据
  149.                          USART3_RX_STA=0;         
  150.                 }                                                                                                                                                                        

  151.         }
  152. }
复制代码

所有资料51hei提供下载:
1.7z (254.9 KB, 下载次数: 127)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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