找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于stm32单片机的水温控制PID控制源程序-2018电子设计大赛作品

[复制链接]
跳转到指定楼层
楼主
ID:928738 发表于 2023-8-14 17:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32单片机源程序如下:
  1. /************************************************************
  2. **实验名称:
  3. **功能:
  4. **注意事项:显示汉字采用了两种方式,一种是代码字库,一种是外FLASH字库.
  5. **作者:
  6. *************************************************************/

  7. #include "STM32Lib\\stm32f10x.h"
  8. #include "hal.h"
  9. #include "TFT\\TFTdriver.h"
  10. //#include "bmp_data.h"
  11. #include "KeyManage.h"
  12. #include <math.h>


  13. u16 temprature=100;//当前温度
  14. //u8 temprature_wei[]={0,0,1}; //小数--各位--十位
  15. u16 set_temprature=100;//设定温度。最后一位是小数
  16. u8 set_wei[]={0,0,1};//小数 --个位-- 十位
  17. char string1[]="当前温度:10.0毒";
  18. char string2[]="设定温度:10.0毒";
  19. char string3[]="请设定温度";
  20. extern void USART1_Putc(unsigned char c);
  21. extern void USART2_Putc(unsigned char c);
  22. extern void PID_temp(void);
  23. extern void PID_Ctrl(void);//增量式PID
  24. u16 temp[200]={0};//温度存储共1000s
  25. u8 flag=0;//超过200s的标志
  26. u16 temp_geshu=0;
  27. u8 flag_1s=0;//1s中断
  28. u8 flag_3s=0;//3s中断
  29. u8 heat_pwm=0;//加热时长
  30. u8 state=0;//当前状态 0--请输入数据        ;1--加热中;2--冷却中;//3--稳态
  31. int main(void)
  32. {
  33. //        u32 i,j,k;

  34.         ChipHalInit();                        //片内硬件初始化
  35.         ChipOutHalInit();                //片外硬件初始化
  36.         
  37.         Lcd_Init();                                //初始化

  38.         TFTRect(10,10,230,310,BLACK);

  39.         TFTHLine(10,30,220,BLACK);
  40.         TFTHLine(10,50,220,BLACK);

  41.         
  42.         BG_COLOR=GRAY1;//设置底色
  43.         TFTShowString16(20,12,string1,RED,0);
  44.         
  45.         
  46.         
  47.         TFTShowString16(20,32,string2,BLUE,0);
  48. //        BG_COLOR=RED;
  49.         TFTShowString16(20,72,string3,RED,0);
  50.         
  51.         //TFTShowBmp(120,120,64,64,(COLOR*)Bmp_1);
  52. //        TFTShowASC816(92,12,'0',RED);
  53. ////////坐标系
  54.         BG_COLOR=GRAY1;//设置底色
  55.         TFTRectFill(11,100,229,300,GRAY1);//清空
  56.         TFTHLine(11,300,219,GREEN);        //0度每格0.5度
  57.         TFTShowString16(11,300-8," 0",RED,0);
  58.         TFTHLine(11,280,219,GREEN);
  59.         TFTShowString16(11,280-8,"10",RED,0);
  60.         TFTHLine(11,260,219,GREEN);
  61.         TFTShowString16(11,260-8,"20",RED,0);
  62.         TFTHLine(11,240,219,GREEN);
  63.         TFTShowString16(11,240-8,"30",RED,0);
  64.         TFTHLine(11,220,219,GREEN);
  65.         TFTShowString16(11,220-8,"40",RED,0);
  66.         TFTHLine(11,200,219,GREEN);
  67.         TFTShowString16(11,200-8,"50",RED,0);
  68.         TFTHLine(11,180,219,GREEN);
  69.         TFTShowString16(11,180-8,"60",RED,0);
  70.         TFTHLine(11,160,219,GREEN);
  71.         TFTShowString16(11,160-8,"70",RED,0);
  72.         TFTHLine(11,140,219,GREEN);
  73.         TFTShowString16(11,140-8,"80",RED,0);
  74.         for(;;)
  75.         {
  76.            ManageKey(PollingKey());
  77. //           USART1_Putc('a');
  78. /*                for(j=0;j<200;j++)
  79.                 {
  80.                         TFTHLine(11,150,230,BLACK);
  81.                         for(i=0;i<200;i++)
  82.                         {
  83.                                 TFTPoint(i+11,150-(signed char)(sin(3.14*(i+j)/100)*50),RED);
  84.                         }
  85.                         for(k=0;k<30000;k++);
  86.                         TFTRectFill(11,100,211,200,GRAY1);         

  87.                 }                */
  88.                 if(flag_1s)
  89.                 {
  90.                         flag_1s=0;
  91.                
  92.                         USART2_Putc(temprature/100+'0');
  93.                         USART2_Putc(temprature%100/10+'0');
  94.                         USART2_Putc('.');
  95.                         USART2_Putc(temprature%10+'0');
  96.                         USART2_Putc(',');
  97.                         if(temp_geshu<199&&temp_geshu>0)
  98.                         {
  99.                                 temp[temp_geshu]=temprature; //29-229绘图
  100.                                 temp_geshu++;
  101.                                 TFTPoint(29+temp_geshu,300-temprature/5,RED);
  102.                         }
  103.                         else if(temp_geshu==0)
  104.                         {
  105.                                 temp[temp_geshu]=temprature; //29-229绘图
  106.                                 temp_geshu++;        
  107.                                 ////////重画坐标系
  108.                                 TFTRectFill(11,100,229,300,GRAY1);//清空
  109.                                 TFTHLine(11,300,219,GREEN);        //0度每格0.5度
  110.                                 TFTShowString16(11,300-8," 0",RED,0);
  111.                                 TFTHLine(11,280,219,GREEN);
  112.                                 TFTShowString16(11,280-8,"10",RED,0);
  113.                                 TFTHLine(11,260,219,GREEN);
  114.                                 TFTShowString16(11,260-8,"20",RED,0);
  115.                                 TFTHLine(11,240,219,GREEN);
  116.                                 TFTShowString16(11,240-8,"30",RED,0);
  117.                                 TFTHLine(11,220,219,GREEN);
  118.                                 TFTShowString16(11,220-8,"40",RED,0);
  119.                                 TFTHLine(11,200,219,GREEN);
  120.                                 TFTShowString16(11,200-8,"50",RED,0);
  121.                                 TFTHLine(11,180,219,GREEN);
  122.                                 TFTShowString16(11,180-8,"60",RED,0);
  123.                                 TFTHLine(11,160,219,GREEN);
  124.                                 TFTShowString16(11,160-8,"70",RED,0);
  125.                                 TFTHLine(11,140,219,GREEN);
  126.                                 TFTShowString16(11,140-8,"80",RED,0);
  127.                                 TFTPoint(29+temp_geshu,300-temprature/5,RED);
  128.                                 
  129.                         }
  130.                         else if(temp_geshu==199)
  131.                         {
  132.                                 temp[temp_geshu]=temprature; //29-229绘图
  133.                                 temp_geshu=0;//个数回零
  134.                                 TFTPoint(29+temp_geshu,300-temprature/5,RED);
  135.                         }
  136.                 }
  137.                 if(flag_3s)
  138.                 {
  139.                         PID_temp();
  140.                         PID_Ctrl();
  141.                         flag_3s=0;
  142. //                        heat_pwm=45;
  143.                 }
  144.         }
  145. }


复制代码


原理图:无
仿真:无
程序: 程序.7z (167.36 KB, 下载次数: 39)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:370706 发表于 2023-10-19 22:05 | 只看该作者
很不错的文章
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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