洋桃电子STM32F103阵列键盘原理与驱动代码问题修改

由于代码错误,导致阵列键盘有些问题,甚至第二列不起作用,因此代码修改如下

在阵列键盘原理与驱动一节键盘处理函数有点问题,需要如下更改

u8 KEYPAD4x4_Read (void){//键盘处理函数
    u8 a=0,b=0;//定义变量
    KEYPAD4x4_Init();//初始化IO
    GPIO_ResetBits(KEYPAD4x4PORT,KEY1|KEY2|KEY3|KEY4);
    GPIO_SetBits(KEYPAD4x4PORT,KEYa|KEYb|KEYc|KEYd);
    if(!GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYa) ||      //查寻键盘口的值是否变化
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYb) || 
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYc) || 
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYd)){
        delay_ms (20);//延时20毫秒
        if(!GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYa) ||      //查寻键盘口的值是否变化
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYb) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYc) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEYd)){
              a = GPIO_ReadInputData(KEYPAD4x4PORT)&0xff;//键值放入寄存器a
        }
    }
        KEYPAD4x4_Init2();//IO工作方式反转
        GPIO_SetBits(KEYPAD4x4PORT,KEY1|KEY2|KEY3|KEY4);
        GPIO_ResetBits(KEYPAD4x4PORT,KEYa|KEYb|KEYc|KEYd);
            if(!GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY1) ||      //查寻键盘口的值是否变化
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY2) || 
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY3) || 
        !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY4)){
        delay_ms (20);//延时20毫秒
        if(!GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY1) ||      //查寻键盘口的值是否变化
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY2) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY3) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY4)){
              b = GPIO_ReadInputData(KEYPAD4x4PORT)&0xff;//将第二次取得值放入寄存器b
        }
    }
        
        a = a|b;//将两个数据相或
        switch(a){//对比数据值
            case 0xee: b = 0x64; break;//对比得到的键值给b一个应用数据
            case 0xed: b = 0x23; break;
            case 0xeb: b = 0x30; break;
            case 0xe7: b = 0x2a; break;
            case 0xde: b = 0x63; break;
            case 0xdd: b = 0x39; break;
            case 0xdb: b = 0x38; break;
            case 0xd7: b = 0x37; break;
            case 0xbe: b = 0x62; break;
            case 0xbd: b = 0x36; break;
            case 0xbb: b = 0x35; break;
            case 0xb7: b = 0x34; break;
            case 0x7e: b = 0x61; break;
            case 0x7d: b = 0x33; break;
            case 0x7b: b = 0x32; break;
            case 0x77: b = 0x31; break;
            default: b = 0; break;//键值错误处理
        }
        while(!GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY1) ||      //等待按键放开
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY2) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY3) || 
            !GPIO_ReadInputDataBit(KEYPAD4x4PORT,KEY4));
        delay_ms (20);//延时20毫秒
    
return (b);//将b作为返回值

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值