自己写的一个4X4矩阵按键扫描函数

2019-08-14 18:38发布


在stm32F103上用的,请大神指点指点

u8 key_scan(u8 mode)
{
         static u8 key_mode = 1;
         if(mode)key_mode = 1;
         if(key_mode&&(PA_Data != 0xF0))      
         {
                 delay_ms(10);
           if(PA_Data != 0xF0)    //没按键按下时PA口的值是0xF0   
            {
              u8 key = 0;
              key |= PA_Data;
              SCAN_B();           //设置PA0~3为上拉输入,PA4~7为推挽输出并置0 //00001111
              key |= PA_Data;
              SCAN_A();           //设置PA4~7为上拉输入,PA0~3为推挽输出并置0 //11110000 初始化状态
              key_mode = 0;
              return key;
             }                 
          return 0;
         }

    return 0;

}



下面是在.h文件上加的几个宏定义

#define PA_Data GPIO_ReadInputData(GPIOA)
#define SCAN_A() {GPIOA->CRL=0x88881111;GPIOA->ODR=0xF0;}
#define SCAN_B() {GPIOA->CRL=0x11118888;GPIOA->ODR=0xF;}


经实验,该函数各按键返回值为:
0x77 0x7B 0x7D 0x7E
0xB7 0xBB 0xBD 0xBE
0xD7 0xDB 0xDD 0xDE
0xE7 0xEB 0xED 0xEE
0条回答

一周热门 更多>