芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密

飞芯科技提供芯片解密,芯片破解,IC解密,单片机解密,MCU解密,STM解密逆向服务

芯片解密stm32F103单片机温控PID算法源码

  1. 芯片解密OLED显示屏(7脚SPI):
  2.         OLED_D0  -> PB13
  3.         OLED_D1         -> PB15
  4.         OLED_RES -> PB15
  5.         OLED_DC -> PB11
  6.         OLED_CS -> PB12
  7. 芯片解密旋转编码器:
  8.         BM_CLK -> PB0
  9.         BM_DT  -> PB3
  10.         BM_SW  -> PB1
  11. 蜂鸣器:
  12.         BEEPER -> PB9
  13. 控制相关:
  14.         NTC         -> PA6
  15.         T12_ADC -> PA4
  16.         HEAT         -> PA0
  17.         SLEEP         -> PA8
  18.         Vm                -> PA2
  19. //此版本的代码实现功能:
  20. //-T12烙铁头的温度测量
  21. //-加热器的分段PID控制
  22. //-通过旋转编码器进行温度控制
  23. //-短按旋转编码器开关可进入休眠模式
  24. //-长按旋转编码器开关的设置菜单
  25. //-手柄运动检测(通过检查振动开关)
  26. //-输入电压检测
  27. //-时间驱动的睡眠/关机模式(通过计算未使用烙的时长)
  28. //-OLED上的信息显示
  29. //-蜂鸣器
  30. //-将用户设置存储到FLASH

  31. */
  32. #include "stm32f10x.h"
  33. #include "main.h"

  34. void menuHandler(void);

  35. extern unsigned char logo[];
  36. char tempStr[10];//电池电压字符串
  37. float volatile VinVolt;//输入电压
  38. u16 volatile NTC_temp,last_NTC_temp;//手柄温度

  39. u16 volatile T12_temp;//烙铁头温度
  40. u16 volatile tempArray[TEMPARRLEN];//温度数组,均值滤波
  41. u16 NTC_tempArray[NTC_TEMPARRLEN];//手柄温度数组,均值滤波
  42. u16 count;
  43. u8 err,err_count;
  44. u8 n;
  45. int main()
  46. {
  47.         u8 i;
  48.         u16 sum;
  49.         KEY_Init();//初始化按键GPIO
  50.         delay_init();//初始化延时函数
  51.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2,2位抢占优先级和2位子优先级
  52.         usart_init(115200);//初始化串口1,波特率为115200
  53.         TIM3_Init(19999,71);//1MHz,每20ms检测按键一次;
  54.         BEEPER_Init();        //BEEPER初始化
  55.         Adc_Init();                //ADC初始化
  56.         HEAT_Init();//加热头控制端初始化
  57.         OLED_Init();        //初始化OLED
  58.         set_Init();//读取用户设置数据
  59.        
  60.         PID_Setup();//PID初始化
  61.         TIM4_Counter_Init(99,719);//定时1ms中断一次
  62.         OLED_Clear();
  63.         OLED_DrawPointBMP(0,0,logo,128,64,1);//显示logo
  64.         OLED_Refresh_Gram();//刷新显存
  65.         delay_ms(1000);
  66.        
  67.         beeperOnce();
  68.         //初始化温度
  69.         NTC_temp = get_NTC_temp();//读取手柄温度
  70.         T12_temp = NTC_temp;
  71.         for(n=0; n<TEMPARRLEN; n++)
  72.         {
  73.                 tempArray[n]=T12_temp;
  74.         }
  75.        
  76.         OLED_Fill(0,0,127,63,0);
  77.         while (1){
  78.                 if(count%100==0)//更新一次
  79.                 {
  80.                         NTC_temp =  get_NTC_temp();//获取一次手柄温度值
  81.                         get_Vin();//获取一次输入电压值
  82.                        
  83.                         if(NTC_temp>=50)
  84.                         {
  85.                                 NTC_temp =last_NTC_temp;
  86.                         }
  87.                         else
  88.                         {
  89.                             last_NTC_temp = NTC_temp;
  90.                         }
  91.                         sum=0;
  92.                         for(i=0;i<NTC_TEMPARRLEN-1;i++)
  93.                         {
  94.                                 NTC_tempArray[i] = NTC_tempArray[i+1];//元素前移
  95.                                 sum += NTC_tempArray[i+1];
  96.                         }
  97.                         NTC_tempArray[NTC_TEMPARRLEN-1] = NTC_temp;
  98.                         sum += NTC_tempArray[NTC_TEMPARRLEN-1];
  99.                         NTC_temp = (u16)sum/NTC_TEMPARRLEN;//均值滤波
  100.                         //手柄连接检测
  101.                         if(NTC_temp>=5&&NTC_temp<=50)
  102.                         {
  103.                                 err_count=0;
  104.                                 err=0;
  105.                         }
  106.                         if((NTC_temp<5||NTC_temp>50)&&err==0)
  107.                         {
  108.                                 err_count++;
  109.                         }
  110.                         if(err_count>=8)
  111.                         {
  112.                                 err=1;//手柄未连接
  113.                         }
  114.                 }
  115.                 if(nowMenuIndex==home && count%800==0)//更新一次home界面
  116.                 {
  117.                         homeWindow();//显示主界面
  118.                         OLED_Refresh_Gram();//刷新显存
  119.                 }
  120.                 if(menuEvent[0])
  121.                 {
  122.                         menuHandler();
  123.                         beeperOnce();
  124.                         if(menuEvent[1]==KEY_enter && nowMenuIndex == home)
  125.                         {
  126.                                 if(sleepFlag) {sleepFlag=0; sleepCount=0;shutCount = 0;}//短按触发关闭休眠
  127.                                 else sleepFlag = 1;
  128.                         }
  129.                         if(shutFlag) {shutFlag=0;shutCount = 0;}//任意按键触发开机
  130.                         lastMenuIndex = nowMenuIndex;
  131.                         menuEvent[0] = 0;
  132.                         OLED_display();
  133.                         STMFLASH_Write(FLASH_SAVE_ADDR,(u16 *)&setData,setDataSize);//写入FLASH
  134.                 }
  135.                 if(setData.sleepTime>0 && sleepCount>setData.sleepTime*600) {sleepFlag=1;}
  136.                 if(setData.shutTime>0 && shutCount>setData.shutTime*600) {shutFlag=1;}
  137.                 count++;
  138.                 delay_us(100);
  139.         }
  140. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.taihedz.cn
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信