打印
[STM8]

按键C程序求救

[复制链接]
1437|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Andy_zhuang|  楼主 | 2014-7-9 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Andy_zhuang 于 2014-7-11 19:45 编辑

求一个按键状态机的程序,思路清晰点的,谢谢!
1325272561@qq.com

下面的程序,为什么我按键按下的时候,有时候会执行2次按键操作,取反取了2次,本意是按一次取反一次,在根据标志位来操作继电器的
= = 查找了半天了,还是没发现,求大神指导下,谢谢!:'(
void Key()
{
        Scan_Key();
        Do_Key();
}

void Scan_Key()
{
        New_Key_Status = 0;
        if(realy0_status() == 0)     New_Key_Status |= Con_Key_Onoff;  //赋值Con_Key_Onoff = 0b00000001
}

void Do_Key()
{
        if( New_Key_Status == 0)                     Release_Key();
        else if (New_Key_Status != Old_Key_Status)   Release_Key();
        else
        {
                Key_Time_Add++;
                if(Key_Time_Add >= 10)   Operation_Key();  //消抖时间5*10ms
                if(Key_Time_Add > 200)    Long_Operation_Key();  //长按
        }
}

void Release_Key()
{
        Old_Key_Status = New_Key_Status;
        Key_Time_Add = 0;
}
void Operation_Key()
{
        if(Con_Key_Onoff == Old_Key_Status)
        {
                while( realy0_status() == 0 );
                Flag_Key_Onoff = ~Flag_Key_Onoff;
        }
        
        if(Flag_Key_Onoff)   //继电器开启
        {
                Flag_SCR_Open = 1;
                realy8_off();
        }
沙发
sun1238898| | 2014-7-9 21:58 | 只看该作者
你现在具体遇到的是什么问题

使用特权

评论回复
板凳
Andy_zhuang|  楼主 | 2014-7-11 11:03 | 只看该作者
sun1238898 发表于 2014-7-9 21:58
你现在具体遇到的是什么问题

我的想法是我按下按键之后,就只执行一次Flag_Key_Onoff = ~Flag_Key_Onoff;但是现在的问题就是我有时候执行了2次Flag_Key_Onoff = ~Flag_Key_Onoff这句话,我用示波器观察发现我按下按键执行了2次,变得我的按键有时候误动作,按键没释放一样= =~!,求指导...真不知道哪里有问题

使用特权

评论回复
地板
sun1238898| | 2014-7-11 11:52 | 只看该作者
那你消抖没有做好,还有就是可以换成按下之后,等待弹起的方式进行操作。

使用特权

评论回复
5
Andy_zhuang|  楼主 | 2014-7-11 12:00 | 只看该作者
sun1238898 发表于 2014-7-11 11:52
那你消抖没有做好,还有就是可以换成按下之后,等待弹起的方式进行操作。 ...

有这个程序参考下吗?发个给我,1325272561@qq.com  我该成状态扫描也是这个毛病,知道问题在哪里,修改了半天还是没改好

使用特权

评论回复
6
steven888888| | 2014-7-11 14:45 | 只看该作者
检测按键是否按下,软件消抖,等待释放,很简单的额??

使用特权

评论回复
7
steven888888| | 2014-7-11 14:48 | 只看该作者
按照你的程序继电器动作后,按键是不是永远不释放了?

使用特权

评论回复
8
Andy_zhuang|  楼主 | 2014-7-11 18:51 | 只看该作者
steven888888 发表于 2014-7-11 14:45
检测按键是否按下,软件消抖,等待释放,很简单的额??

我现在的问题是时而可以,时而不行, 执行了2次取反操作= =~!  不知道哪里的问题,好郁闷

使用特权

评论回复
9
Andy_zhuang|  楼主 | 2014-7-11 18:55 | 只看该作者
steven888888 发表于 2014-7-11 14:48
按照你的程序继电器动作后,按键是不是永远不释放了?

有的  取反的标志位来控制操作继电器开关,我的本意是按一次按键取反一次,现在变的有时候我按一次按键会执行2次按下的操作

使用特权

评论回复
10
chhyxf| | 2014-7-23 11:48 | 只看该作者
应该是抖动造成的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

0

粉丝