die_lianhua 2021-12-24 22:31 采纳率: 0%
浏览 41
已结题

在矩阵键盘中增加功能按键,并实现组合按键的操作

基础功能:通过按键实现点阵上点的移动,按键时有按键音
附加:在矩阵键盘中增加功能按键,并实现组合按键的操作:功能按键+组合按键1实现点阵的开和关;功能按键+组合按键2实现按键音的开和关

void KeyDown(void)
{
    char a=0;
    GPIO_KEY=0x0f;
    if(GPIO_KEY!=0x0f)//读取按键是否按下
    {
        delay(1000);//延时10ms进行消抖
        if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
        {    
            flag = 1;
        //    s_c++;
            //测试列
            GPIO_KEY=0X0F;
            switch(GPIO_KEY)
            {
                case(0X07):    KeyValue=0;break;
                case(0X0b):    KeyValue=1;break;
                case(0X0d): KeyValue=2;break;
                case(0X0e):    KeyValue=3;break;
            }
            //测试行
            GPIO_KEY=0XF0;
            switch(GPIO_KEY)
            {
                case(0X70):    KeyValue=KeyValue;break;
                case(0Xb0):    KeyValue=KeyValue+4;break;
                case(0Xd0): KeyValue=KeyValue+8;break;
                case(0Xe0):    KeyValue=KeyValue+12;break;
            }
//            if(KeyValue == 0)            //判断是否出现功能按键
//            {
//                KeyValue = 255;
//                GPIO_KEY = 0x0f;
//                while(GPIO_KEY != 0x0f)
//                {
//                    GPIO_KEY = 0x0f;    //判断组合按键
//                    switch(GPIO_KEY & 0x07)
//                    {
//                        case(0x03): KeyValue = 16;break;    //组合按键1
//                        case(0x05): KeyValue = 17;break;
//                    }
//                    if(KeyValue > 16 && KeyValue < 18) break;
//                }
//            }
        }    
    }
}

将S1设为功能键,两个组合按键分别设为S2、S3
后面加上了判定位ledflag和singflag

void Int0() interrupt 0 //外部中断 0 的中断函数
{
    delay(1000); //延时消抖
    if(flag == 1)
    {
        delay(1000);
        flag = 0;
        if(KeyValue == 16)
        {
            ledflag = ~ledflag;
        }
    }
}

void Int1() interrupt 2 //外部中断 1 的中断函数
{
    delay(1000); //延时消抖
    if(flag == 1)//读取按键是否按下
    {
        delay(1000);//延时10ms进行消抖
        flag = 0;
        if(KeyValue == 17)
        {
            singflag = ~singflag;
        }
    }
}

不加组合按键的其他程序都是对的,加了组合按键后,按下S1,点阵的点就不移动了,且没有按键音
有没有能人看看到底哪错了

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月1日
    • 创建了问题 12月24日

    悬赏问题

    • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
    • ¥30 STM32 INMP441无法读取数据
    • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
    • ¥15 用visualstudio2022创建vue项目后无法启动
    • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
    • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
    • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
    • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
    • ¥30 c#打开word开启修订并实时显示批注
    • ¥15 如何解决ldsc的这条报错/index error