[mw_shl_code=c,true]/*************
键盘输入函数头针对PA0到PA7
****************/
#ifndef _SCAN_H_
#define _SCAN_H_
#include "stm32f10x.h"
#define H1_L0 {GPIOA->CRL=0X88883333;GPIOA->ODR&=0XFF00;GPIOA->ODR|=0X00F0;}
#define H0_L1 {GPIOA->CRL=0X33338888;GPIOA->ODR&=0XFF00;GPIOA->ODR|=0X000F;}
#define PAL_data (u8)GPIOA->IDR
#define S_error 254
void SCANinit(void);
u8 Gdata(void);
#endif
[/mw_shl_code]
以上为4X4矩阵键盘的头文件,以下为4X4矩阵键盘的C文件
#include "scan.h"
void SCANinit(void)
{
RCC->APB2ENR|=1<<2;
H1_L0;
}
void delay(u8 t)
{
t*=36;
while(t--);
}
u8 scan(u8 flag)
{
u8 temp=0,temp1;
H1_L0;delay(1); //针对高四位操作
temp=PAL_data;//高4位才是我们所需要的
H0_L1;delay(1);
temp1=PAL_data;
return (temp&0xf0)|(temp1&0x0f);
}
u8 Gdata(void)
{
u8 temp;
temp=scan(1);
switch(temp)
{
case 0x77:temp='D';break;
case 0x7b:temp='C';break;
case 0x7d:temp='B';break;
case 0x7e:temp='A';break;
case 0xb7:temp='#';break;
case 0xbb:temp=9;break;
case 0xbd:temp=6;break;
case 0xbe:temp=3;break;
case 0xd7:temp=0;break;
case 0xdb:temp=8;break;
case 0xdd:temp=5;break;
case 0xde:temp=2;break;
case 0xe7:temp='*';break;
case 0xeb:temp=7;break;
case 0xed:temp=4;break;
case 0xee:temp=1;break;
default:return S_error;break;
}
return temp;
}
|