STM32笔记(二)(寄存器)——矩阵键盘
程序员文章站
2022-04-01 21:55:43
...
矩阵键盘是我第一个需要动手焊接东西的实验,是3*3的键盘,焊了一个下午。因为是第一次焊东西,有多处不足,但最后也勉强能用。键盘的电路是组长设计的,希望下一次我能自己独立设计电路。
键盘外观
正面
背面
外观略显粗糙。。。。
主要代码
矩阵键盘最主要的一部分代码就是按键扫描部分,通过一个扫描函数对高低电平进行判断,从而确定按键的位置。用过串口输出案件编号1~9。
key.c代码
void KEY_Init1(void)
{
RCC->APB2ENR|=1<<3;
JTAG_Set(SWD_ENABLE);
GPIOB->CRL&=0X000FFFFF; //PB5,6,7
GPIOB->CRL|=0X33300000;
GPIOB->CRH&=0XFFFFF000; //PB8,9,10
GPIOB->CRH|=0X00000888;
GPIOB->ODR|=1<<5;
GPIOB->ODR|=1<<6;
GPIOB->ODR|=1<<7;
KEY1=1;
KEY2=1;
KEY3=1;
}
void KEY_Init2(void)
{
GPIOB->CRL&=0X000FFFFF; //PB5,6,7
GPIOB->CRL|=0X88800000;
GPIOB->CRH&=0XFFFFF000; //PB8,9,10
GPIOB->CRH|=0X00000333;
GPIOB->ODR|=1<<8;
GPIOB->ODR|=1<<9;
GPIOB->ODR|=1<<10;
KEY4=1;
KEY5=1;
KEY6=1;
}
u8 KEY_Scan(void)
{
u8 a=0,b=0;
KEY_Init1();
if(KEY4_in==1||KEY5_in==1||KEY6_in==1)
{
delay_ms(10);
if(KEY4_in==1) a=1;
else if(KEY5_in==1) a=2;
else if(KEY6_in==1) a=3;
}
else return 0;
GPIOB->ODR &=~(1<<5);
GPIOB->ODR &=~(1<<6);
GPIOB->ODR &=~(1<<7);
KEY_Init2();
delay_ms(10);
if(KEY1_in==1) b=1;
else if(KEY2_in==1) b=2;
else if(KEY3_in==1) b=3;
else return 0;
GPIOB->ODR &=~(1<<8);
GPIOB->ODR &=~(1<<9);
GPIOB->ODR &=~(1<<10);
KEY_Init1();
return ((a-1)*3+b);
}
这一部分也是最主要的代码,u8 KEY_Scan()是扫描函数。
实验结果
上一篇: PHP实现将多个文件中的内容合并为新文件的方法详解
下一篇: php函数与传递参数实例分析