假如让P1=0xCf;低位都置1 (pb0-pb3),pb4-pb5置0;然后我们就扫描P1口就行了,如果有按键被按下的,高电平会被强制拉低的。
假如按键返回的值为0xce,可知是pb0被拉低了,由此可判断是S1或者S2按下了,其他的同理。
当然只让P1=0xcf,是不能判断出具体的按键是哪个的,此时,如果我们取反既P1=0x30;
当按键返回值为0x10时,我们可得知01 0000,pb5=0,s1或者s2被按下,这个时候我们将0xce|0x10=0xde,就是唯一的值了。以此类推,得出其他的值来。
在stm32中是同样的大道理;
uint8_t KeyScan(void)
{
}
typedef struct
{
}Matrix_t;
//const Matrix_t Colum1 = {GPIOD, GPIO_PIN_2};
//const Matrix_t Colum2 = {GPIOD, GPIO_PIN_3};
//const Matrix_t Colum3 = {GPIOD, GPIO_PIN_4};
const Matrix_t Colum1 = {GPIOB, GPIO_Pin_0};
const Matrix_t Colum2 = {GPIOB, GPIO_Pin_1};
const Matrix_t Colum3 = {GPIOB, GPIO_Pin_2};
const Matrix_t Colum4 = {GPIOB, GPIO_Pin_3};
const Matrix_t Line1
const Matrix_t Line2
#define KEY_01 0x1e
#define KEY_02 0x2e
#define KEY_03 0x1d
#define KEY_04 0x2d
#define KEY_05 0x1b
#define KEY_06 0x2b
#define KEY_07 0x17
#define KEY_08 0x27
上一篇:如何取得适合自己屏幕大小的图片?
下一篇:Stm32的io口模拟spi例程分析