芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

STC8H系列MCU的PWM做呼吸灯IC解密

  1. IC解密/* --- STC MCU Limited ------------------------------------------------*/
  2. IC解密/* --- STC 1T Series MCU Demo Programme -------------------------------*/

  3. IC解密/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
  4. IC解密/*---------------------------------------------------------------------*/


  5. /*************  功能说明    **************

  6. 本例程基于STC8H8K64U为主控芯片的实验箱9进行编写测试,STC8H系列芯片可通用参考.

  7. 高级PWM定时器 PWM1P/PWM1N,PWM2P/PWM2N,PWM3P/PWM3N,PWM4P/PWM4N 每个通道都可独立实现PWM输出,或者两两互补对称输出.

  8. 8个通道PWM设置对应P6的8个端口.

  9. 通过P6口上连接的8个LED灯,利用PWM实现呼吸灯效果.

  10. PWM周期和占空比可以根据需要自行设置,最高可达65535.

  11. 下载时, 选择时钟 24MHZ (用户可自行修改频率).

  12. ******************************************/

  13. #include "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
  14. #include "intrins.h"

  15. #define     MAIN_Fosc       24000000L   //定义主时钟

  16. typedef     unsigned char   u8;
  17. typedef     unsigned int    u16;
  18. typedef     unsigned long   u32;

  19. /****************************** 用户定义宏 ***********************************/

  20. #define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 中断频率, 1000次/秒

  21. /*****************************************************************************/

  22. #define PWM1_1      0x00        //P:P1.0  N:P1.1
  23. #define PWM1_2      0x01        //P:P2.0  N:P2.1
  24. #define PWM1_3      0x02        //P:P6.0  N:P6.1

  25. #define PWM2_1      0x00        //P:P1.2/P5.4  N:P1.3
  26. #define PWM2_2      0x04        //P:P2.2  N:P2.3
  27. #define PWM2_3      0x08        //P:P6.2  N:P6.3

  28. #define PWM3_1      0x00        //P:P1.4  N:P1.5
  29. #define PWM3_2      0x10        //P:P2.4  N:P2.5
  30. #define PWM3_3      0x20        //P:P6.4  N:P6.5

  31. #define PWM4_1      0x00        //P:P1.6  N:P1.7
  32. #define PWM4_2      0x40        //P:P2.6  N:P2.7
  33. #define PWM4_3      0x80        //P:P6.6  N:P6.7
  34. #define PWM4_4      0xC0        //P:P3.4  N:P3.3

  35. #define ENO1P       0x01
  36. #define ENO1N       0x02
  37. #define ENO2P       0x04
  38. #define ENO2N       0x08
  39. #define ENO3P       0x10
  40. #define ENO3N       0x20
  41. #define ENO4P       0x40
  42. #define ENO4N       0x80

  43. #define PWM_PERIOD  1023    //设置周期值

  44. /*************  本地变量声明    **************/
  45. bit B_1ms;          //1ms标志

  46. u16 PWM1_Duty;
  47. u16 PWM2_Duty;
  48. u16 PWM3_Duty;
  49. u16 PWM4_Duty;

  50. bit PWM1_Flag;
  51. bit PWM2_Flag;
  52. bit PWM3_Flag;
  53. bit PWM4_Flag;

  54. void UpdatePwm(void);

  55. /******************** 主函数 **************************/
  56. void main(void)
  57. {
  58.     P_SW2 |= 0x80;  //扩展寄存器(XFR)访问使能

  59.     P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
  60.     P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
  61.     P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
  62.     P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
  63.     P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
  64.     P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
  65.     P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
  66.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

  67.     PWM1_Flag = 0;
  68.     PWM2_Flag = 0;
  69.     PWM3_Flag = 0;
  70.     PWM4_Flag = 0;

  71.     PWM1_Duty = 0;
  72.     PWM2_Duty = 256;
  73.     PWM3_Duty = 512;
  74.     PWM4_Duty = 1024;

  75.     //  Timer0初始化
  76.     AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
  77.     TH0 = (u8)(Timer0_Reload / 256);
  78.     TL0 = (u8)(Timer0_Reload % 256);
  79.     ET0 = 1;    //Timer0 interrupt enable
  80.     TR0 = 1;    //Tiner0 run

  81.     PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
  82.     PWMA_CCER2 = 0x00;
  83.     PWMA_CCMR1 = 0x68; //通道模式配置
  84.     PWMA_CCMR2 = 0x68;
  85.     PWMA_CCMR3 = 0x68;
  86.     PWMA_CCMR4 = 0x68;
  87.     PWMA_CCER1 = 0x55; //配置通道输出使能和极性
  88.     PWMA_CCER2 = 0x55;

  89.     PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
  90.     PWMA_ARRL = (u8)PWM_PERIOD;

  91.     PWMA_ENO = 0x00;
  92.     PWMA_ENO |= ENO1P; //使能输出
  93.     PWMA_ENO |= ENO1N; //使能输出
  94.     PWMA_ENO |= ENO2P; //使能输出
  95.     PWMA_ENO |= ENO2N; //使能输出
  96.     PWMA_ENO |= ENO3P; //使能输出
  97.     PWMA_ENO |= ENO3N; //使能输出
  98.     PWMA_ENO |= ENO4P; //使能输出
  99.     PWMA_ENO |= ENO4N; //使能输出

  100.     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位
  101.     PWMA_PS |= PWM1_3; //选择 PWM1_3 通道
  102.     PWMA_PS |= PWM2_3; //选择 PWM2_3 通道
  103.     PWMA_PS |= PWM3_3; //选择 PWM3_3 通道
  104.     PWMA_PS |= PWM4_3; //选择 PWM4_3 通道

  105.     PWMA_BKR = 0x80; //使能主输出
  106.     PWMA_CR1 |= 0x01; //开始计时

  107.     P40 = 0;                //给LED供电
  108.     EA = 1;     //打开总中断

  109.     while (1)
  110.     {
  111.     }
  112. }



联系方式

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

在线客服
热线电话

企业微信