矩阵键盘及独立键盘模块+PCB板

合集下载

stm32矩阵键盘原理

stm32矩阵键盘原理

STM32矩阵键盘原理详解引言矩阵键盘是一种常见的输入设备,广泛应用于电子产品中。

在STM32微控制器中,利用GPIO引脚实现矩阵键盘控制相对简单,本文将详细介绍STM32矩阵键盘的基本原理。

基本原理矩阵键盘由多个按键组成,通常采用行列式排列。

每个按键都由一个触点和一个按键外壳组成,触点一般为弹簧式结构,按下按键时触点接通,释放按键时触点断开。

矩阵键盘的连接方式矩阵键盘的每个按键都被分配一个行号和列号,通过行线和列线来连接按键和控制芯片。

STM32通过GPIO来控制行线和列线的电平,实现按键的扫描和检测。

在STM32中,行线和列线可以连接到不同的GPIO引脚上。

行线连接到输出引脚,列线连接到输入引脚。

这样,通过对行线的输出和对列线的输入,可以实现对矩阵键盘的扫描和检测。

矩阵键盘的扫描原理矩阵键盘的扫描原理可以简单描述为以下几个步骤:1.将所有行线设置为高电平,所有列线设置为输入模式。

2.逐个将行线设置为低电平,并同时检测列线引脚的电平状态。

3.如果某一列的输入引脚检测到低电平,表示该列对应的按键被按下。

4.通过行线和列线的对应关系,确定被按下的按键的行号和列号。

矩阵键盘的按键映射通过扫描后,可以得到被按下的按键的行号和列号,STM32可以根据行列号的映射关系将按键信息转化为相应的按键值。

通常,矩阵键盘的按键映射是通过二维数组来实现的。

数组的行号对应行线,列号对应列线。

数组中的元素对应按键的键值。

例如,要实现一个4x4的矩阵键盘,可以通过以下数组表示按键的映射关系:uint8_t keyMap[4][4] = {{ '1', '2', '3', 'A' },{ '4', '5', '6', 'B' },{ '7', '8', '9', 'C' },{ '*', '0', '#', 'D' }};通过行列号可以确定数组中的元素,从而得到按键的键值。

单片机4×4矩阵键盘设计方案

单片机4×4矩阵键盘设计方案

1、设计原理(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。

(2)键盘中对应按键的序号排列如图14.1所示。

2、参考电路图14.2 4×4矩阵式键盘识别电路原理图3、电路硬件说明(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。

(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。

4、程序设计内容(1)4×4矩阵键盘识别处理。

(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

5、程序流程图(如图14.3所示)6、汇编源程序;;;;;;;;;;定义单元;;;;;;;;;;COUNT EQU 30H;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100HSTART: LCALL CHUSHIHUALCALL PANDUANLCALL XIANSHILJMP START;;;;;;;;;;初始化程序;;;;;;;;;;CHUSHIHUA: MOV COUNT,#00HRET;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;;PANDUAN: MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHJZ SW1LCALL DELAY10MS JZ SW1MOV A,P3ANL A,#0FHCJNE A,#0EH,K1 MOV COUNT,#0 LJMP DKK1: CJNE A,#0DH,K2 MOV COUNT,#4 LJMP DKK2: CJNE A,#0BH,K3 MOV COUNT,#8 LJMP DKK3: CJNE A,#07H,K4 MOV COUNT,#12K4: NOPLJMP DKSW1: MOV P3,#0FFH CLR P3.5MOV A,P3ANL A,#0FHJZ SW2LCALL DELAY10MS JZ SW2MOV A,P3ANL A,#0FHCJNE A,#0EH,K5 MOV COUNT,#1 LJMP DKK5: CJNE A,#0DH,K6 MOV COUNT,#5 LJMP DKK6: CJNE A,#0BH,K7 MOV COUNT,#9 LJMP DKK7: CJNE A,#07H,K8 MOV COUNT,#13K8: NOPLJMP DKSW2: MOV P3,#0FFH CLR P3.6MOV A,P3ANL A,#0FHJZ SW3LCALL DELAY10MS JZ SW3MOV A,P3ANL A,#0FHCJNE A,#0EH,K9 MOV COUNT,#2 LJMP DKK9: CJNE A,#0DH,KA MOV COUNT,#6 LJMP DKKA: CJNE A,#0BH,KB MOV COUNT,#10 LJMP DKKB: CJNE A,#07H,KC MOV COUNT,#14 KC: NOPLJMP DKSW3: MOV P3,#0FFH CLR P3.7MOV A,P3ANL A,#0FHJZ SW4LCALL DELAY10MSJZ SW4MOV A,P3ANL A,#0FHCJNE A,#0EH,KDMOV COUNT,#3LJMP DKKD: CJNE A,#0DH,KE MOV COUNT,#7LJMP DKKE: CJNE A,#0BH,KF MOV COUNT,#11 LJMP DKKF: CJNE A,#07H,KG MOV COUNT,#15KG: NOPLJMP DKSW4: LJMP PANDUAN DK: RET ;;;;;;;;;;显示程序;;;;;;;;;; XIANSHI: MOV A,COUNTMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ALCALL DELAYSK: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ SKRET;;;;;;;;;;10ms延时程序;;;;;;;;;;DELAY10MS: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;DELAY: MOV R5,#20LOOP: LCALL DELAY10MSDJNZ R5,LOOPRET;;;;;;;;;;共阴码表;;;;;;;;;;TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H;;;;;;;;;;结束标志;;;;;;;;;;END7、C语言源程序#includeunsigned char code table[]={0x3f,0x66,0x7f,0x39,0x06,0x6d,0x6f,0x5e,0x5b,0x7d,0x77,0x79,0x4f,0x07,0x7c,0x71};void main(void){ unsigned char i,j,k,key;while(1){ P3=0xff; //给P3口置1//P3_4=0; //给P3.4这条线送入0//i=P3;i=i&0x0f; //屏蔽低四位//if(i!=0x0f) //看是否有按键按下//{ for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);if(i!=0x0f) //再次判断按键是否按下//{ switch(i) //看是和P3.4相连的四个按键中的哪个// { case 0x0e:key=0;break;case 0x0d:key=1;break;case 0x0b:key=2;break;case 0x07:key=3;break;}P0=table[key]; //送数到P0口显示//}}P3=0xff;P3_5=0; //读P3.5这条线//i=P3;i=i&0x0f; //屏蔽P3口的低四位//if(i!=0x0f) //读P3.5这条线上看是否有按键按下// { for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);i=P3; //再看是否有按键真的按下//i=i&0x0f;if(i!=0x0f){ switch(i) //如果有,显示相应的按键//{ case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}P0=table[key]; //送入P0口显示//}}P3=0xff;P3_6=0; //读P3.6这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=8;break;case 0x0d:key=9;break;case 0x0b:key=10;break;case 0x07:key=11;break;}P0=table[key];}}P3=0xff;P3_7=0; //读P3.7这条线上是否有按键按下//i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--) for(k=200;k>0;k--); i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=12;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;}P0=table[key];}}}}8、注意事项在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。

《矩阵键盘》课件

《矩阵键盘》课件

游戏机按键通常配备震动反馈 功能,提供触觉反馈,增强游 戏体验的真实感。
工业控制设备
工业控制设备如自动 化仪表、数控机床等 也采用矩阵键盘布局 。
工业控制设备的矩阵 键盘通常防水、防尘 ,适应恶劣的工业环 境。
矩阵键盘的设计使得 工业控制设备能够实 现快速、准确的输入 控制指令。
06
矩阵键盘的未来展望

扫描程序
按照一定的规则逐行逐列扫描键盘 ,检测按键状态变化。
识别程序
根据按键电路的状态变化,判断具 体哪个按键被按下,并执行相应的 操作。
接口通信方式
并行通信
通过数据线将按键信号直接传输 到微控制器,数据传输速度快,
但需要较多的数据线。
串行通信
通过串行数据线将按键信号传输 到微控制器,数据传输速度较慢
键。
矩阵键盘的设计使得电子琴能够 模拟传统钢琴的触感,提供逼真
的演奏体验。
电子琴的矩阵键盘通常配备力度 感应功能,根据按下琴键的力度
来调整音符的音量和音质。
游戏机按键
游戏机按键通常采用矩阵键盘 布局,以适应游戏过程中快速 输入指令的需求。
矩阵键盘的设计使得游戏机按 键能够实现多键同时按下,提 高游戏操作的准确性和速度。
THANKS
感谢观看
03
矩阵键盘的电路设计
硬件电路设计
电源电路
为矩阵键盘提供稳定的电 源,确保按键的正常工作 。
按键电路
每个按键对应一个或多个 行列交叉点,通过检测行 和列的状态变化来确定按 键的按下状态。
输出电路
将按键信号输出到微控制 器或其他处理设备进行处 理。
软件编程设计
初始化程序
对矩阵键盘进行初始化设置,包 括设置扫描频率、去抖动时间等

怎样选择单片机开发板

怎样选择单片机开发板

的数据送给ZLG7289芯片就可以了,CPU不用实时扫描芯片,
这样大大的提高了CPU的工作效率。

工控开发板与常规开发板的区别
(2)键盘检测 常规开发板:通常配置的都是4*4的矩阵键盘,占用8个 CPU管脚,而且CPU必须实时扫描键盘,程序还要解决消抖问题。 CPU工作效率太低。

工控开发板与常规开发板的区别
(3)内存扩展与存储器 常规开发板:大部分都没有内存扩展,只是用CPU自身的 内存。存储器一般配有IIC通讯方式的24C02芯片,或者SPI通讯 方式的93C46芯片。IIC是2个管脚与CPU相连,SPI是3个管脚与
CPU相连,这两种芯片都可以掉电保存数据,缺点就是读写次数
没有时间处理其它外围元器件的事件。

视频教程
现在网上的视频教程很多,大概有10家左右,51的视频 教程是最多的,其次就是AVR和PIC的视频教程。能做到把51、 AVR、PIC三种单片机放在同一节课程讲解的,并且每一种功能都
用3种单片机分别实现的,目前国内只有我们众想科技一家公司。
PIC单片机CPU学习板系统结构

USB转RS232
51下载器

USB-ASP AVR 下载器

K150 PIC 下载器

ADC0804模拟量输入和DAC0832模拟量输出模块
如果要做一个比赛的项目就显得有点力不从心了。
生产厂家:一部分是公司,一部分是个人。

常规开发板
参考价格: 51 开发板:150-200元
AVR 开发板:180-220元
PIC 开发板:240-280元 以上价格包括下载器,不包括仿真器。
说明:适合学习编程语言和硬件基础。现在市场上这种开发板种类非 常多,视频教程也很多。生产的厂家有的是公司做的,有的是个人兼

矩阵键盘检测

矩阵键盘检测

很多盘检4*46个也就较好时,低电键按标,独立键盘多按键时就检测。

这里4键盘实现IO 口控无论是独就是检测与好检测,而,先送一列电平,若有按下,送下,然后对其盘与单片机就会浪费里以4*4现了用8控制9个按独立按键还与该键对而矩阵键盘列低电平有低电平则下一列低其编码后矩阵键盘机相连时,很多的IO 矩阵键盘个IO 口控按键,5*5还是矩阵键对应的IO 盘就需要,其余为则证明该电平,通编程扫描盘检测及,每个按键O 口,鉴于盘为例,下控制16个实现10键盘,单口是否为要人为控制高电平,该列有键按过这种方描了。

及其运用键都要占用于对IO 口下面是其与个按键,当个IO 口控片机检测为低电平。

制端口电平立即轮流按下,若无方法,我们用一个IO 口的节省,与单片机连当然也可以控制25个测的依据都独立按键平变化来检流检测一下无低电平证们便可以确O 口,当用引入矩阵连接电路以以3*3实个按键。

都是一样的键一端固定检测了。

检下各行是否证明该列没确定按键的用到阵键图:实现。

的,定比检测否有没有的坐以下是软件流程图:NYNNY N扫描四行按键程序会很长,下面我编程实现扫描出第一行按键,其他各行可用相同方法进行扫描:开始寄存器初始化IO口初始化检测是否有键按下延时10ms 检测是否真有键按下检测按键是否释放执行相应代码/*******************************************************// ////‐‐‐函数功能:扫描矩阵键盘,返回相应按键代表的值 ////‐‐‐主函数中可以利用这一返回值选择执行相关代码 ////‐‐‐这样就实现了矩阵按键对器件的操作 //// //*******************************************************/ unsigned char Matrixkeyscan(){unsigned char temp,key;P3=0xfe; //送一列低电平其余为高确定该列temp=P3; //将P3口的值读回来temp=temp&0xf0; //if(temp!=0xf0) //看是否有IO口为低电平{Delayms(10); //延时去抖temp=P3; //重新读回P3口的值temp=temp&0xf0;if(temp!=0xf0) //看是否真有键按下{temp=P3; //temp的值发生变化需重新读回switch(temp) //判断是哪一行按键被按下,确定按键位置{case 0xee:key=1;break;case 0xde:key=2;break;case 0xbe:key=3;break;case 0x7e:key=4;break;}while(temp!=0xf0)//松手检测 {temp=P3;temp=temp&0xf0;}}}//P3=0xfd; //扫描下一行//。

单片机矩阵键盘

单片机矩阵键盘
单片机矩阵键盘
汇报人: 202X-01-04
contents
目录
• 单片机矩阵键盘概述 • 单片机矩阵键盘硬件设计 • 单片机矩阵键盘软件编程 • 单片机矩阵键盘调试与测试 • 单片机矩阵键盘优化与扩展
01 单片机矩阵键盘 概述
定义与特点
定义
单片机矩阵键盘是一种由行线和 列线组成的键盘,通过按键的行 和列交叉点来识别按键。
用于显示输入的信息或状态, 如数码管、液晶显示屏等。
电源模块
为整个系统提供稳定的电源, 保证系统的正常工作。
电路连接
01
矩阵键盘的行线和列线分别连接到单片机的输入/输出端口,通 过软件扫描方式检测按键状态。
02
单片机控制模块与显示模块连接,将需要显示的信息传输给显
示模块。
电源模块为整个系统提供稳定的电源,保证系统的正常工作。
在通讯设备领域,单片机矩阵键盘可以用 于手机、电话等设备的操作面板,实现拨 号、挂断等功能。
பைடு நூலகம்
02 单片机矩阵键盘 硬件设计
硬件组成
01
02
03
04
矩阵键盘模块
由行线和列线组成的键盘矩阵 ,按键被安排在行线和列线的
交叉点上。
单片机控制模块
用于接收和处理来自矩阵键盘 的信号,控制整个系统的运行

显示模块
软件编程
编写单片机程序,用于扫描矩阵键盘并识 别按键按下事件。
测试方法
按键响应时间测试
测试从按键按下到单片机响应 的时间,确保在合理范围内。
按键防抖测试
测试按键防抖功能是否正常, 即在按键按下和释放时是否能 够正确识别。
多键同时按下测试
测试在多个按键同时按下时, 单片机是否能够正确识别并处 理。

4X4矩阵键盘及显示电路设计

4X4矩阵键盘及显示电路设计

4X4矩阵键盘与显示电路设计FPGA在数字系统设计中的广泛应用,影响到了生产生活的各个方面。

在FPGA 的设计开发中,VHDL语言作为一种主流的硬件描述语言,具有设计效率高,可靠性好,易读易懂等诸多优点。

作为一种功能强大的FPGA数字系统开发环境,Altera公司推出的Quar-tUSⅡ,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用VHDL语言进行FPGA设计提供了极大的便利。

矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7段数码管将按键数值进行显示也是一种常用的数据显示方式。

在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。

本文在QuartusⅡ开发环境下,采用VHDL语言设计了一种按键防抖并能连续记录并显示8次按键数值的矩阵键盘与显示电路。

一、矩阵键盘与显示电路设计思路矩阵键盘与显示电路能够将机械式4×4矩阵键盘的按键值依次显示到8个7段数码管上,每次新的按键值显示在最右端的第O号数码管上,原有第0~6号数码管显示的数值整体左移到第1~7号数码管上显示,见图1。

总体而言,矩阵键盘与显示电路的设计可分为4个局部:(1)矩阵键盘的行与列的扫描控制和译码。

该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行与列的扫描结果进行译码。

(2)机械式按键的防抖设计。

由于机械式按键在按下和弹起的过程中均有5~10 ms的信号抖动时间,在信号抖动时间内无法有效判断按键值,因此按键的防抖设计是非常关键的,也是该设计的一个重点。

(3)按键数值的移位存放。

由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。

(4)数码管的扫描和译码显示。

由于该设计使用了8个数码管,因此需要对每个数码管进行扫描控制,并根据按键值对每个数码管进行7段数码管的译码显示。

基于VHDL的矩阵键盘及显示电路设计

基于VHDL的矩阵键盘及显示电路设计

基于VHDL的矩阵键盘及显示电路设计摘要:为了有效防止机械式键盘按键抖动带来的数据错误,这里在Quartus ?开发环境下,采用VHDL 语言设计了一种能够将机械式4 ×4 矩阵键盘的按键值依次显示到8 个7 段数码管上的矩阵键盘及显示电路。

仿真结果表明,所设计的矩阵键盘及显示电路成功地实现了按键防抖和按键数据的准确显示。

以ACEX1K系列EP1K30QC208 芯片为硬件环境,验证了各项设计功能的正确性。

FPGA/ CPLD 在数字系统设计中的广泛应用,影响到了生产生活的各个方面。

在FPGA/ CPLD 的设计开发中,V HDL 语言作为一种主流的硬件描述语言,具有设计效率高, 可靠性好, 易读易懂等诸多优点。

作为一种功能强大的FPGA/ CPLD 数字系统开发环境,Altera 公司推出的Quart us ?,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用V HDL 语言进行FPGA/ CPLD 设计提供了极大的便利。

矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7 段数码管将按键数值进行显示也是一种常用的数据显示方式。

在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。

本文在Quart us ?开发环境下,采用V HDL语言设计了一种按键防抖并能连续记录并显示8 次按键数值的矩阵键盘及显示电路。

1 矩阵键盘及显示电路设计思路矩阵键盘及显示电路能够将机械式4 ×4矩阵键盘的按键值依次显示到8 个7段数码管上,每次新的按键值显示在最右端的第0 号数码管上,原有第0,6号数码管显示的数值整体左移到第1,7号数码管上显示,见图1 。

总体而言,矩阵键盘及显示电路的设计可分为4 个部分:(1) 矩阵键盘的行及列的扫描控制和译码。

该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档