找回密码
 立即注册
查看: 93|回复: 4

关于程序冲突的问题

[复制链接]
  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    20

    主题

    52

    回帖

    340

    积分

    中级会员

    积分
    340
    发表于 2024-3-28 15:32:09 | 显示全部楼层 |阅读模式
    if(!(P11 & 0x01) && iskey11 == 0) {
    Delay5ms();
    iskey11 = 1;               
    flag11 = 1;
    keyPadData[0] |= 0x08;
    }
    else if((P11 & 0x01) && iskey11 == 1) {
    Delay5ms();
    iskey11 = 0;               
    flagt = 1;
    keyPadData[0] |= 0x08;
    }
    if(!(P17 & 0x01) && iskey17 == 0) {

    Delay5ms();
    iskey17 = 1;               
    flag17 = 1;
    keyPadData[1] |= 0x08;
    }
    else if((P17 & 0x01) && iskey17 == 1) {
    Delay5ms();
    iskey17 = 0;               
    flag17t = 1;
    keyPadData[1] |= 0x08;
    }
    问一下大佬们,这段程序正常运行是没问题的,但是如果两个按钮几乎同时按下的时候,会写入冲突导致丢失一次触发,问一下有什么方法,类似于排队触发,或者先将按键存起来怎么实现

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-6 15:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    20

    主题

    98

    回帖

    968

    积分

    荣誉版主

    积分
    968
    发表于 2024-3-28 16:00:17 | 显示全部楼层
    外部中断
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 08:11
  • 签到天数: 88 天

    [LV.6]常住居民II

    38

    主题

    982

    回帖

    6755

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6755
    QQ
    发表于 2024-3-28 16:09:45 | 显示全部楼层
    PWM硬件移相测试卡教程(一)按键点灯测试@STC8H2K12U系列
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7023
    (出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

    参考这个按键的写法,非阻塞的按键就可以了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    9 小时前
  • 签到天数: 151 天

    [LV.7]常住居民III

    25

    主题

    695

    回帖

    1725

    积分

    金牌会员

    积分
    1725
    发表于 2024-3-28 16:29:42 | 显示全部楼层
    延时耽误了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    16 小时前
  • 签到天数: 62 天

    [LV.6]常住居民II

    11

    主题

    357

    回帖

    1043

    积分

    金牌会员

    积分
    1043
    发表于 2024-3-29 00:31:59 | 显示全部楼层
    本帖最后由 xiangzichen 于 2024-3-29 00:40 编辑

    //都在一个端口上,为何不把端口读取了,然后用 && 去判断到底是哪个口?
    u8 GetKey() {

    u8 k_tmp = P1 & 0x81;               //读取P1口,如果有不用的口, P11 P17为按键
    u8 rt = 0;

    if(k_tmp) {                         //有数值,
        _delay_ms(10);                  //延时消抖
        if(k_tmp == P1) {               //再次判断,且相等
            if(~k_tmp & 0x80) {         //P17 有按下
                rt = 7;
            }
            else if(~k_tmp & 0x01) {    //P11 有按下
                rt = 1;
            }
            .
            .
            .
        }
    }
    return rt;                          //返回按键
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-27 16:12 , Processed in 0.060344 second(s), 46 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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