OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3420|回复: 1

stm8s003用按键控制pwm变化的问题

[复制链接]

3

主题

3

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-10-5
在线时间
12 小时
发表于 2019-10-18 10:39:46 | 显示全部楼层 |阅读模式
1金钱
一直不能实现 也不知道什么问题
  求大佬指导
  1. /*  添加库函数头文件 */
  2. #include "stm8s.h"

  3. unsigned char  CCR1_Val ;
  4. unsigned char  abc;
  5. //数码管0 ~ F的代码数组
  6. //u8 const Data[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  7. //#define     KEY1_ON()       GPIO_WriteLow(GPIOB , GPIO_PIN_4)
  8. //#define     KEY2_ON()       GPIO_WriteLow(GPIOB , GPIO_PIN_5)
  9. //#define     KEY3_ON()       GPIO_WriteLow(GPIOB , GPIO_PIN_6)

  10. //#define     KEY1_OFF()      GPIO_WriteHigh(GPIOB , GPIO_PIN_4)
  11. //#define     KEY2_OFF()      GPIO_WriteHigh(GPIOB , GPIO_PIN_5)
  12. //#define     KEY3_OFF()      GPIO_WriteHigh(GPIOB , GPIO_PIN_6)

  13. void delay(unsigned int ms)
  14. {
  15.   unsigned int x , y;
  16.   for(x = ms; x > 0; x--)           /*  通过一定周期循环进行延时*/
  17.     for(y = 3000 ; y > 0 ; y--);
  18. }

  19. //void ALL_LED_Init()
  20. //{

  21.   //设置PD2为快速推挽输出 ,LED2
  22. //GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_OUT_PP_LOW_FAST);  
  23.   
  24.   //设置PB4为快速推挽输出 ,LED3
  25. // GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_OUT_PP_LOW_FAST);  
  26.   
  27.   //设置PD3为快速推挽输出 ,LED4
  28.   //GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_OUT_PP_LOW_FAST);

  29. //}

  30. //void ALLKeyInit()
  31. //{
  32.   //KEY1 INIT PA3
  33.   //GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_IN_PU_NO_IT);  //配置KEY1 PA3 为带上拉电阻输入
  34.   
  35.   //KEY2 INIT PB6
  36.   //GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_IN_PU_NO_IT);  //配置KEY2 PB6 为带上拉电阻输入
  37.   
  38.   //KEY3 INIT PD7
  39.   //GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_IN_PU_NO_IT);  //配置KEY3 PD7 为带上拉电阻输入
  40. //}

  41. void ALLKeyInit()
  42. {
  43.   //KEY1 INIT PA3
  44.   GPIO_Init(GPIOB , GPIO_PIN_4 , GPIO_MODE_IN_PU_IT);  //配置KEY1 PB4 为浮空输入
  45.   
  46.   //KEY2 INIT PB6
  47.   GPIO_Init(GPIOB , GPIO_PIN_5 , GPIO_MODE_IN_PU_IT);  //配置KEY2 PB5 为浮空输入
  48.   
  49.   //KEY3 INIT PD7
  50.   GPIO_Init(GPIOB , GPIO_PIN_6 , GPIO_MODE_IN_PU_IT);  //配置KEY3 PB6 为浮空输入
  51. }



  52. void assert_failed(u8* file, u32 line)//是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数
  53. {

  54.   while (1)
  55. {
  56.   }
  57. }

  58. void Init_pwm()
  59. {
  60. //GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);   //输出推拉,低电平,10MHz
  61. TIM1_DeInit();
  62. TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 999, 0x00);//250
  63. TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE,CCR1_Val,
  64.              TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,
  65.              TIM1_OCNIDLESTATE_RESET);//50%占空比
  66. //TIM1_OC4Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, 400,
  67. //             TIM1_OCPOLARITY_LOW, TIM1_OCIDLESTATE_SET
  68. //            );//50%占空比
  69. TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE); //使能
  70. TIM1_OC2PreloadConfig(ENABLE);
  71. TIM1_CtrlPWMOutputs(ENABLE); //TIM1输出使能
  72. TIM1_Cmd(ENABLE);//TIM1使能
  73. //TIM1->CCER1 |= 0x10; //开启OC2信号输出脚
  74. // TIM1->CCMR2 = 0x60; //PWM1模式
  75. // TIM1->CCR2H = 0x00; //占空比高位
  76. //TIM1->CCR2L = 0x37; //占空比低位
  77. // TIM1->CCMR2 |= 0x08; //输出比较2预装载使能
  78. }

  79. void main()  
  80. {
  81.      CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); //内部时钟16M
  82.     //ALL_LED_Init();               //调用LED初始化函数
  83.     ALLKeyInit();               //调用按钮初始化函数
  84.     CLK_DeInit();              //初始化clk相关寄存器为初始值
  85.     Init_pwm();
  86.     enableInterrupts();
  87.      while(1)
  88.   {
  89.    
  90.    
  91.   if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_4) == SET)//判断按钮1是否被按下
  92.    {
  93.    
  94.       delay(10);                     //先延时进行消抖
  95.       while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_4) == RESET);    //等待按钮1被松开
  96.        delay(10);                     //再次延时消抖
  97.       CCR1_Val = abc+100;
  98.       //GPIO_WriteReverse(GPIOC , GPIO_PIN_1);              //异或取反LED1使其亮灭
  99.     }
  100.    
  101.   if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_5) == SET)    //判断按钮2是否被按下
  102.     {
  103.      delay(10);                     //先延时进行消抖
  104.       while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_5) == RESET);    //等待按钮2被松开
  105.      delay(10);                     //再次延时消抖
  106.       CCR1_Val = abc-100;
  107.       //GPIO_WriteReverse(GPIOD , GPIO_PIN_2);             //异或取反LED2使其亮灭
  108.    }
  109.    
  110.   if(GPIO_ReadInputPin(GPIOB , GPIO_PIN_6) == SET)   //判断按钮3是否被按下
  111.     {
  112.       delay(10);                     //先延时进行消抖
  113.      while(GPIO_ReadInputPin(GPIOB , GPIO_PIN_6) == RESET);   //等待按钮3被松开
  114.      delay(10);                     //再次延时消抖
  115.      CCR1_Val = abc;
  116.       //GPIO_WriteReverse(GPIOB , GPIO_PIN_4);              //异或取反LED3使其亮灭
  117.     }
  118. //  while(1)
  119. //  {
  120.    
  121. //   }
  122.     }

  123. }
复制代码



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-10-18 17:33:14 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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