找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13134|回复: 18
收起左侧

基于STM32的智能温度控制系统源码

  [复制链接]
ID:165873 发表于 2018-4-30 20:13 | 显示全部楼层 |阅读模式
44.jpg

将采集的温度通过蓝牙模块实时传给手机。我重新回来了 以后经常分享

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "key.h"
  7. #include "adc.h"
  8. #include "math.h"
  9. #include "exti.h"
  10. #include "timer.h"
  11. #include "hc05.h"
  12. #include "usart2.h"                                 
  13. #include "string.h"        


  14. u8 yuzhi=25;
  15. u8 shangxian=0;
  16. u8 xiaxian=0;
  17. u8 wendu_4=0;
  18. float wendu_1=0,wendu_2=0,wendu_3;




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


  31. int main(void)
  32. {
  33.          u16 adcx;
  34.          u8 sendcnt_1=0;
  35.          u8 sendcnt_2=0;
  36.          u8 sendbuf[40];         
  37.          u8 reclen=0;  
  38.          float temp;
  39.          delay_init();                     //延时函数初始化         
  40.          uart_init(9600);                 //串口初始化为9600
  41.          LED_Init();                                  //初始化与LED连接的硬件接口
  42.           LCD_Init();
  43.           Adc_Init();                                  //ADC初始化        
  44.           EXTIX_Init();                //外部中断初始化         
  45.          KEY_Init();                  //初始化与按键连接的硬件接口
  46.          LED0=0;                                        //点亮LED         
  47.          POINT_COLOR=RED;//设置字体为红色
  48.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组
  49.          LCD_ShowString(50,0,200,16,16,"The Eighth Group");
  50.          LCD_ShowString(0,20,200,16,16,"Temperature Control intel");        
  51.          LCD_ShowString(60,40,200,16,16,"-ligent System");
  52.          LCD_ShowString(0,60,200,16,16,"Set the threshold:");
  53.          LCD_ShowString(160,60,200,16,16,"'C");        
  54.      LCD_ShowString(0,80,200,16,16,"Data:2018/4/28");        
  55.          LCD_ShowString(0,100,200,16,16,"Temperature:00.0'C");        
  56.          LCD_ShowString(0,120,200,16,16,"ADC_CH1_VAL:");         
  57.          LCD_ShowString(0,140,200,16,16,"ADC_CH1_VOL:0.000V");
  58.          LCD_ShowString(0,160,200,16,16,"Current Process:");  
  59.          LCD_ShowString(128,160,200,16,16,"KEEP");
  60.          LCD_ShowString(0,180,200,16,16,"ShangXian:00'C");
  61.          LCD_ShowString(0,200,200,16,16,"XiaXian:00'C");
  62.          
  63.          
  64.          POINT_COLOR=MAGENTA;
  65.          //显示提示信息
  66.          LCD_ShowString(0,260,200,16,16,"Send:");        
  67.          LCD_ShowString(0,280,200,16,16,"Receive:");
  68.          while(HC05_Init())                 //初始化ATK-HC05模块  
  69.          {
  70.                  LCD_ShowString(0,220,200,16,16,"ATK-HC05 Error!");
  71.                  delay_ms(500);
  72.                  LCD_ShowString(0,220,200,16,16,"Please Check!!!");
  73.                  delay_ms(100);
  74.          }                 
  75.          LCD_ShowString(0,220,200,16,16,"ATK-HC05 Standby!");
  76.          HC05_Sta_Show();
  77.          HC05_Role_Show();
  78.          POINT_COLOR=BLUE;//设置字体为蓝色
  79.          LCD_ShowxNum(144,60,yuzhi,2,16,0X80);
  80.          while(1)
  81.         {
  82.                 TIM3_Int_Init(9999,7199);//10Khz的计数频率,计数到5000为500ms  
  83.                 LED0=!LED0;
  84.                 adcx=Get_Adc_Average(ADC_Channel_1,10);
  85.                 POINT_COLOR=BLUE;//设置字体为蓝色
  86.                 LCD_ShowxNum(96,120,adcx,4,16,0);//显示ADC的值
  87.                 temp=(float)adcx*(3.3/4096);
  88.                 wendu_1=temp*10;
  89.                 adcx=temp;
  90.                 LCD_ShowxNum(96,140,adcx,1,16,0);//显示电压值
  91.                 temp-=adcx;
  92.                 temp*=1000;
  93.                 LCD_ShowxNum(112,140,temp,3,16,0X80);
  94.                 LED0=!LED0;
  95.                 delay_ms(250);        
  96.                 wendu_3=(float)(10000*wendu_1+25692)/2107;
  97.                 wendu_4=wendu_3;
  98.                 sendcnt_1=wendu_3;
  99.                
  100.                 LCD_ShowxNum(96,100,wendu_3,2,16,0);//
  101.                 wendu_3-=wendu_4;
  102.                 wendu_2=wendu_3*10;
  103.                 sendcnt_2=wendu_2;
  104.                 LCD_ShowxNum(120,100,wendu_2,1,16,0);//
  105.                 delay_ms(200);
  106.                 POINT_COLOR=MAGENTA;
  107.                 sprintf((char*)sendbuf,"Temperature:%d.%d'C\r\n",sendcnt_1,sendcnt_2);
  108.                   LCD_ShowString(48,260,200,16,16,sendbuf);        //显示发送数据        
  109.                 u2_printf("Temperature: %d.%d\r\n",sendcnt_1,sendcnt_2);                //发送到蓝牙模块
  110.                
  111.                 POINT_COLOR=BLUE;
  112.                 if(wendu_4>=shangxian)
  113.                 {
  114.                         LCD_ShowString(128,160,200,16,16,"SNOW");
  115.                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);        
  116.                         GPIO_SetBits(GPIOC,GPIO_Pin_1);        
  117.                 }
  118.                 if(wendu_4<=xiaxian)
  119.                 {
  120.                         LCD_ShowString(128,160,200,16,16,"HOT ");
  121.                         GPIO_ResetBits(GPIOC,GPIO_Pin_1);        
  122.                         GPIO_SetBits(GPIOC,GPIO_Pin_0);                                       
  123.                 }
  124.                 if(wendu_4<shangxian&&wendu_4>xiaxian)
  125.                 {
  126.                         LCD_ShowString(128,160,200,16,16,"KEEP");
  127.                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);        
  128.                         GPIO_ResetBits(GPIOC,GPIO_Pin_1);        
  129.                 }
  130.                 if(USART2_RX_STA&0X8000)                        //接收到一次数据了
  131.                 {
  132.                         LCD_Fill(64,280,264,300,WHITE);        //清除显示
  133.                          reclen=USART2_RX_STA&0X7FFF;        //得到数据长度
  134.                           USART2_RX_BUF[reclen]=0;                 //加入结束符
  135.                         if(reclen==9||reclen==8)                 //控制DS1检测
  136.                         {
  137.                                 if(strcmp((const char*)USART2_RX_BUF,"+LED1 ON")==0)LED1=0;        //打开LED1
  138.                                 if(strcmp((const char*)USART2_RX_BUF,"+LED1 OFF")==0)LED1=1;//关闭LED1
  139.                         }
  140.                         POINT_COLOR=MAGENTA;
  141.                          LCD_ShowString(64,280,200,119,16,USART2_RX_BUF);//显示接收到的数据
  142.                          USART2_RX_STA=0;         
  143.                 }                                         
  144.         }                                                                                    
  145. }
复制代码

所有资料51hei提供下载:
传感器课设程序32版终.rar (366.14 KB, 下载次数: 232)
回复

使用道具 举报

ID:1 发表于 2018-5-2 02:44 | 显示全部楼层
能分享下原理图和APP吗?
回复

使用道具 举报

ID:318517 发表于 2018-5-2 15:26 | 显示全部楼层
赞,正需要!
回复

使用道具 举报

ID:228186 发表于 2018-5-2 16:50 | 显示全部楼层
学习一下,看的我一脸闷逼。不过还要谢谢大神!
回复

使用道具 举报

ID:165873 发表于 2018-5-3 09:13 | 显示全部楼层
admin 发表于 2018-5-2 02:44
能分享下原理图和APP吗?

我是用的开发板了,原理图就是正点原子的Mini版的原理图,然后APP网上也有对应的了 如果需要的话 可以留下QQ我发你
回复

使用道具 举报

ID:304456 发表于 2018-5-3 13:46 | 显示全部楼层
赞,正需要!
回复

使用道具 举报

ID:330264 发表于 2018-5-17 11:09 | 显示全部楼层
老哥1    那个温度传感器线是怎么连的   help  给个具体流程
回复

使用道具 举报

ID:165873 发表于 2018-6-14 10:57 | 显示全部楼层
1747641898 发表于 2018-5-17 11:09
老哥1    那个温度传感器线是怎么连的   help  给个具体流程

温度传感器是用的lm35d,只有三个端子,两个供电,一个给ADC采集的io即可
回复

使用道具 举报

ID:165873 发表于 2018-6-14 10:58 | 显示全部楼层
wyj841224 发表于 2018-5-2 16:50
学习一下,看的我一脸闷逼。不过还要谢谢大神!

哈哈 谢谢你
回复

使用道具 举报

ID:346024 发表于 2018-6-22 21:28 | 显示全部楼层
请问有仿真图吗。。
回复

使用道具 举报

ID:357360 发表于 2018-6-23 21:47 | 显示全部楼层
串口的作用是什么啊 没有看懂这部分的程序
回复

使用道具 举报

ID:525968 发表于 2019-5-2 15:00 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:481039 发表于 2019-5-31 10:47 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:473205 发表于 2019-6-4 21:27 | 显示全部楼层
461668926QQ,发下app,谢谢!!
回复

使用道具 举报

ID:511461 发表于 2019-6-13 20:08 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:491301 发表于 2019-7-22 18:48 | 显示全部楼层
这个TIM3定时器进入中断什么都没做啊 求解  新手
回复

使用道具 举报

ID:677258 发表于 2019-12-30 10:58 | 显示全部楼层
感谢楼主的分享
回复

使用道具 举报

ID:779823 发表于 2020-6-15 12:32 | 显示全部楼层
老哥可以提供一下源文件吗  我想自己仿真一下,不知道怎么连线
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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