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

2019-07-21 01:33发布

#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;
}
       


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。