|
弄好了 非常感谢各位的帮忙 |
| 按键需要消抖否则又是时候会没反应 |
如痴百感生 发表于 2019-12-3 10:58 不清楚你短按一次+/-1,长按连续+/-25 的意图,但要注意使用变量的数据类型,最好按数据类型的整除数+/-,否则会出现负数或溢出。给你改成递增/减5。
|
给你改好了,实验板测试正常
|
| 长按没有实现。 |
这是1T单片机的程序,按键延时做了调整,按键延时要结合硬件来调整到最佳状态
|
我写了个一键开关灯加调光的程序,你参考下
|
yzwzfyz 发表于 2019-12-2 21:54 有没有范例可以仿照一下 非常感谢 |
wulin 发表于 2019-12-2 15:52
这是我的全部代码 长按松开才加一次 为了区分是长按还是短按 我特地把长按和短按加的数值改了 发现长按只是实现了短按的功能 拜托能在指点一下吗 非常感谢 |
|
要点:做一个计数器CJ来判定长按与短按,CJ的规则如下: 1、CJ计数只发生于定时器的中断服务程序中,每次中断+1,计满不再计,即不回0。 2、CJ计数只发生于键按下的时候,未按下不计。 3、做一个键状态判定触发标记:B_OK,如果键未按下,但CJ<>0,则置B_OK=1,表示是判断键状态的时候了。 4、当B_OK=1,判断键状态的界定法则是:CJ<某个值为短按,CJ>某个值为长按,某个值是多少由你决定。建议事先将长短两个界定值放置在某个寄存器中,这样可以随意变更界定值。 5、状态界定完成后将:B_OK清0、CJ清0以备下次再界定。 |
lids 发表于 2019-12-2 16:08 非常感谢您的帮忙 我会认真理解的多谢了 |
wulin 发表于 2019-12-2 15:52 非常感谢 这个就是仿照您给别人留言上学习 的 没想到弄成这样 非常感谢您的帮忙 我会认真理解的 |
SroneBridge 发表于 2019-12-2 15:27 真是多谢分析了 不问不知道 一问吓一跳 真的非常感谢 |
| count定义1个,num定义两个,程序重写一遍重复一下就是num1 |
| count定义1个,num定义两个,程序重写后重复一遍就是num1 |
| 只是在不断实现短按键给你造成了错觉。 |
| 逻辑错误,无法实现长按键。 |
|
//试一下这样写 void keyscan() { static uint count1; if(key_add==0) { count1++; if(count1>=200) { count1=100;//这里调节连加的速度 num++; if(num>=255) num=255; } else if(count1>=1 && count<200) { count1=0; num +=25; if(num>=255) num=255; } } } |
按你的5ms扫描周期,给你写1个短按+/-,长按连+/-的示例程序
|
| 短按,一下就被你清零了。 |
|
| 还是好好屡屡逻辑吧,画个流程图 |
| num 在哪里定义与赋值的啊 |