STM32数字小键盘

基于STM32的数字小键盘


自己的键盘小键盘数字键坏了几个,准备自己用STM32做一个数字键盘。

硬件

· 找了一些资料,感谢知乎老哥。

原理图

![在这里插入图片描述](https://img-blog.csdnimg.cn/91709f90eeb34dbab945395789c5cccf.png
采用的是主控是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();
}

矩阵键盘

u32 Key(void)
{u32 Keyinbuf;u32 ReadValue;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTE时钟//扫KEY0GPIO_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~4Keyinbuf = 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);//扫KEY1GPIO_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~4Keyinbuf |= 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);//扫KEY2GPIO_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~4Keyinbuf |= 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);//扫KEY3GPIO_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~4Keyinbuf |= 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);//扫KEY4GPIO_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~4Keyinbuf |= 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);//初始化indexkeys_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28822.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习——类和对象(一)

C语言和C语言最大的区别在于在C当中引入了面向对象的编程思想&#xff0c;想要完全了解c当中的类和对象&#xff0c;就要从头开始一点一点的积累并学习。 一&#xff1a;什么是面向对象编程 我们之前学习的C语言属于面向过程的编程方法。举一个简单的例子来说&#xff1a;面向过…

Elasticsearch--客户端

Es客户端 语言无关 ​ java最常用的客户端是Java Client、Java Rest Client、Java Transport Client Java Client 从es7.17开始&#xff0c;官方推出Java Client&#xff0c;并且将Java Rest Client标为Deprecated&#xff08;过期&#xff09; 要求jdk至少要jdk8 具体用法…

LangChain大型语言模型(LLM)应用开发(六):Agents

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

Ajax详解

文章目录 1. 概述1.1 Ajax工作原理1.2 Ajax的作用1.3 同步异步 2. 原生Ajax3. Axios3.1 Axios的基本使用3.2 Axios快速入门3.3 请求方法的别名 1. 概述 Ajax 是 “Asynchronous JavaScript and XML”&#xff08;异步 JavaScript 和 XML&#xff09;的缩写。它是一种在无需重新…

Java版本企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

决赛结束,颁奖在即:2023隐私计算大会暨“星河杯”隐私计算大赛颁奖典礼震撼来袭!

7月11日-12日&#xff0c;首届“星河杯”隐私计算大赛4个赛题共计37支团队陆续完成决赛评审&#xff0c;决出的大赛获奖团队代表将受邀出席7月26日在青岛星河湾酒店举办的2023隐私计算大会暨首届“星河杯”隐私计算颁奖典礼。 2023隐私计算大会暨首届“星河杯”隐私计算大赛颁奖…

shell脚本中一个隐晦的bug

1.逻辑表达式if [ ! EXP PATTERN ]不能判断EXP结果为空的情形&#xff1b; 2.而逻辑表达式if [[ EXP ! PATTERN ]可以判断EXP结果为空的情形&#xff1b;

计算机网络 day10 DNAT问题 - 堡垒机 - WLAN

目录 DNAT策略拓扑图&#xff1a; 问题一&#xff1a;当我们访问内网的Web服务的时候&#xff0c;我们防火墙服务器的80端口和Web服务器的8000端口是否需要一直调用程序监控呢&#xff1f; DNAT的作用就是可以帮助我们进行路由转发功能 问题二&#xff1a;当我们在继续DNAT…

【VUE】拖动侧边栏以便自由调整左右两侧的宽度

效果 &#xff08;1&#xff09;拖动前 &#xff08;2&#xff09;拖动后 主要代码 <template><el-row class"contnet" :gutter"20">// 1. 左侧树<el-col id"left-tree" class"left-tree" :offset"0" :…

什么是 Elasticsearch 索引?

作者&#xff1a;David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引&#xff0c;他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构&#xff0c;它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…

利用Python与ArcGIS工具进行蒸散发ET、植被总初级生产力GPP估算

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行课…

一篇文章教会你,在IntelliJ IDEA 中,一些让你相见恨晚的技巧

1.Easy Code Easy Code我个人在写博客案例demo时用的比较多&#xff0c;它可以快速的将数据库表映射成Java中的entity、controller、service、dao、mapper等文件&#xff0c;少量编码实现快速开发。 先用database连接数据库&#xff0c;在对应表上直接右键执行EasyCode即可生成…