OpenEdv-开源电子网

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

stm8s003k3按键控制部分 一直不能用不知为什么 求大神指导

[复制链接]

3

主题

3

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-10-5
在线时间
12 小时
发表于 2019-10-20 21:13:16 | 显示全部楼层 |阅读模式
5金钱
求大神  已经卡了好久了

  1. #include "iostm8s003k3.h"
  2. #define u8 uint8_t
  3. #define u16 uint16_t
  4. #define u32 uint32_t

  5. typedef unsigned char uint8_t;
  6. typedef unsigned short uint16_t;
  7. typedef unsigned long uint32_t;

  8. void delay(u16 Count);
  9. void TIM1_PWM_SET(unsigned long F_PWM_SET);
  10. void CH2_PWM_SET(unsigned long F_set_CH2,float Duty_CH2);

  11. #define KEY1 PC_IDR_bit.IDR4
  12. #define KEY2 PC_IDR_bit.IDR5
  13. #define KEY3 PC_IDR_bit.IDR6

  14. //u8 zkb=0;
  15. float  sss=0.2;

  16. main()
  17. {
  18.         
  19.         CLK_CKDIVR=0x00;
  20.         delay(10);
  21.       
  22.        // Key_init();
  23.         PB_DDR_bit.DDR4=1;
  24.         PB_CR1_bit.C14=1;
  25.         PB_CR2_bit.C24=0;
  26.    
  27.         PB_DDR_bit.DDR5=1;
  28.         PB_CR1_bit.C15=1;
  29.         PB_CR2_bit.C25=0;
  30.    
  31.         PB_DDR_bit.DDR6=1;
  32.         PB_CR1_bit.C16=1;
  33.         PB_CR2_bit.C26=0;

  34.         while (1)
  35.         {
  36.           if(KEY1==0)
  37.           {
  38.             delay(10);
  39.             if(KEY1==0)
  40.             {
  41.               sss=sss+0.1;
  42.               TIM1_PWM_SET(16000);
  43.               while(! KEY1);
  44.               
  45.             }
  46.             if(KEY2==0)
  47.             {
  48.             delay(10);
  49.             if(KEY2==0)
  50.               {
  51.               if(sss>0)
  52.                 sss=sss-0.1;
  53.                TIM1_PWM_SET(16000);
  54.                while(! KEY2);
  55.               }
  56.             }
  57.              if(KEY3==0)
  58.            {
  59.             delay(10);
  60.             if(KEY3==0)
  61.             {
  62.                 sss=0;
  63.                TIM1_PWM_SET(16000);
  64.               while(! KEY3);
  65.             }
  66.            }
  67.           }
  68.        }
  69. }


  70. void delay(u16 Count)
  71. {
  72.   u8 i,j;
  73.   while(Count--)
  74.   {
  75.     for(i=0;i<50;i++)
  76.       for(j=0;j<20;j++);
  77.   }
  78. }



  79. void TIM1_PWM_SET(unsigned long F_PWM_SET)
  80. {

  81.           TIM1_ARRH=F_PWM_SET/256;//配置自动重装载寄存器高位ARRH
  82.         TIM1_ARRL=F_PWM_SET%256;//配置自动重装载寄存器高位ARRL\
  83.         
  84.         TIM1_CR1&=0x8F;//向上计数模式边沿对齐
  85.         
  86.         CH2_PWM_SET(F_PWM_SET,sss);//配置通道2输出占空比30%
  87.         
  88.         TIM1_CR1|=0x01;//使能TIM1计数器功能CEN=1
  89.         TIM1_BKR=0x80;//打开主输出开关输出PWM信号MOE=1
  90. }
  91. void CH2_PWM_SET(unsigned long F_SET_CH2,float Duty_CH2)
  92. {

  93.     float b;//变量用于占空比计算
  94.     b=Duty_CH2*F_SET_CH2;//计算占空比参数
  95.     TIM1_CCR2H=((u16)(b))/256; //占空比高位
  96.     TIM1_CCR2L=((u16)(b))%256; //占空比低位
  97.   
  98.     TIM1_CCMR2=0x60;//PWM1模式
  99.     TIM1_CCER1&=0xDF;//配置cc2p=0,oc2信号高电平有效
  100.     TIM1_CCER1|=0x10;//配置cc2e=1,使能oc2输出
  101.     TIM1_OISR|=0x04;//空闲状态时oc2为高电平
  102.   
  103.   
复制代码


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-10-21 03:11:30 | 显示全部楼层
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2019-11-9 16:59:31 | 显示全部楼层
本帖最后由 操作系统 于 2019-11-9 17:03 编辑

普通按钮程序,,看看这个能不能帮上你的忙,语法比较奇琶.请忽略.

SWEEP()  ; // 定时约16毫秒调用一次这个函数.不建议 在 中断服务函数里面调用.请在大循环里面调用.
        {
                IF KEY = LK
                {
                        IF KN < 0XFF ELSE RET
                        KN ++
                        IF KN = 4
                        {
                                IF KEY = 1
                                {
                                        IF SLEEP_EN = 0 ELSE POWER_ON
                                        STATE ++
                                        CALL STATE_CHANGE
                                }
                                ELSE
                                IF KEY = 2
                                {
                                        ; KEY=2 的事件在此处理
                                }
                        }
                        ELSE
                        {
                                IF KN = 60
                                {
                                        IF KEY = 1
                                        {
                                                NOP;长按KEY1 事件在此处理
                                        }
                                        ELSE
                                        IF KEY = 2 ELSE RET
                                        {
                                                ;长按KEY2事件在此处理
                                        }
                                }
                        }
                }
                ELSE
                {
                        KN = 0
                        LK = KEY
                }
        }
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-11-10 21:41:28 | 显示全部楼层
帮顶
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-22 19:20:22 | 显示全部楼层
帮顶         
成功没有捷径
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-24 18:50:16 | 显示全部楼层
帮顶                    
成功没有捷径
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 13:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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