OpenEdv-开源电子网

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

用按键控制PWM的占空比

[复制链接]

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2016-4-1
在线时间
33 小时
发表于 2016-4-13 20:52:17 | 显示全部楼层 |阅读模式
5金钱
要改变LED的不是只要改变占空比就好了嘛?  那么为什么这个?

while(1)
        {
                key=KEY_Scan(0);
                if(key)
                {
                        switch(key)
                        {
                        case 1:
                        {led0pwmval=led0pwmval+50;if(led0pwmval==300) led0pwmval=300;}
                        break;
                        case 2:
                        {led0pwmval=led0pwmval-50;if(led0pwmval==0)led0pwmval=0;}
                        break;                       
                }
               
                TIM_SetCompare1(TIM14,led0pwmval);               
                }
        }

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

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-4-14 08:31:30 | 显示全部楼层
本帖最后由 止天 于 2016-4-14 08:33 编辑

按键调光


不知道你周期是多少

不过感觉你应该往高调调占空比
太低灯不亮
还有改占空比的语句应该放在if里面
一直这么改也没用
回复

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2016-4-1
在线时间
33 小时
 楼主| 发表于 2016-4-14 12:19:16 | 显示全部楼层
本帖最后由 尼古拉斯-帅 于 2016-4-14 12:52 编辑

我周期设置的是1000   现在把占空比设置为按一次加100  灯也是一直灭着  我吧修改占空比的语句也加到if里面了
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-11-15
在线时间
16 小时
发表于 2016-11-15 21:57:35 | 显示全部楼层
不知道你有没有再LED_Init()这个函数初始化IO口,
因为喜欢,无所谓坚持。
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-11-15
在线时间
16 小时
发表于 2016-11-15 21:58:38 | 显示全部楼层
不能再用这个函数初始化IO口,会冲突的。我是这样认为的。
因为喜欢,无所谓坚持。
回复

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-11-15
在线时间
16 小时
发表于 2016-11-15 21:59:36 | 显示全部楼层
int main(void)
{
    u16 led0pwmval=0;   
        u8 dir=1;
    u8 key;           //保存键值
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);//初始化串口波特率为115200
        TIM14_PWM_Init(500-1,84-1);        //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
        //LED_Init();                                //初始化LED端口
        KEY_Init();       //初始化与按键连接的硬件接口  
  // while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
        //{
                //delay_ms(10);         
                //if(dir)led0pwmval++;//dir==1 led0pwmval递增
                //else led0pwmval--;        //dir==0 led0pwmval递减
                //if(led0pwmval>300)dir=0;//led0pwmval到达300后,方向为递减
                //if(led0pwmval==0)dir=1;        //led0pwmval递减到0后,方向改为递增

                //TIM_SetCompare1(TIM14,led0pwmval);        //修改比较值,修改占空比
        //}
        while(1)
        {
               
                key=KEY_Scan(0);                //得到键值
                   if(key)
                {                                                  
                        switch(key)
                        {                                 
                                case WKUP_PRES:        //自动循环
                                        while(1) //实现比较值从0-300递增,到300后从300-0递减,循环
        {
                delay_ms(10);         
                if(dir)led0pwmval++;//dir==1 led0pwmval递增
                else led0pwmval--;        //dir==0 led0pwmval递减
                if(led0pwmval>300)dir=0;//led0pwmval到达300后,方向为递减
                if(led0pwmval==0)dir=1;        //led0pwmval递减到0后,方向改为递增

                TIM_SetCompare1(TIM14,led0pwmval);        //修改比较值,修改占空比
        };
                                        break;
                                case KEY0_PRES:        //占空比增加;
                                        led0pwmval=led0pwmval+50;
                                        break;
                                case KEY1_PRES:        //占空比减少;
                                        led0pwmval=led0pwmval-50;
                                        break;
                                case KEY2_PRES:        //翻转两个灯;
                                        LED0=!LED0,LED1=!LED1;
                                        break;
                        }
                if(led0pwmval>300)led0pwmval=50;//led0pwmval到达300后,方向为递减
                if(led0pwmval==0)led0pwmval=250;        //led0pwmval递减到0后,方向改为递增       
                TIM_SetCompare1(TIM14,led0pwmval);        //修改比较值,修改占空比
                }
        }

}
因为喜欢,无所谓坚持。
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-7-3
在线时间
21 小时
发表于 2017-7-12 11:03:43 | 显示全部楼层
你的定时器的周期是多少啊?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-7-18
在线时间
2 小时
发表于 2017-7-18 20:02:14 | 显示全部楼层
Huasen 发表于 2016-11-15 21:59
int main(void)
{
    u16 led0pwmval=0;   

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "key.h"
       
               
int main(void)
{       
             
        u16 led0pwmval=0;   
        u8 key=0;       
       
       
        delay_init();                     //延时函数初始化          
        LED_Init();                          //初始化与LED连接的硬件接口
        TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
           while(1)
        {
               
                key=KEY_Scan(1);
          delay_ms(10);         
               
                if(key)
      {
          switch(key)
            {
               case 1:
              {led0pwmval=led0pwmval+10;if(led0pwmval==300) led0pwmval=300;}
               break;
               case 2:
              {led0pwmval=led0pwmval-10;if(led0pwmval==0)led0pwmval=0;}
               break;                        
             }
       
                      TIM_SetCompare1(TIM1,led0pwmval);          
            }
                }
    }      


我的这个灯自己在亮 ,键根本没有用,整了一天都没找到问题,大神可以帮忙看看吗
回复

使用道具 举报

7

主题

33

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2018-1-31
在线时间
10 小时
发表于 2018-1-31 12:39:08 | 显示全部楼层
Huasen 发表于 2016-11-15 21:59
int main(void)
{
    u16 led0pwmval=0;   

兄弟,你的代码还是跑不起来,按键根本没有用
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 05:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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