ifree64 发表于 2009-3-29 23:59:41

我写的基于状态机的按键扫描程序,在STM8下测试通过了。

看按键部分的代码好了,其中LCD部分代码还有点乱,主程序只是胡乱写了些测试代码ourdev_429803.zip(文件大小:313K) (原文件名:STMDSO.zip)

ywl0409 发表于 2009-3-30 10:34:03

按键能不能接在外部中断的IO上面,处理的时候,只要在中断处理程序里面判断状态就可以了.

ljgvictory 发表于 2009-3-30 11:00:29

MARK

dvhome 发表于 2009-3-30 12:14:34

按键部分处理得不错,很精炼

但这种写法,后面的按键事件处理还再细分

因为现在每个按键都会有短按、长按、连_发输出了

【1楼】 ywl0409 老黄牛
按键属于交互部分,没有必要那么实时,放在主循环就可以了

如果这个使用中断,对ADC也不利

ifree64 发表于 2009-3-30 13:05:16

【3楼】 dvhome
后面按键再细分处理有什么问题吗?难道要把按键判断和处理放到一起?

另外我这种处理方法需要10ms的定时信号,这个也需要定时中断,也会对ADC不利吧。要不ADC采样时关闭定时中断?

ifree64 发表于 2009-3-30 13:12:55

【1楼】 ywl0409 老黄牛
stm8的gpio都能够触发外部中断(少数例外)。但用外部中断如何消抖呢?还有难道把按键功能都做到中断里吗,不把按键功能放到中断里或者要引入消息系统来实现对按键的处理?

dvhome 发表于 2009-3-30 13:29:54

【4楼】 ifree64

没有什么问题

我说的不是把按键判断和处理放在一起,这样就混乱了

我说的是,将按键跟事件的处理分离开,每个按键有自己的属性,因为在一般情况下,长按键和连_发键不会在一个按键上复用的。

这个没有什么太大的问题,我只是提出来讨论而已,你根据自己的想法做就好了~~

另外,定时器的问题,系统肯定需要一个标准定时器来一些常规的操作。

不需要把整个按键处理都放在定时器里面,只需要里面设一个标志位就可以了。

按键对实时性不敏感的。快一些或慢一些都无所谓。因此完全可以放在大循环里面。

ifree64 发表于 2009-3-30 18:16:52

你的意思时不需要每个建都有长按、连_发,对吗?我这个写法,如果不需要长按、连_发、在按键处理的时候忽略掉就可以了。

我只是再定时器中断里设置了一个10msOK的标志,然后按键处理是放在大循环里做的。

dvhome 发表于 2009-3-31 11:40:09

完全可以

其实就是哪里处理的问题,反正都是要做的

ffbiao 发表于 2009-5-6 16:01:18

能否详细点介绍下原理吗?看了还是不太懂

STM8USB 发表于 2009-5-6 17:14:23

回楼上,在论坛上搜索状态机,我记得一个网友发了一个帖子,里面搜集了很多状态机的论文,其中一篇广西轻工业的论文就是描述这个按键扫描原理的。

hl1200aa 发表于 2009-5-6 17:34:47

和开发板上那样,用下沿+低电平触发已经很稳定了,不知道这样是否能取消软件去抖?

ffbiao 发表于 2009-5-6 19:25:22

刚刚看了下程序,其中有一个函数不太懂:
static u8 KEY_Read(void)
{
   
    u8 KCode = 0;
/*        u8 KMask;
    // 读引脚状态,取反后1表示键按下
    KMask = GPIO_ReadInputData(KEY_PORT) ^ 0xFF;
       

        // KEY_PORT上接8个独立式按键,从低到高编号为1~8
        while(KMask != 0)
        {
                KMask >>= 1;
                KCode++;
        }
*/
    if( GPIO_ReadInputPin(KEY_PORT, KEY_PIN) == RESET )
      KCode = 1;
        return KCode;
}
以上程序KCode怎样返回一个8bit的端口值?

ifree64 发表于 2009-5-8 08:08:25

回11楼,能不能稍微详细讲讲?

回12楼,
这里只是检测了1个键,注释的是以前的代码,没有删掉。

psocfans 发表于 2009-7-19 20:31:47

mark

bitter_rain 发表于 2009-7-20 08:17:55

下载下来学习一下!

闷鱼 发表于 2015-1-8 19:59:03

结构体 没看的太懂

xuzhiping9889 发表于 2017-7-5 13:19:20

很不错,可做参考
页: [1]
查看完整版本: 我写的基于状态机的按键扫描程序,在STM8下测试通过了。