外部中断扫描矩阵键盘

合集下载

矩阵键盘的工作原理和扫描确认方式

矩阵键盘的工作原理和扫描确认方式
9.3.1 矩阵键盘的工作原理和扫描确认方式
来源:《AVR 单片机嵌入式系统原理与应用实践》M16 华东师范大学电子系 马潮 当键盘中按键数量较多时,为了减少对 I/O 口的占用,通常将按键排列成
矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图 9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交 点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行 或列线上的电平变化可以确定哪个按键被按下。
图 9-7 为一个 4 x 3 的行列结构,可以构成 12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个 16 键的键盘。很明显,在按键数量多的场合,矩 阵键盘与独立式按键键盘相比可以节省很多的 I/O 口线。
矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式 按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和 线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态, 因此会大量占用 MCU 的时间,所以较好的方式也是采用状态机的方法来设计, 尽量减少键盘查询过程对 MCU 的占用时间。
key_return = K1_1; break; case 0b00001101: key_return = K1_2; break; case 0b00001011: key_return = K1_3; break; case 0b00010110: key_return = K2_1; break; case 0b00010101: key_return = K2_2; break; case 0b00010011: key_return = K2_3; break; case 0b00100110: key_return = K3_1; break; case 0b00100101: key_return = K3_2; break; case 0b00100011: key_return = K3_3; break;

单片机按键程序设计

单片机按键程序设计

单片机按键程序设计单片机按键的基本原理其实并不复杂。

通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。

在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。

在实际的按键程序设计中,有多种方式可以实现按键检测。

其中一种常见的方法是查询法。

这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。

以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。

当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。

除了查询法,还有中断法可以用于按键检测。

中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。

```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。

51单片机矩阵键盘扫描程序

51单片机矩阵键盘扫描程序
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;//重新赋值2ms
TL0=(65536-2000)%256;
Display(0,8); //调用数码管扫描
}
/*------------------------------------------------
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//显示段码值0~F
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
/*------------------------------------------------
uS延时函数,含有输入参数unsigned char t,无返回值
unsigned char是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5 uS

单片机密码锁实验报告

单片机密码锁实验报告

二○一六~二○一七学年第一学期电子信息工程系电子综合设计II报告书班级:电信(产业)1401班设计时间:2016/12/29学生姓名:曹子龙学号:201404135024指导教师:赵敏二○一六年十二月一、设计要求.题目内容:设计一个基于51单片机的电子密码锁:1.可以使用4*4的矩阵键盘与红外遥控器输入密码。

2.可以通过按特殊组合键重设开锁密码。

3.显示通过1602液晶屏显示电子密码锁界面,输入密码时显示输入个数显示为‘*’,如果密码正确,进入欢迎界面。

4.密码连续输入3次错误报警,LCD显示报警,倒计时十秒后重新进入密码输入界面。

5.可以通过特殊的按键组合跳过输入界面直接进入欢迎界面。

实现方法:1.通过红外接收头,连接单片机的P3.2外部中断INT0口,可以实现单片机接收遥控器的信号输入。

2.通过矩阵键盘扫描函数,可以实现对键盘输入的响应。

3.通过引脚的高低电平变化频率,控制蜂鸣器的输入占空比和频率(低电平时间固定,通过输入给函数值的不同改变高电平时间,固定响300个周期),对不同按键实现不同声音响应。

4.1602显示屏有16*2个单元格,每个单元格由5*8个像素点组成,可以很好的显示数字,符号,英文字符。

功能需求分析:液晶屏显示:根据题意,需要设计并显示输入密码界面、修改密码界面、欢迎界面、错误警告界面密码输入:根据题意,每次输入一个数字,则显示一个‘*’符号代替,只能看出输入的位数,若输入密码位数达到六位,则与正确密码比较,若正确,进入系统。

根据日常的手机使用习惯,默认长度为6位,且第六位输入之后立即判断,正确则进入,错误则清空重输。

组合键实现密码修改:密码修改必须通过不易被他人发现的特殊方法改变,所以设计为,若同时按住矩阵键盘的5,10 或6,9两个键,则进入密码修改函数。

输入密码错误三次则报错:一般的密码系统对密码输入错误次数过多的情况进行了限制,所以在密码锁里设置,若密码输入错误三次,则进入警报界面,显示10s倒计时,必须在倒计时结束后才能再次输入密码。

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.2 中断方式矩阵键盘

4.2 中断方式矩阵键盘

d
E
F
第3行
C1
30pF
R5
10k
C2
30pF
U1 X1 19 XTAL1
CRYSTAL 18 XTAL2
9 RST
C3
10uF
29 30 31
PSEN ALE EA
U2
P1.0 18 P1.1 17 P1.2 16 P1.3 15 P1.4 14 P1.5 13 P1.6 12
11
B0 B1 B2 B3 B4 B5 B6 B7


子上的电话铃响了。

➢她读或写完正在读或写的字或 电话铃响
接 电

句子后,去接电话。
➢听完电话以后,她又从打断的
批 文

地方继续读或写。
单片机 应用技术
项目四 键盘的设计与实现
认识中断
中断
1. 当CPU正在执行某个程序时,由单片机内部 主
或外部的原因引起的紧急事件,向CPU发出 请求处理的信号;
项目四 键盘的设计与实现
中断方式矩阵键盘电路
ROL0 ROL1 ROL2 ROL3 COL0 COL1 COL2 COL3
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6
第0列
R4
10k
第1列
R3
10k
第2列
第3列
R2
R1
10k
10k
0
1
2
3
第0行
4
5
6
7
第1行
8
9
A
b
第2行
C
设计一个4×4中断方式矩阵键盘
任务要求
1. 当键盘无键按下时,单片机正常工作,不执行键盘扫 描程序;

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法

51单片机矩阵键盘控制数码管显示过程中出现的问题及解决方法在使用51单片机控制矩阵键盘同时驱动数码管显示的过程中,可能会遇到一些常见的问题。

以下是一些可能的问题及相应的解决方法:按键无法正常响应:* 问题可能原因:接线错误、按键损坏、软件扫描不到按键信号。

* 解决方法:检查按键连接是否正确,确保按键没有损坏。

在软件中进行适当的按键扫描,确保能够正确检测到按键的状态。

数码管显示异常或不亮:* 问题可能原因:数码管接线问题、数码管损坏、数码管驱动程序错误。

* 解决方法:仔细检查数码管的接线是否正确,确保数码管没有损坏。

检查数码管的驱动程序,确保它按照正确的顺序和时序进行驱动。

按键重复响应或漏按现象:* 问题可能原因:按键抖动、软件扫描速度过快。

* 解决方法:在软件中增加适当的按键抖动延时,确保在按键按下或抬起时只响应一次。

调整软件扫描速度,避免扫描间隔过短导致的重复响应。

矩阵键盘的多个按键同时按下导致混乱:* 问题可能原因:矩阵键盘硬件连接错误、软件扫描算法问题。

* 解决方法:检查矩阵键盘的硬件连接,确保矩阵行和列没有短路或断路。

调整软件扫描算法,确保同时按下多个按键时能够正确识别。

数码管显示不正常的数字或乱码:* 问题可能原因:程序错误、数码管接线错误。

* 解决方法:仔细检查程序,确保数码管段选和位选的控制逻辑正确。

检查数码管的接线,确保每个数码管的连接都正确。

在解决问题时,建议逐步排除可能的原因,通过调试工具、逻辑分析仪或输出调试信息的方式来定位问题。

另外,仔细查阅51单片机的数据手册和相关文档,以确保硬件连接和软件设计都符合标准。

单片机矩阵键盘

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

显示模块
软件编程
编写单片机程序,用于扫描矩阵键盘并识 别按键按下事件。
测试方法
按键响应时间测试
测试从按键按下到单片机响应 的时间,确保在合理范围内。
按键防抖测试
测试按键防抖功能是否正常, 即在按键按下和释放时是否能 够正确识别。
多键同时按下测试
测试在多个按键同时按下时, 单片机是否能够正确识别并处 理。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

外部中断扫描矩阵键盘;将4个7段数码显示器显示的内容放在4个显存中,4个显存空间定义如下LED0 EQU30HLED1 EQU31HLED2 EQU32HLED3 EQU 33HORG 0000HLJMP MAINORG0003H;转入外部中断0服务程序入口LJMP INP0ORG0040HMAIN: MOV SP, #60HSETB EX0 ;开INT0中断SETB IT0 ;设置中断触发方式SETB EA ;开总中断MOV LED0, #0MOV LED1, #1MOV LED2, #2MOV LED3, #3START: MOV P0, #00H;使显示器不显示MOV P2, #0FFH;关闭显示器位选择码目的也是使显示器不显示MOV A, LED0LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序CLR P2.0;最后一位七段数码管显示LCALL DELAY ;少许延时目的是使得数码管更亮MOV P0, #00H;使显示器不显示MOV P2, #0FFH ;MOV A, LED1LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序CLR P2.1;倒数第二位七段数码管显示LCALL DELAYMOV P0, #00H;使显示器不显示MOV P2, #0FFH ;MOV A, LED2LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序CLR P2.2 ;倒数第三位七段数码管显示LCALL DELAYMOV P0, #00H;使显示器不显示MOV P2, #0FFH ;MOV A, LED3LCALL DISP0 ;调用将数值转换为显示段码并在P0端口输出的子程序CLR P2.3;倒数第四位七段数码管显示LCALL DELAYLJMP START ;跳回初始位置,使程序循环;;;;;;;;;;;;;;;;;;;;;;;;;;;中断程序INP0: CLR EAPUSH PSWPUSH ACCPUSH BJB P2.3, NP2 ;P2.3口输出低电平,扫描K0,K1,K2,K3SK0: JB P2.4, SK1 ;P2.4为高电平扫描K0LCALL OPRK0 ;P2.4为低电平执行K0对应子程序LCALL DELAY1 ;延时去除抖动LJMP SKLOOP ;重新循环扫描SK1: JB P2.5, SK2LCALL OPRK1LCALL DELAY1 ;延时去除抖动LJMP SKLOOPSK2: JB P2.6, SK3LCALL OPRK2LCALL DELAY1 ;延时去除抖动LJMP SKLOOPSK3: JB P2.7, NP2 ;换一次输出位LCALL OPRK3LCALL DELAY1 ;延时去除抖动LJMP SKLOOPNP2: JB P2.2, NP3 ;P2.2口输出低电平,扫描K4,K5,K6,K7 SK4: JB P2.4, SK5 ;P2.4为高电平扫描K5LCALL OPRK4 ;P2.4为低电平执行K5对应子程序LCALL DELAY1 ;延时去除抖动LJMP SKLOOP ;重新循环扫描SK5: JB P2.5, SK6LCALL OPRK5LCALL DELAY1 ;延时去除抖动LJMP SKLOOPSK6: JB P2.6, SK7LCALL OPRK6LCALL DELAY1 ;延时去除抖动LJMP SKLOOPSK7: JB P2.7, NP3 ;换一次输出位LCALL OPRK7LCALL DELAY1 ;延时去除抖动LJMP SKLOOPNP3: JB P2.1, NP4 ;P2.1口输出低电平,扫描K8,K9,KA,KB SK8: JB P2.4, SK9 ;P2.4为高电平扫描K8LCALL OPRK8 ;P2.4为低电平执行K8对应子程序LCALL DELAY1 ;延时去除抖动LJMP SKLOOP ;重新循环扫描SK9: JB P2.5, SKALCALL OPRK9LCALL DELAY1 ;延时去除抖动LJMP SKLOOPSKA: JB P2.6, SKBLCALL OPRKALCALL DELAY1 ;延时去除抖动LJMP SKLOOPSKB: JB P2.7, NP4 ;换一次输出位LCALL OPRKBLCALL DELAY1 ;延时去除抖动LJMP SKLOOPNP4: JB P2.0, SKLOOP;P2.0口输出低电平,扫描KC,KD,KE,KF SKC: JB P2.4, SKD ;P2.4为高电平扫描KCLCALL OPRKCLCALL DELAY1 ;延时去除抖动LJMP SKLOOP ;重新循环扫描SKD: JB P2.5, SKELCALL OPRKDLCALL DELAY1 ;延时去除抖动LJMP SKLOOPSKE: JB P2.6, SKFLCALL OPRKELCALL DELAY1 ;延时去除抖动LJMP SKLOOPSKF: JB P2.7, SKLOOP ;换一次输出位LCALL OPRKFLCALL DELAY1 ;延时去除抖动LJMP SKLOOPSKLOOP: POP BPOP ACCPOP PSWSETB EARETI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;子程序OPRK0: MOV P1, #00HSETB P1.0MOV LED3, #16MOV LED1, #1MOV LED0, #0RETOPRK1: MOV P1, #00HSETB P1.1MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #1RETOPRK2: MOV P1, #00HSETB P1.2MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #2RETOPRK3: MOV P1, #00HSETB P1.3MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #3RETOPRK4: MOV P1, #00HSETB P1.4MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #4RETOPRK5: MOV P1, #00HSETB P1.5MOV LED3, #16MOV LED2, #18MOV LED1, #1RETOPRK6: MOV P1, #00HSETB P1.6MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #6RETOPRK7: MOV P1, #00HSETB P1.7MOV LED3, #16MOV LED2, #18MOV LED1, #1MOV LED0, #7RETOPRK8: MOV P1, #00HSETB P1.0MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #0RETOPRK9: MOV P1, #00HSETB P1.1MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #1RETOPRKA: MOV P1, #00HSETB P1.2MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #2RETOPRKB: MOV P1, #00HSETB P1.3MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #3RETOPRKC: MOV P1, #00HSETB P1.4MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #4RETOPRKD: MOV P1, #00HSETB P1.5MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #5RETOPRKE: MOV P1, #00HSETB P1.6MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #6RETOPRKF: MOV P1, #00HSETB P1.7MOV LED3, #16MOV LED2, #18MOV LED1, #3MOV LED0, #7RETDELAY: MOV R6, #1;D2: MOV R7, #200;DJNZ R7, $ ;DJNZ R6, D2 ;RET ;DELAY1: MOV R2, #1D1: MOV R3, #200;D3: MOV R4, #200;DJNZ R4, $ ;DJNZ R3, D3 ;DJNZ R2, D1RETDISP0: MOV DPTR, #TABMOVC A, @A+DPTR ;将数值转换为显示段码MOV P0, A;将查得的段码显示RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;段码表TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H,80H,73H ; '0' '1' '2' '3' '4' '5' '6' '7' '8 ' '9' 'A' 'B' 'C' 'D' 'E' 'F' '-' '.' 'P'; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 END;结束程序。

相关文档
最新文档