基于STM32的数字小键盘
自己的键盘小键盘数字键坏了几个,准备自己用STM32做一个数字键盘。
硬件
· 找了一些资料,感谢知乎老哥。
原理图
采用的是主控是STM32F103RBT6,上拉1.5K接高速USB。按键采用的是矩阵按键。轴位可以自己选择。还接了一块0.91寸的OLED屏幕,一个EC11编码器,晶振采用的是16M晶振。
PCB
按键布局是这样的。
注意:所有的二极管封装都反了。
3D图
实物图
软件
初始化函数
void System_Init(void)
{
u8 show_level;
delay_init(); //延时函数初始化
I2C_Configuration();
OLED_Init(); //初始化OLED
NVIC_Config();
SysInit_TIM();
OLED_CLS();
OLED_ShowStr1(0,++show_level,(char *)"OLED Ready",1);
uart_init(9600);
OLED_ShowStr1(0,++show_level,(char *)"UART1 Ready",1);
KEY_Init();
OLED_ShowStr1(0,++show_level,(char *)"KEY Ready",1);
delay_ms(1800);
usb_port_set(0); //USB先断开
delay_ms(300);
usb_port_set(1); //USB再次连接
//USB键盘初始化
USB_Interrupts_Config();
Set_USBClock();
USB_Init();
OLED_ShowStr1(0,++show_level,(char *)"USB Ready",1);
delay_ms(500);
delay_ms(500);
OLED_CLS();
}
矩阵键盘文章来源:https://www.toymoban.com/news/detail-581895.html
u32 Key(void)
{
u32 Keyinbuf;
u32 ReadValue;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTE时钟
//扫KEY0
GPIO_InitStructure.GPIO_Pin = IO_Key_COL1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推拉输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,IO_Key_COL1); //KEY0输出低
ReadValue = (GPIO_ReadInputData(GPIOA)>>3)&0x0F; //bit2~4
Keyinbuf = ReadValue;
GPIO_ResetBits(GPIOC,IO_Key_COL1);
GPIO_InitStructure.GPIO_Pin = IO_Key_COL1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //KEY0输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
//扫KEY1
GPIO_InitStructure.GPIO_Pin = IO_Key_COL2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推拉输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,IO_Key_COL2); //KEY1输出低
ReadValue = (GPIO_ReadInputData(GPIOA)>>3)&0x0F; //bit2~4
Keyinbuf |= ReadValue<<4;
GPIO_ResetBits(GPIOC,IO_Key_COL2);
GPIO_InitStructure.GPIO_Pin = IO_Key_COL2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //KEY1输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
//扫KEY2
GPIO_InitStructure.GPIO_Pin = IO_Key_COL3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推拉输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,IO_Key_COL3); //KEY1输出低
ReadValue = (GPIO_ReadInputData(GPIOA)>>3)&0x0F; //bit2~4
Keyinbuf |= ReadValue<<8;
GPIO_ResetBits(GPIOC,IO_Key_COL3);
GPIO_InitStructure.GPIO_Pin = IO_Key_COL3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //KEY1输入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
//扫KEY3
GPIO_InitStructure.GPIO_Pin = IO_Key_COL4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推拉输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,IO_Key_COL4); //KEY1输出低
ReadValue = (GPIO_ReadInputData(GPIOA)>>3)&0x0F; //bit2~4
Keyinbuf |= ReadValue<<12;
GPIO_ResetBits(GPIOB,IO_Key_COL4);
GPIO_InitStructure.GPIO_Pin = IO_Key_COL4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //KEY1输入上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
//扫KEY4
GPIO_InitStructure.GPIO_Pin = IO_Key_COL5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推拉输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,IO_Key_COL5); //KEY1输出低
ReadValue = (GPIO_ReadInputData(GPIOA)>>3)&0x0F; //bit2~4
Keyinbuf |= ReadValue<<16;
GPIO_ResetBits(GPIOA,IO_Key_COL5);
GPIO_InitStructure.GPIO_Pin = IO_Key_COL5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //KEY1输入上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
//初始化index
keys_index[0]=30;
keys_index[1]=31;
keys_index[2]=32;
keys_index[3]=33;
keys_index[4]=34;
keys_index[5]=35;
keys_index[6]=36;
keys_index[7]=37;
keys_index[8]=38;
keys_index[9]=39;
keys_index[10]=40;
keys_index[11]=42;
keys_index[12]=55;
keys_index[13]=84;
keys_index[14]=85;
keys_index[15]=86;
keys_index[16]=87;
keys_index[17]=83;
keys_index[18]=Key_Test;
keys_index[19]=KEY_BackSpace;
keys_index[20]=KEY_Space;
return Keyinbuf;
}
实物测试
实际测试也是可以用的。
完工。
v:shiboven
下载地址:https://download.csdn.net/download/weixin_42320020/88195997?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-581895.html
到了这里,关于STM32数字小键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!