本帖最后由 vb2002 于 2024-9-30 13:06 编辑
之前双击和长按,没有调用io口操作,导致io口复位。不能推挽输出,双击长按打开推挽就好了
已经接近理想状态了. 感谢小飞飞大佬提供的代码.. 键值的代码参照 布丁橘长 的教程.
现在功能是 单击打开LED (三秒内按下换下一个数组的值,也就是pwm亮度. 3 三秒后按下关闭LED,并保存当前亮度.下次打开就是关闭前的亮度),
今天加上了双击 极亮(pwm全输出.) 但是现在有两个问题.
一 不能保存那个极亮. 二.关机进入掉电模式后,不能双击极亮
关机后,不能双击极亮,或者长按进入低亮模式,.应该是和状态机那里有关.
- // 定时器0中断服务程序
- void Timer0_Isr(void) interrupt 1 {
- static unsigned char key_sta; // 按键状态机变量
-
- // 按键状态机
- switch(key_sta) {
- case 0: // 状态0:等待按键
- if (KEY1 == 0) key_sta++; // 如果按键按下,进入状态1
- break;
- case 1: // 状态1:确认按键
- if (KEY1 == 0) key_sta++; // 如果按键持续按下,进入状态2
- else key_sta = 0; // 否则返回状态0
- break;
- case 2: // 状态2:等待按键释放
- if (KEY1 == 1) key_sta++; // 如果按键释放,进入状态3
- break;
- case 3: // 状态3:按键完成
- key_flag = 1; // 设置按键标志位
- key_sta = 0;
复制代码