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

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

STM8S电压电流表头重新编程芯片解密

芯片解密STM8S单片机源程序(IAR环境)如下:



  1. #include "math.h"
  2. //#include "stdbool.h"
  3. #include "iostm8s003f3.h"
  4. #include "stm8s.h" //包含用到的外设的头文件

  5. #define u8  unsigned char
  6. #define uchar  unsigned char
  7. #define uint   unsigned int
  8. #define sCnt   104

  9. uint ms_count, tmpin, ADCBuff[6], ADValueV[sCnt], ADValueI[sCnt], ADCData, mA;
  10. u8 pDataV=0, pDataI=0, vDotPS, cDotPS, VGain = 35, ampGain = 129, vFlag=0, iFlag=0;
  11. unsigned long mV;  //uint的话,mV最大只能到 65535mV,本电源80V,故用long
  12. float voltRAW, curtRAW, Rs = 0.00218;
  13. float ADVal_Av[2]={0}, Val_Av[2]={0};                     

  14. float preCoef[2]={0.005};        //ADC 转换滤波噪声用的系数
  15. bool preTrend[2]={TRUE};        //ADC 转换结果的变化趋势 true:变大,false:变小
  16. float ADvalue[2]={0.0};        //ADC 前次的转换结果滤波后的值
  17. float newData[2]={0.0};        //ADC 本次次的转换结果

  18. /*******************************************************************************
  19. **函数名称:void GPIO_Init0()
  20. **功能描述:GPIO->功能引脚初始化
  21. **入口参数:无
  22. **输出:无
  23. *******************************************************************************/
  24. void GPIO_Init0()
  25. {
  26.   PA_ODR |=0x02;    //PA1置高,I个位选通
  27.   PA_ODR &=0xf3;    //PA2,3置零,g,f
  28.   PA_DDR |=0x0e;    //设置端口PA1,2,3的输入输出方向寄存器为输出方向
  29.   PA_CR1 |=0x0e;     //PA1,2,3为推挽输出
  30.   PA_CR2 |=0x0e;     //PA1,2,3是输出速度最快为10MHz
  31.   
  32.   PB_ODR |=0x30;    //PB4,5置高,I十位和百位选通
  33.   PB_DDR |=0x30;    //设置端口PB4,5的输入输出方向寄存器为输出方向
  34.   PB_CR1 |=0x30;     //PB4,5为推挽输出
  35.   PB_CR2 |=0x30;     //PB4,5是输出速度最快为10MHz
  36.   
  37.   PC_ODR &=0x07;    //置零PC3,4,5,6,7, c,f,h,d,e
  38.   PC_DDR |=0xf8;    //设置端口PC->3,4,5,6,7的输入输出方向寄存器为输出方向
  39.   PC_CR1 |=0xf8;     //PC->3,4,5,6,7为推挽输出
  40.   PC_CR2 |=0xf8;     //PC->3,4,5,6,7是输出速度最快为10MHz
  41.   
  42.   PD_ODR &=0xfd;    //置零PD1, a
  43.   PD_ODR |=0x70;    //PD4,5,6置高 V百位 个位 和十位选通
  44.   PD_DDR |=0x72;    //设置端口PD->1,4,5,6的输入输出方向寄存器为输出方向
  45.   PD_CR1 |=0x72;     //PD->1,4,5,6为推挽输出
  46.   PD_CR2 |=0x72;     //PD->1,4,5,6是输出速度最快为10MHz
  47. }

  48. /*******************************************************************************
  49. **函数名称:void SMG_Display(int num)
  50. **功能描述:SMG显示函数
  51. **入口参数:int num
  52. **输出:无
  53. *******************************************************************************/
  54. void SMG1_Display(unsigned char num)
  55. {
  56.   PA_ODR |=0x02;    //PA1置高,I个位选通
  57.   PB_ODR |=0x30;    //PB4,5置高,I十位和百位选通
  58.   PD_ODR |=0x70;    //PD4,5,6置高 V百位 个位 和十位选通
  59.   switch(num)
  60.   {
  61.   case 0: //a b c d e f
  62.     PA_ODR |=0x08;    //PA3置高,b
  63.     PA_ODR &=0xfb;    //PA2置零,g
  64.     PC_ODR &=0xdf;    //置零PC5,h
  65.     PC_ODR |=0xd8;    //PC3,4,6,7置高 c,f,d,e
  66.     PD_ODR |=0x02;    //PD1置高 a
  67.     break;
  68.   case 1: //b c
  69.     PA_ODR |=0x08;    //PA3置高,b
  70.     PA_ODR &=0xfb;    //PA2置零,g
  71.     PC_ODR &=0x0f;    //置零PC4,5,6,7,f,h,d,e
  72.     PC_ODR |=0x08;    //PC3置高 c
  73.     PD_ODR &=0xfd;    //PD1置零 a
  74.     break;
  75.   case 2: // a b d e g
  76.     PA_ODR |=0x0c;    //PA2,3置高,g,b
  77.     PC_ODR &=0xc7;    //置零PC3,4,5 c,f,h
  78.     PC_ODR |=0xc0;    //PC6,7置高,d e
  79.     PD_ODR |=0x02;    //PD1置高 a
  80.     break;
  81.   case 3: //a b c d g
  82.     PA_ODR |=0x0c;    //PA2,3置高,g,b
  83.     PC_ODR &=0x4f;    //置零PC4,5,7,f,h,e
  84.     PC_ODR |=0x48;    //PC3,6置高 c,d
  85.     PD_ODR |=0x02;    //PD1置高 a
  86.     break;
  87.   case 4: //b c f g
  88.     PA_ODR |=0x0c;    //PA2,3置高,g,b
  89.     PC_ODR &=0x1f;    //置零PC5,6,7,h,d,e
  90.     PC_ODR |=0x18;    //PC3,4置高 c,f
  91.     PD_ODR &=0xfd;    //PD1置零 a
  92.     break;
  93.   case 5: //a c d f g
  94.     PA_ODR |=0x04;    //PA2置高,g
  95.     PA_ODR &=0xf7;    //PA3置零,b
  96.     PC_ODR &=0x5f;    //置零PC5,7 h,e
  97.     PC_ODR |=0x58;    //PC3,4,6置高 c,f,d
  98.     PD_ODR |=0x02;    //PD1置高 a
  99.     break;
  100.   case 6: //a c d e f g
  101.     PA_ODR |=0x04;    //PA2置高,g
  102.     PA_ODR &=0xf7;    //PA3置零,b
  103.     PC_ODR &=0xdf;    //置零PC5,h
  104.     PC_ODR |=0xd8;    //PC3,4,6,7置高 c,f,d,e
  105.     PD_ODR |=0x02;    //PD1置高 a
  106.     break;
  107.   case 7: //a b c
  108.     PA_ODR |=0x08;    //PA3置高,b
  109.     PA_ODR &=0xfb;    //PA2置零,g
  110.     PC_ODR &=0x0f;    //置零PC4,5,6,7,f,h,d,e
  111.     PC_ODR |=0x08;    //PC3置高 c
  112.     PD_ODR |=0x02;    //PD1置高 a
  113.     break;
  114.   case 8: //a b c d e f g
  115.     PA_ODR |=0x0c;    //PA2,3置高,g,b
  116.     PC_ODR &=0xdf;    //置零PC5,h
  117.     PC_ODR |=0xd8;    //PC3,4,6,7置高 c,f,d,e
  118.     PD_ODR |=0x02;    //PD1置高 a
  119.     break;
  120.   case 9: //a b c d f g
  121.     PA_ODR |=0x0c;    //PA2,3置高,g,b
  122.     PC_ODR &=0x5f;    //置零PC5,7 h,e
  123.     PC_ODR |=0x58;    //PC3,4,6置高 c,f,d
  124.     PD_ODR |=0x02;    //PD1置高 a
  125.     break;
  126.   }
  127. }


  128. /*******************************************************************************
  129. **函数名称:void ADC_Init()
  130. **功能描述:初始化ADC
  131. **入口参数:无
  132. **输出:无
  133. *******************************************************************************/
  134. void ADC_Init()
  135. {
  136.   //电流
  137.   PD_DDR_bit.DDR2 = 0;   //设置PD->2 为输入
  138.   PD_CR1_bit.C12 = 0;    //设置为浮空输入
  139.   PD_CR2_bit.C22 = 0;    //设置中断禁止
  140.   
  141.   //电压
  142.   PD_DDR_bit.DDR3 = 0;   //设置PD->3 为输入
  143.   PD_CR1_bit.C13 = 0;    //设置为浮空输入
  144.   PD_CR2_bit.C23 = 0;    //设置中断禁止
  145.   
  146.   ADC_CR1_bit.SPSEL = 7;    //fmaster / 18 = 16MHZ / 18 = 888888HZ
  147.   ADC_CR2_bit.ALIGN = 1;    //RIGHT ALIGN
  148.   
  149.   ADC_CR1_bit.ADON = 1;     //初次上电唤醒ADC
  150. }



联系方式

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

在线客服
热线电话

企业微信