OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2286|回复: 1

【急】求帮忙找错,写的矩阵键盘初始化和扫描函数不能正常扫描(行号R1-R4,对应PB4-PB7,上拉输入;列对应引脚PB3-PB0,推挽输出)

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2018-1-23
在线时间
12 小时
发表于 2019-5-12 23:44:36 | 显示全部楼层 |阅读模式
1金钱
#ifndef __KEY44
#define __KEY44
#include "sys.h"
#define  R1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)  //¶áè¡R1óDÎT°′¼ü°′ÏÂ
#define  R2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)  //¶áè¡R2óDÎT°′¼ü°′ÏÂ
#define  R3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)  //¶áè¡R3óDÎT°′¼ü°′ÏÂ
#define  R4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)  //¶áè¡R4óDÎT°′¼ü°′ÏÂ
#define  S1 1
#define  S2 2
#define  S3 3
#define  S4 4
#define  S5 5
#define  S6 6
#define  S7 7
#define  S8 8
#define  S9 9
#define  S10 10
#define  S11 11
#define  S12 12
#define  S13 13
#define  S14 14
#define  S15 15
#define  S16 16
void key44_Init(void);
u8 key44_Scan(void);
#endif


#include "key44.h"
#include "delay.h"
#include "sys.h"
void key44_Init(void)
{
        RCC->APB2ENR|=1<<3;     //ê1&#196;üPORTBê±&#214;ó
        JTAG_Set(JTAG_SWD_DISABLE);
        GPIOB->CRL&=0X88881111;        //PB0-PB3éè&#214;&#195;3éí&#198;íìê&#228;3&#246;£&#172B4-PB7éè&#214;&#195;&#206;aê&#228;è&#235;
        GPIOB->CRL|=0X88881111;            
        GPIOB->ODR|=0X000000F0;                   //PB4-PB7éè&#214;&#195;3éé&#207;à-ê&#228;è&#235;
}


u8 key44_Scan(void)
{       
        static u8 key_up=1;       
        GPIOB->ODR|=0X00000007;
        GPIOB->ODR&=0XFFFFFFF7;
        if(key_up&&(R1==0||R2==0||R3==0||R4==0))
                {       
                        delay_ms(10);
                        key_up=0;
                        if(R1==0)return S1;
                        else if(R2==0)return S2;
                        else if(R3==0)return S3;
                        else if(R4==0)return S4;
                }
        else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
                GPIOB->ODR|=0X0000000B;
                GPIOB->ODR&=0XFFFFFFFB;
                if(key_up&&(R1==0||R2==0||R3==0||R4==0))
                {       
                        delay_ms(10);
                        key_up=0;
                        if(R1==0)return S5;
                        else if(R2==0)return S6;
                        else if(R3==0)return S7;
                        else if(R4==0)return S8;
                }
        else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
                GPIOB->ODR|=0X0000000D;
                GPIOB->ODR&=0XFFFFFFFD;
                if(key_up&&(R1==0||R2==0||R3==0||R4==0))
                {       
                        delay_ms(10);
                        key_up=0;
                        if(R1==0)return S9;
                        else if(R2==0)return S10;
                        else if(R3==0)return S11;
                        else if(R4==0)return S12;
                }
        else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
                GPIOB->ODR|=0X0000000E;
                GPIOB->ODR&=0XFFFFFFFE;
                if(key_up&&(R1==0||R2==0||R3==0||R4==0))
                {       
                        delay_ms(10);
                        key_up=0;
                        if(R1==0)return S13;
                        else if(R2==0)return S14;
                        else if(R3==0)return S15;
                        else if(R4==0)return S16;
                }
                else if(R1==1&&R2==1&&R3==1&&R4==1)key_up=1;
                return 0;
}
       


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-5-13 02:33:23 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 19:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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