矩阵键盘的设计

合集下载

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计矩阵键盘程序设计1.引言2.矩阵键盘的工作原理矩阵键盘由多行多列的按键组成,每个按键都与行线和列线相交。

当按下某一个按键时,行线和列线会形成一个闭合电路,通过这个闭合电路来传递按键的信号。

通过扫描行线和列线的状态,可以确定用户按下了哪个按键。

3.矩阵键盘的程序设计在程序设计中,需要初始化矩阵键盘的引脚配置,即将每个行线和列线连接到相应的引脚上。

然后,通过循环扫描行线和列线的状态,判断用户是否按下了某个按键。

一般情况下,矩阵键盘的扫描速度比较快,可以采用中断的方式来进行扫描,提高响应速度。

以下是一个简单的矩阵键盘程序设计示例:import RPi.GPIO as GPIO初始化引脚配置row_pins = [11, 13, 15, 16] 行引脚col_pins = [18, 22, 24, 26] 列引脚GPIO.setmode(GPIO.BOARD)设置行引脚为输出模式,列引脚为输入模式for pin in row_pins:GPIO.setup(pin, GPIO.OUT)for pin in col_pins:GPIO.setup(pin, GPIO.IN)循环扫描矩阵键盘while True:for row in row_pins:设置当前行引脚为低电平GPIO.output(row, GPIO.LOW)for col in col_pins:判断当前列引脚是否为高电平,即判断用户是否按下了某个按键if GPIO.input(col) == GPIO.HIGH:处理按键事件print(\。

矩阵键盘程序设计精简版

矩阵键盘程序设计精简版

矩阵键盘程序设计矩阵键盘程序设计引言矩阵键盘的工作原理矩阵键盘由多行和多列组成,每个按键位于特定的行和列交叉点上。

在未按下任何按键时,所有的行和列都处于高电平状态。

当按下某个按键时,该按键所在的行和列会产生短接,从而导致相应的行和列变为低电平。

为了检测按键的输入,矩阵键盘通常采用矩阵扫描的方式。

具体来说,它通过依次将一行置为低电平,然后读取相应的列的状态来判断是否有按键按下。

为了提高检测的精度,还可以采用定时器中断的方式来不断扫描键盘状态。

矩阵键盘程序设计示例下面是一个简单的矩阵键盘程序设计示例,使用Arduino开发板和Keypad库来实现。

在该示例中,我们假设矩阵键盘由3行4列组成,使用数字1-9和星号()作为按键。

cppinclude <Keypad.h>const byte ROWS = 3; // 定义行数const byte COLS = 4; // 定义列数char keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'}};byte rowPins[ROWS] = {9, 8, 7}; // 设置行引脚byte colPins[COLS] = {6, 5, 4, 3}; // 设置列引脚Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);void setup() {Serial.begin(9600); // 初始化串口通信}void loop() {char key = keypad.getKey(); // 读取按键if (key != NO_KEY) { // 判断是否有按键按下Serial.println(key); // 打印按下的按键到串口}delay(100); // 延时等待}在上述示例中,我们定义了矩阵键盘的行数和列数,并指定了每个按键的字符表示。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计矩阵键盘程序设计概述矩阵键盘是一种常见的输入设备,常用于电子产品和计算机系统中。

它由多个按键组成,采用矩阵排列的方式连接到计算机系统中。

在本篇文章中,我们将讨论矩阵键盘的程序设计。

程序设计步骤步骤一:硬件连接,我们需要将矩阵键盘与计算机系统进行连接。

通常情况下,矩阵键盘的每一行和每一列都通过引脚与计算机系统中的GPIO(通用输入输出)引脚相连接。

步骤二:引脚控制接下来,我们需要使用程序控制GPIO引脚的输入输出状态。

对于矩阵键盘而言,我们通常会将一行的引脚设置为输出,将一列的引脚设置为输入,然后将输出引脚设置为高电平,输入引脚设置为上拉或下拉电阻。

步骤三:按键扫描在第二步的基础上,我们可以进行按键的扫描操作。

具体方法是,先将某一行的引脚设置为低电平,然后读取每一列的引脚状态。

如果某一列引脚为低电平,则表示该按键被按下。

步骤四:按键处理一旦我们检测到某个按键被按下,就可以执行相应的按键处理操作。

这可能包括记录按键信息、执行某些特定的功能或触发一些事件。

步骤五:循环扫描,我们需要将以上步骤放入一个循环中进行不断的扫描。

这样可以实现对整个矩阵键盘的实时检测和响应。

示例代码下面是一个简单的矩阵键盘程序设计的示例代码,使用C语言编写:cinclude <stdio.h>include <wiringPi.h>define ROWS 4define COLS 4int rows[ROWS] = { 2, 3, 4, 5 };int cols[COLS] = { 6, 7, 8, 9 };char keyMap[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'', '0', '', 'D'}};void init() {wiringPiSetup();for (int i = 0; i < ROWS; i++) {pinMode(rows[i], OUTPUT);digitalWrite(rows[i], HIGH);}for (int i = 0; i < COLS; i++) {pinMode(cols[i], INPUT);pullUpDnControl(cols[i], PUD_UP);}}char getKey() {while (1) {for (int i = 0; i < ROWS; i++) {digitalWrite(rows[i], LOW);for (int j = 0; j < COLS; j++) {if (digitalRead(cols[j]) == LOW) { return keyMap[i][j];}}digitalWrite(rows[i], HIGH);}}}int mn() {init();while (1) {char key = getKey(); printf(\。

4×4矩阵键盘EDA设计

4×4矩阵键盘EDA设计
if(~nRST) KeyTmp1 <= 16'hffff;
else if(Clk4EN) begin
case(KeyOut) 4'b1110 : KeyTmp1[3:0] <= KeyDone;//扫描过程中消抖 4'b1101 : KeyTmp1[7:4] <= KeyDone; 4'b1011 : KeyTmp1[11:8] <= KeyDone; 4'b0111 : KeyTmp1[15:12] <= KeyDone; default : KeyTmp1 <= 16'hffff;//清零
2021/7/23
9
7/23/2021
硬件设计
8段数码管原理图
2021/7/23
11
硬件设计
2021/7/23
12
2021/7/23
软件设计
module matrix_keyboard(Clock,nRST,nEN,pEN,INT,KeyVal,KeyIn,KeyOut);
input
Clock;//系统时钟
KeyVal <= 8'hf2;
else if(pFlag[7])
KeyVal <= 8'hfa;
else if(pFlag[8])
KeyVal <= 8'hf9;
else if(pFlag[9])
KeyVal <= 8'hf6;
else if(pFlag[10])KeyVal <= 8'hf3;
else if(pFlag[11])KeyVal <= 8'hfb;
)

单片机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
矩阵键盘的电路设计
硬件电路设计
电源电路
为矩阵键盘提供稳定的电 源,确保按键的正常工作 。
按键电路
每个按键对应一个或多个 行列交叉点,通过检测行 和列的状态变化来确定按 键的按下状态。
输出电路
将按键信号输出到微控制 器或其他处理设备进行处 理。
软件编程设计
初始化程序
对矩阵键盘进行初始化设置,包 括设置扫描频率、去抖动时间等

矩阵式键盘设计实训报告

矩阵式键盘设计实训报告

一、实验目的1. 掌握矩阵式键盘的工作原理及电路设计方法。

2. 熟悉单片机与矩阵键盘的接口连接及编程技巧。

3. 提高动手实践能力,培养创新意识。

二、实验设备1. 单片机实验平台2. 矩阵键盘模块3. 数字多用表4. 编译器(如Keil51)5. 连接线三、实验原理矩阵键盘是一种常用的键盘设计方式,通过行列交叉点连接按键,从而实现多个按键共用较少的I/O端口。

矩阵键盘通常采用逐行扫描的方式检测按键状态,当检测到按键按下时,根据行列线的电平状态确定按键位置。

四、实验内容1. 矩阵键盘电路设计2. 矩阵键盘编程3. 矩阵键盘测试与调试五、实验步骤1. 电路设计(1)根据矩阵键盘的规格,确定行线和列线的数量。

(2)将行线和列线分别连接到单片机的I/O端口。

(3)在行线上串联电阻,防止按键抖动。

(4)连接电源和地线。

2. 编程(1)初始化单片机的I/O端口,将行线设置为输出,列线设置为输入。

(2)编写逐行扫描程序,逐行拉低行线,读取列线状态。

(3)根据行列线状态判断按键位置,并执行相应的操作。

3. 测试与调试(1)将编写好的程序下载到单片机中。

(2)连接矩阵键盘,观察按键是否正常工作。

(3)使用数字多用表检测行列线电平,确保电路连接正确。

(4)根据测试结果,对程序进行调试,直到矩阵键盘正常工作。

六、实验结果与分析1. 电路连接正确,按键工作正常。

2. 逐行扫描程序能够正确检测按键位置。

3. 按键操作能够触发相应的程序功能。

七、实验总结1. 通过本次实训,掌握了矩阵式键盘的工作原理及电路设计方法。

2. 熟悉了单片机与矩阵键盘的接口连接及编程技巧。

3. 提高了动手实践能力,培养了创新意识。

八、心得体会1. 在实验过程中,遇到了电路连接错误和程序调试困难等问题,通过查阅资料、请教老师和同学,最终成功解决了问题。

2. 本次实训让我深刻体会到理论知识与实际操作相结合的重要性,同时也认识到团队合作的重要性。

九、改进建议1. 在电路设计过程中,可以考虑增加去抖动电路,提高按键稳定性。

51单片机矩阵键盘设计

51单片机矩阵键盘设计

51单片机矩阵键盘设计
一、引言
AT89C51单片机矩阵键盘设计是嵌入式系统中一个重要的技术,它的
作用是以矩阵形式把外部按键与MCU相连,使得系统可以对外部的按键进
行检测和响应。

矩阵键盘设计在可编程嵌入式系统的设计中占有重要的地位,如智能交通系统、智能家居系统、航空电子系统等。

本文主要介绍了矩阵键盘设计中硬件电路的设计,包括按键、拉电阻、和矩阵编码等,同时给出系统的控制算法,使得系统可以实现有效的按键
检测和响应。

二、矩阵键盘概述
矩阵键盘是将多个按键排布成列行形式进行连接,一般来说,矩阵键
盘是由按键、拉电阻、矩阵编码器和控制器组成,按键是系统中重要的部件,其作用是将外部输入信号传递给控制器。

拉电阻起到的作用是防止按
键耦合,一般可以使用4.7KΩ拉电阻来防止按键耦合。

矩阵编码器用来
识别按键的状态,通常通过硬件把按键信号编码为数字信号,输入到处理
器或控制器。

控制器用来实现按键信号的检测,通过定义硬件定时器和软
件定时器,实现按键检测和处理。

1、硬件电路设计
应用AT89C51单片机矩阵键盘。

矩阵键盘及其电路设计

矩阵键盘及其电路设计

矩阵键盘及其电路设计
矩阵键盘是一种常见的输入设备,常用于计算机、电视机、手机等电
子产品中。

它由多个按键组成,每个按键都与一个矩阵电路相连。

矩阵键
盘的设计简单、成本低廉,因此在许多场景中广泛应用。

矩阵键盘的电路设计可以分为两个主要方面:行扫描电路和列扫描电路。

行扫描电路负责控制行通道。

它由多个行扫描引脚组成,每一个引脚
都与一个行通道相连。

通常情况下,行扫描电路会以一定的频率依次将每
一个引脚置高电平,然后检测列通道是否有相应的信号。

如果检测到信号,就说明用户按下了对应的按键。

通过依次扫描所有的行通道,可以获取用
户整个键盘的按键状态。

列扫描电路负责控制列通道。

它由多个列扫描引脚组成,每一个引脚
都与一个列通道相连。

当行扫描电路扫描到其中一行时,列扫描电路会检
测到该行通道与列通道之间的电位差。

如果电位差存在,则说明用户按下
了该行和列交叉点处的按键。

在实际的电路设计中,还可以使用连接电阻和电容的方式来降低电路
的噪声。

通过在矩阵键盘中添加适当的抗干扰电路,可以有效减少外界干
扰对键盘输入的影响。

总结起来,矩阵键盘的电路设计主要包括行扫描电路和列扫描电路。

通过行列通道的扫描和检测,可以判断用户所按下的按键。

在实际的设计中,还可以添加抗干扰电路来提高键盘的输入稳定性。

矩阵键盘的设计简
单且成本低廉,因此被广泛应用于各种电子产品中。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计一、介绍矩阵键盘是一种常见的输入设备,通常由多个行和列组成。

每个键都和一个特定的行列交叉点相连,通过检测行和列的连接状态来判断按下的是哪个键。

本文档将介绍如何设计一个基于矩阵键盘的程序。

二、硬件要求为了实现矩阵键盘程序,我们需要以下硬件设备:1-矩阵键盘:包括行和列连接点,每个键与一个特定行列连接。

2-微控制器:用于检测行列的连接状态,并处理按键输入。

3-连接线:连接矩阵键盘和微控制器的电缆。

三、程序设计步骤设计一个矩阵键盘程序的基本步骤如下:1-初始化:设置微控制器的输入输出引脚,并配置矩阵键盘的行列连接点。

2-扫描键盘:循环扫描每个连接点,判断是否有按键按下。

3-按键处理:如果有按键按下,触发相应的事件或执行相应的操作。

4-循环:重复进行扫描和处理,实现实时响应。

四、初始化设置在程序的启动阶段,需要进行初始化设置以准备矩阵键盘的使用。

1-设置输入输出引脚:将微控制器上的引脚设置为输入或输出模式,以便连接矩阵键盘和其他设备。

2-配置连接点:设置行和列的连接点,将矩阵键盘的每个键与特定的行列连接。

五、扫描键盘扫描矩阵键盘是检测按键状态的关键步骤。

1-选定一行:将矩阵键盘的行连接点设置为高电平,其他行连接点设置为低电平。

2-读取列状态:读取每一列连接点的状态,判断是否有按键按下。

3-判断按键:根据读取到的列状态,确定按下的是哪个键。

可以使用一个矩阵或查找表来管理键和行列交叉点之间的对应关系。

六、按键处理一旦检测到按键按下,程序需要触发相应的事件或执行相应的操作。

1-事件处理:例如,如果按下的是数字键,则触发相应数字的事件。

2-操作执行:例如,如果按下的是功能键,则执行相应的功能。

七、附件本文档涉及的附件包括以下内容:1-矩阵键盘的电路图:详细描述了键盘的连接方式和连接点的布局。

2-微控制器的引脚分配表:列出了微控制器上各个引脚与矩阵键盘的连接方式。

八、法律名词及注释1-版权:对于矩阵键盘的设计,可能涉及版权保护的内容,需要遵守相关法律法规。

基于S7-200PLC的矩阵式键盘设计

基于S7-200PLC的矩阵式键盘设计

基于S7-200PLC的矩阵式键盘设计1、引言与其它工业控制系统相比,PLC控制系统具有可靠性高、抗干扰能力强等突出优点,因而广泛应用于工业控制领域。

对于那些不必采用上位机监控+PLC现场控制的简易控制系统,操作面板的完善与否直接影响到整个系统的智能化程度高低。

对小型控制系统而言,在满足功能的前提下,高性价比一直是设计人员追求的目标,若采用触摸屏(如SIEMENS的TP270)+组态软件(如PROTOOL)的方式组成人机界面,势必使整个系统的性价比大为降低,因此,提出基于PLC 的矩阵式键盘设计方案具有较大的实际意义。

2、矩阵式键盘工作原理矩阵式键盘是相对于独立式键盘而言的,也叫行列式键盘,是当键数较多时为节省I/O点而采取的一种结构。

在微机系统中,矩阵式键盘的构成方式如图1所示。

图1矩阵式键盘结构图首先,判断整个键盘上有无键按下。

方法是:将列全输出为0,然后读入行的状态,如果行读入的状态全为1,则无键按下,不全为1则有键按下。

<BR>&nbsp; 其次,若有键按下则逐列扫描。

方法是:依次将列线送低电平0,检查对应行线的状态;若行线全为1,则按键不在此列;若不全为1,则按键必在此列,且是与0电平行线相交的那个键。

最后,确定键值,并进入键处理程序。

3、矩阵式键盘硬件设计在PLC系统中设计矩阵式键盘不仅要用到输入口,而且也要用到输出口,因此,了解PLC I/O口内部电路的结构以及工作原理是十分重要的。

下面以S7-200的DC输入、输出模块为例,简要说明其工作原理。

3.1 输入模块如图2所示,为PLC的DC输入模块,其中,K1-输入开关;M-公共端;I0.0-输入点;R1、R2的典型值为5.6K、1K。

图2 直流输入模块电路图工作原理:若输入开关K1闭合,则输入信号经RC滤波和光电隔离后,转换为PLC的CPU所需的电平(一般为5V),再经过输入选择器与CPU的总线相连,从而将外部输入开关的“ON”状态输入到PLC内部,此时输入指示灯亮,且与该输入点对应的输入映像寄存器为“1”。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计正文:1·引言矩阵键盘是一种常见的输入设备,常用于电子设备中,如计算器、电子字典、方式等。

本文档将介绍矩阵键盘的程序设计,包括键盘接口的设计、按键扫描的原理、按键事件的处理等方面的内容。

通过阅读本文档,读者将能够了解如何设计和实现一个矩阵键盘程序,并能够应用于各种电子设备中。

2·键盘接口设计2·1·硬件接口矩阵键盘通常采用行列编码方式进行连接。

具体接口设计需要考虑键盘的行列数目、接口类型、电压电流等因素,并根据具体需求进行设计。

2·2·软件接口在程序设计中,需要定义键盘接口的相关参数,包括行数、列数、引脚连接方式、行列位置等。

通过定义这些参数,可以方便地在程序中对键盘进行扫描和响应。

3·按键扫描原理3·1·按键矩阵矩阵键盘由多个按键组成,按键排列成N行M列的矩阵形式。

按键按下时,对应行列交叉点的电压发生变化,可以通过扫描行列电平的方式来检测按键的状态。

3·2·扫描方法按键扫描方法包括轮询扫描和中断扫描两种方式。

轮询扫描是通过循环扫描键盘的每个按键并检测按键状态,适用于实时性要求不高的场合。

中断扫描是通过中断信号来触发扫描和检测按键状态,适用于实时性要求高的场合。

4·按键事件处理4·1·按键状态检测通过扫描键盘可以获取每个按键的状态,一般分为按下和释放两种状态。

可以通过读取按键状态来判断是否有按键被触发。

4·2·按键事件处理当按键被触发时,需要进行相应的事件处理。

事件处理可以包括响应特定按键的功能、发送键值给其他模块等操作。

根据具体需求,可以采用不同的事件处理方式。

5·附件本文档的附件包括键盘接口设计图、示例代码和相关参考资料。

读者可以通过附件来深入了解和实践矩阵键盘的程序设计。

6·法律名词及注释本文档中所涉及的法律名词及注释如下:●版权:指对作品享有的复制、发行、展览、表演、放映、广播、信息网络传播、摄制、改编、翻译、编译等权利。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计矩阵键盘程序设计一、简介矩阵键盘是一种常见的输入设备,可以通过按下不同的按键来输入各种字符或执行特定的操作。

在本文档中,我们将介绍如何进行矩阵键盘的程序设计,包括矩阵键盘的原理、接口设计、按键扫描和按键处理等内容。

二、矩阵键盘原理矩阵键盘由多行和多列的按键组成,每个按键都相当于一个开关。

按下某个按键时,对应的行和列会产生一个接通信号,程序可以通过检测这个信号来判断哪个按键被按下。

三、接口设计在进行矩阵键盘程序设计之前,我们需要确定矩阵键盘与单片机之间的接口。

一般来说,矩阵键盘会采用行列交叉的方式进行接线,行引脚与单片机的输出端口相连,列引脚与单片机的输入端口相连。

四、按键扫描为了检测矩阵键盘是否有按键被按下,我们需要进行按键扫描。

按键扫描的原理是逐个地对每个按键进行检测,判断是否有按键被按下。

按键扫描的步骤如下:1. 将矩阵键盘的行引脚设置为输出模式,列引脚设置为输入模式;2. 逐个将行引脚置为低电平,检测列引脚的电平状态,如果某列引脚为低电平,则说明有按键被按下,记录下对应的行和列;3. 循环上述步骤,直到检测完所有的行和列。

五、按键处理在检测到按键被按下后,我们需要进行相应的按键处理。

按键处理的内容可以包括记录按键的值、执行特定的操作等。

按键处理的步骤如下:1. 根据记录的行和列信息,计算出对应的按键值;2. 根据按键值执行相应的操作,输入字符、调用某个函数等。

六、示例代码下面是使用C语言编写的一个简单的矩阵键盘程序示例:cinclude <stdio.h>// 矩阵键盘行列定义define ROWS 4define COLS 4// 矩阵键盘按键值定义char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'', '0', '', 'D'}};// 按键扫描函数char scan_key() {char key = 0;int row, col;// 设置行引脚为输出模式,列引脚为输入模式 // 逐个检测每个按键是否被按下for (row = 0; row < ROWS; ++row) { // 将当前行引脚置为低电平// 检测列引脚的电平状态// 有按键被按下key = keys[row][col];break;}}return key;}int mn() {char key_pressed;while (1) {key_pressed = scan_key();if (key_pressed != 0) {printf(\。

单片机矩阵键盘设计方案

单片机矩阵键盘设计方案

单片机矩阵键盘设计方案一、设计目标设计一个8行8列的矩阵键盘,每个按键都有一个唯一的键码,能够正常读取用户的按键输入,并将按键对应的键码显示在LCD屏幕上。

二、硬件设计硬件设计包括键盘电路和显示电路两部分。

1.键盘电路设计矩阵键盘的硬件设计主要包括键盘矩阵、行扫描电路和列读取电路。

键盘矩阵由8行8列的按键构成,每个按键都连接到一个由二极管组成的矩阵。

行扫描电路使用8位输出的GPIO口,根据行的值来选通对应的行组。

列读取电路使用8位输入的GPIO口,根据列的值来读取对应的列组。

2.显示电路设计三、软件设计软件设计主要包括初始化设置、按键检测、键码解析和显示处理四个部分。

1.初始化设置首先需要对GPIO口进行初始化设置,将扫描行的GPIO口设置为输出模式,将读取列的GPIO口设置为输入模式。

同时需要对LCD屏幕进行初始化设置,设置显示模式、光标位置等参数。

2.按键检测循环扫描每一行,当其中一行被选通时,读取每一列的值。

如果其中一列的值为低电平,则表示对应的按键被按下。

将按下的按键的行和列的值保存下来,用于后续的键码解析。

3.键码解析根据行和列的值,通过查表的方式找到对应的键码。

将键码保存下来,用于后续的显示处理。

4.显示处理将键码传送给LCD屏幕,通过LCD屏幕的驱动芯片进行解析和显示。

根据LCD屏幕的显示方式,可以选择逐行显示或者按需显示的方式。

四、优化设计在以上基本设计方案的基础上,可以进行一些优化设计,以提高系统的性能和可靠性。

1.消除按键抖动按键在实际使用中会存在抖动现象,需要通过软件滤波来消除。

可设置一个适当的延时,当检测到按键按下后,延时一段时间再进行键码解析,只有在延时之后仍然检测到按键按下,才认为是一个有效的按键。

2.防止冲突按键由于矩阵键盘的性质,可能存在一些按键组合会产生冲突的情况。

可以通过硬件设计和软件处理来解决。

在硬件上,可以增加二极管来隔离不同的按键。

在软件上,可以通过扫描算法和按键排除的方式来避免冲突。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计1.引言矩阵键盘是一种常见的输入设备,常用于电子设备、计算机和通信设备等系统中。

它具有结构简单、体积小、成本低廉等特点,因此在各种嵌入式系统中被广泛应用。

本文将介绍矩阵键盘的程序设计方法,包括按键扫描、数据解析以及与其他模块的交互等内容。

2.基本原理矩阵键盘由若干行和列的按键组成,每个按键连接到一个特定的电路。

当按键被按下时,会导通相应的行和列,形成一个矩阵。

通过逐次扫描每一行和列,可以检测到按键的按下情况。

矩阵键盘的基本原理是利用行列扫描来判断按键的输入状态。

3.按键扫描3.1 行扫描行扫描是矩阵键盘程序设计的重要步骤之一。

首先,将行的控制线置为高电平,并将列的控制线置为输入状态。

然后,逐个扫描每一行,检测列的输入状态。

如果某个列的输入状态发生变化,说明对应的按键被按下或释放。

3.2 列扫描列扫描是行扫描的补充,用来检测行的输入状态。

首先,将列的控制线置为高电平,并将行的控制线置为输入状态。

然后,逐个扫描每一列,检测行的输入状态。

如果某个行的输入状态发生变化,说明对应的按键被按下或释放。

4.数据解析在按键扫描的基础上,还需要进行数据解析以获取具体的按键值。

具体的解析方法可以根据矩阵键盘的布局和按键的位置进行设计。

一般来说,可以借助查找表或者简单的算法来实现。

5.与其他模块的交互矩阵键盘通常需要与其他模块进行交互,以实现特定的功能。

例如,可以通过串口与MCU或者计算机进行数据交互,实现键盘输入的数据传输。

同时,还可以通过中断或者定时器来实现按键的实时响应。

6.附件本文档涉及的附件包括示例代码、电路图、原理图等。

详细的附件内容请参考附件部分。

附件1: 示例代码附件2: 电路图附件3: 原理图7.法律名词及注释7.1 版权:指作品的作者或合法权利人对其创作的作品享有的专有权利,包括复制、发行、表演、展示等权利。

7.2 专利:指对于新的技术、新的产品或者新的设计提出的独占权,目的是保护创新者的权益。

44矩阵键盘课程设计

44矩阵键盘课程设计

44矩阵键盘课程设计一、课程目标知识目标:1. 理解44矩阵键盘的基本结构和工作原理;2. 学会使用矩阵键盘进行输入输出操作;3. 掌握矩阵键盘编程的基本方法。

技能目标:1. 能够正确连接并测试44矩阵键盘;2. 能够编写程序实现对矩阵键盘的扫描和按键识别;3. 能够运用矩阵键盘完成简单的交互式应用。

情感态度价值观目标:1. 培养学生动手实践、自主探究的学习习惯;2. 增强学生团队协作和问题解决的能力;3. 激发学生对电子技术和编程的兴趣,提高创新意识。

分析课程性质、学生特点和教学要求,本课程目标旨在让学生掌握44矩阵键盘的相关知识,通过实践操作和编程练习,使学生在知识、技能和情感态度价值观方面取得以下具体学习成果:1. 知识方面:学生能够阐述矩阵键盘的原理,解释其工作方式;2. 技能方面:学生能够独立完成矩阵键盘的连接、编程和应用;3. 情感态度价值观方面:学生通过课程学习,增强实践能力、团队协作能力和创新意识。

二、教学内容1. 矩阵键盘基础知识:- 矩阵键盘结构原理;- 矩阵键盘的输入输出方式;- 矩阵键盘与单片机的连接方法。

2. 矩阵键盘编程技术:- 按键扫描算法;- 按键识别与消抖;- 矩阵键盘编程实例。

3. 实践操作与项目应用:- 矩阵键盘连接与测试;- 基于矩阵键盘的简单计算器制作;- 创意电子项目设计与实现。

教学内容依据课程目标,结合教材章节,按照以下进度安排:1. 矩阵键盘基础知识(第1课时):- 介绍矩阵键盘的结构原理;- 讲解矩阵键盘与单片机的连接方法。

2. 矩阵键盘编程技术(第2-3课时):- 讲解按键扫描算法及消抖方法;- 分析矩阵键盘编程实例。

3. 实践操作与项目应用(第4-5课时):- 指导学生进行矩阵键盘的连接与测试;- 引导学生运用所学知识制作简单计算器;- 组织学生进行创意电子项目设计与展示。

教学内容科学系统,注重理论与实践相结合,旨在提高学生的综合应用能力。

三、教学方法针对本章节内容,采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:- 用于讲解矩阵键盘的基础知识和编程技术,通过清晰的讲解,使学生快速掌握基本概念和原理。

44矩阵键盘课程设计

44矩阵键盘课程设计

4 4矩阵键盘课程设计一、课程目标知识目标:1. 学生能够理解4x4矩阵键盘的基本原理,掌握其电路连接方式和扫描原理。

2. 学生能够运用所学知识,设计并搭建一个简单的4x4矩阵键盘电路。

3. 学生了解矩阵键盘在嵌入式系统中的应用和重要性。

技能目标:1. 学生能够运用编程软件(如Arduino)编写程序,实现对4x4矩阵键盘的扫描和按键识别。

2. 学生能够运用调试工具,对矩阵键盘电路进行故障排查和优化。

3. 学生具备团队协作能力,共同完成矩阵键盘电路设计和程序编写。

情感态度价值观目标:1. 学生通过动手实践,培养对电子技术和编程的兴趣,增强学习动力。

2. 学生在团队合作中,学会沟通、协作、分享,培养团队精神和责任感。

3. 学生认识到科技发展对社会进步的重要性,激发为我国科技事业贡献力量的志向。

本课程针对高中年级学生,结合电子技术和编程知识,以实用性为导向,旨在培养学生的动手实践能力和创新精神。

课程内容紧密联系课本知识,通过设计4x4矩阵键盘电路,使学生在实践中掌握相关原理和方法。

课程目标具体、可衡量,为后续教学设计和评估提供明确方向。

二、教学内容1. 矩阵键盘基础知识:介绍矩阵键盘的原理、电路连接方式及其在嵌入式系统中的应用。

- 相关章节:课本第三章第二节“矩阵键盘及其应用”2. 4x4矩阵键盘电路设计:讲解如何搭建4x4矩阵键盘电路,包括硬件连接、电路图绘制等。

- 相关章节:课本第三章第三节“矩阵键盘电路设计”3. 矩阵键盘编程:介绍如何使用Arduino编程软件编写程序,实现对4x4矩阵键盘的扫描和按键识别。

- 相关章节:课本第四章第一节“Arduino编程基础”及第四节“矩阵键盘编程实例”4. 矩阵键盘电路调试与优化:教授学生如何运用调试工具进行故障排查,以及如何对电路和程序进行优化。

- 相关章节:课本第五章“电路调试与优化”5. 团队合作与展示:学生分组进行项目实践,共同完成矩阵键盘电路设计与程序编写,并进行成果展示。

矩阵键盘程序设计

矩阵键盘程序设计

矩阵键盘程序设计1. 引言矩阵键盘是一种常见的输入设备,广泛应用于电脑、方式等各种电子设备中。

将介绍如何设计一个简单的矩阵键盘程序。

2. 程序设计思路矩阵键盘由多个按键组成,每个按键对应一个特定的字符或功能。

通常情况下,矩阵键盘是通过行列扫描的方式来检测按键的状态,即通过扫描每行和每列的电平来判断是否有按键被按下。

要设计一个矩阵键盘程序,需要确定矩阵键盘的行列数,然后通过相应的硬件电路将其连接到控制器上。

接下来,程序需要循环扫描每行和每列的电平,并记录下按下的按键。

根据按键的状态来执行相应的操作,输出对应的字符或执行特定的功能。

3. 硬件设计硬件设计主要包括确定矩阵键盘的行列数以及将其连接到控制器上的电路设计。

通常情况下,矩阵键盘的行使用输出电平,列使用输入电平。

在连接到控制器之前,还需要添加电阻和二极管来保护电路和消除反馈。

4. 软件设计软件设计主要包括程序的循环扫描和按键状态的处理。

可以使用循环来不断扫描每行和每列的电平,当检测到按键被按下时,记录下按键的位置信息。

接下来,根据按键的状态,进行相应的处理操作,输出对应的字符或执行特定的功能。

程序还需要处理按键的反弹,以避免误操作。

5. 示例代码以下是一个简单的矩阵键盘程序设计的示例代码,采用C语言编写:cinclude <stdio.h>include <stdbool.h>// 定义矩阵键盘的行列数define ROWS 4define COLS 4// 定义矩阵键盘的字符映射表char keys[ROWS][COLS] = {{'1', '2', '3', 'A'},{'4', '5', '6', 'B'},{'7', '8', '9', 'C'},{'', '0', '', 'D'}};// 定义矩阵键盘状态数组bool keyState[ROWS][COLS] = {0};// 矩阵键盘扫描函数void scanKeyboard() {// 扫描行for (int row = 0; row < ROWS; row++) {// 将当前行的输出电平设置为低电平setRowLow(row);// 扫描列for (int col = 0; col < COLS; col++) {// 检测当前列的输入电平if (getColLevel(col)) {// 当检测到按键被按下时,更新按键状态 keyState[row][col] = true;} else {// 当检测到按键未按下时,更新按键状态 keyState[row][col] = false;}}// 将当前行的输出电平恢复为高电平setRowHigh(row);}}int mn() {while (1) {// 扫描矩阵键盘scanKeyboard();// 处理按键状态for (int row = 0; row < ROWS; row++) {for (int col = 0; col < COLS; col++) {// 检测到按键被按下时,输出对应的字符if (keyState[row][col]) { printf(\。

FPGA矩阵键盘课程设计

FPGA矩阵键盘课程设计

逻辑仿真与调试
调试工具:使用调试工具对 FPGA矩阵键盘进行调试, 找出并解决设计中的问题
逻辑仿真:使用仿真软件对 FPGA矩阵键盘进行逻辑仿 真,验证设计是否正确
仿真结果分析:分析仿真结 果,找出设计中存在的问题,
并进行修改
调试结果分析:分析调试结 果,找出设计中存在的问题,
并进行修改
FPGA矩阵键盘驱动程序开 发
FPGA矩阵键盘软件设计
软件算法设计
键盘扫描算法:实现键盘矩阵的 扫描和按键检测
键值转换算法:将扫描到的键值 转换为对应的字符或功能键
键盘响应算法:处理键盘输入, 实现按键响应和功能键处理
键盘驱动程序设计:实现键盘的 驱动程序,支持键盘的初始化、 扫描、键值转换和响应等功能
VHDL/Verilog语言实现
FPGA芯片:选择合适的 FPGA芯片,如Xilinx或 Altera
驱动电路:设计键盘驱动电 路,如LED背光、按键反馈

电源管理:设计电源管理电 路,如电源输入、电源转换

硬件调试:进行硬件调试, 确保键盘功能正常
元器件选型
FPGA芯片:选择合适的 型号和品牌,如Xilinx、 Altera等
游戏机中的矩阵键盘用于控制游戏 角色或操作游戏界面
矩阵键盘可以提高游戏操作的准确 性和响应速度
添加标题
添加标题
添加标题
添加标题
矩阵键盘可以提供多种按键组合, 实现复杂的游戏操作
矩阵键盘在游戏机中的使用可以提 高用户体验和游戏乐趣
矩阵键盘在医疗设备中的应用
矩阵键盘可以提供多种功能, 如输入密码、选择菜单、调 整参数等
未来发展方向与展望
技术发展趋势:FPGA技术的不断发展和更新,如更高性能、更低功耗等 应用领域拓展:FPGA在更多领域的应用,如人工智能、物联网等 课程设计优化:课程设计的不断优化和完善,提高教学质量和效果
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要本实验是在基于PROTUES平台下,运用 80C51芯片编写程序设计实现的矩阵式键盘。

通过对矩阵键盘的硬件电路的设计及对其进行程序汇编和运行,通过单片机的内部控制实现对硬件电路的设计,从而实现对4×4矩阵键盘的识别。

用单片机的并行P1口连接4×4矩阵键盘,并以单片机的P1.0-P1.3口作键盘输入的列线,以单片机的P1.4-P1.7口作为键盘输入的行线,然后用P0.0-P0.6作输出线,通过上拉电阻在显示器上显示不同的符号按键“0-F”。

在硬件电路的基础上加上软件程序的控制来设计实现。

其工作过程为:先判断是否有键按下,如没有键按下,则继续扫描整个程序,如有键按下,就识别是哪一个键按下,最后通过显示器把该键所对应的键的序号显示出来。

关键词:80C51芯片;4×4矩阵;键盘识别;显示器目录1 问题描述................................ 错误!未定义书签。

2 设计原理................................ 错误!未定义书签。

2.1电路硬件说明......................... 错误!未定义书签。

2.2矩阵式键盘的工作过程 (2)2.3程序设计内容 (2)2.4硬件电路设计及其电路图 (2)3 程序说明及其流程图 (3)3.1程序系统 (3)3.2判别是否有键按下程序 (4)3.3识别哪个键按下程序 (6)3.4显示程序 (7)3.5延时程序 (8)4 仿真结果分析 (9)5 汇编程序 (12)6 课程设计总结与体会 (16)参考文献资料1 问题描述(1)设计一个4×4矩阵式键盘,以实现矩阵式键盘的程序识别。

(2)用单片机的并行口P1连接4×4矩阵键盘,并以单片机的P1.0-P1.3各管脚作输入线,以单片机的P1.4-P1.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。

键盘中对应按键的序号排列如下图图1.1 键盘序号图2 设计原理2.1 电路硬件说明(1)在“单片机系统”区域中,把单片机的P1.0-P1.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。

即将P1口作为整个系统的输入接口电路。

(2)在“单片机系统”区域中,把单片机的P0.0-P0.6端口通过上拉电阻连接到“静态数码显示模块”区域中的任何一个a-g端口上;作为整个系统的并且P0.0对应着a,P0.1对应着b,……,P0.6对应着g。

(3)此实验采用的是共阴极LED显示块,只有当a-g端口输入高电平时才有效,即显示块中的对应的发光二极管才发光,低电平时不显示,通过a-g端口的不同输入使显示器显示不同的字符。

(4)系统中的上拉电阻RP1和RP2是限流电阻,起到限流的作用,阻值一般在100-300欧姆之间。

2.2 矩阵式键盘的工作原理(1)CPU先使行线平P1.4线为低,其余行线P1.5-P1.7为高,即P1.4所在的行线为“0”状态,其余行为“1’状态。

(2)CPU读入输入缓冲器的状态,以确定哪条列线为“0”状态,此时,若P1.0为“0”状态,则为0键按下;若P1.1为“0”状态,则为“1”键按下;以此类推。

(3)若输入缓冲器的状态全部为“1”状态,则CPU继续使使行线P1.5为低,其余行线为高。

再读入输入缓冲器的状态,以确定那条列线为“0”状态,从而判断是哪个键压下。

(4)判断出哪个键压下之后,程序转入相应的键处理程序2.3 程序设计内容(1)4×4矩阵键盘识别处理。

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

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

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

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

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

2.4 硬件电路设计及电路图硬件电路设计图如下图所示。

把单片机的P1.0-P1.7端口通过8联拨动拨码开关连接到“4×4行列式键盘”,其中P1.0-P1.3作为列线,P1.4-P1.7作为行线,把单片机的P0.0-P0.6端口连接到共阴极“静态数码显示模块”区域中对应的a-g端口上;系统首先通过CPU对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推。

如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。

最后通过显示程序将该键的序号显示出来。

图2.1 硬件电路图3 程序说明及其流程图3.1系统程序(1)说明:该图是一个总的系统框图,首先CPU读入初始状态,CPU先让某一行线为低,其他行线为高,同时列线都为高,通过对按键进行扫描,也就是通过按键后判断列线是否为0来判断是否有键按下,有的话就继续执行程序识别判断是哪个键按下,然后通过P0口查询显示该数符,如果没有按键按下就返回程序继续扫描直到有键按下时才停止扫描。

(2)流程图3.2 判别是否有键按下程序(1)说明:该图表示的是将P1口置初值为FFH,MOV P1,#0FFH,然后CLR P1.4,通过读入输入缓冲器的状态,通过屏蔽A的高四位后和0FH进行异或来判断赋值为0的这一行是否有键按下,如无键按下,重置P1为FFH,CLR P1.5,如仍无键按下,就依次CLR P1.6、 CLR P1.7。

直到有键按下,为去抖动,就延时10ms,再次确认是否真的有键按下,如果是的话就根据当前状态识别按键。

如一次全部的扫描仍没有键按下,就回到开始处继续扫描。

(2)流程图3.3 识别哪个键按下程序(1)说明:本图是以第2行有键按下时判哪一个键按下的流程图为例的。

当将第二行的行线置为0,其余行线置于1的情况下,读入输入缓冲器的状态,不为全0,则说明该行有键按下,此时就可以将A的值送给P1,屏蔽A的高四位,依次与OEH、0BH、0DH、07H进行比较来确定按下的键号是4、5、6还是7,然后送至P0口显示。

执行完显示程序后再转向程序的开始处(2)流程图(1)说明:判断有键按下并且识别出是哪个键按下时,接着就通过显示程序将其通过数码管显示出来。

该实验用的是查表程序来实现相应键的显示的。

将定义字伪指令地址赋给DPTR ,通过指令 MOVC A,@A+DPTR 查到对应字符的显示码送给A ,再由A 送给P0,最后由显示器显示出来。

显示器字形与字段的对应关系如下:表3.1 显示器字形与字段对应关系表(1)说明:为防止抖动,使键盘识别失误,于是我们运用一个10ms的延时程序使之产生10ms的定时,对键盘再一次进行扫描,检查键盘的状态,当两次扫描到键位上有键按下时CPU才做处理。

此延时程序是通过双重循环结构实现延时的。

其汇编程序如下:DELAY10MS:MOV R6,#10D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RET其延时的时间计算过程为:设其晶振频率为6MHZ,则其机器周期为2us,又上述指令均为双周期指令,因而,T=4+(4+10×4)×248+4=10920us≈10ms(2)流程图4 仿真结果及分析(1)在proteus中设计好实验电路后,然后在proteus编程环境中进行程序设计和编译,生成HEX文件并加载HEX文件,点启动,运行仿真。

由于开始时P0口的值被赋为00H,P1口的值为FFH,当无键按下时,将P1.4口置0,再将P1口的值送A,屏蔽高4位,与0F相异或后,A的值变为0,即第0行没有键按下,转入NOKEY0子程序中,重新赋值P1口的值为FFH,将P1.5口置0后送A,屏蔽高4位,与0F相异或后,A的值又变为0,即第1行没有键按下,转入NOKEY1子程序中,同理,可以得知第2行和第3行也没有键按下。

因而,P0口没有被重新赋值,保持为00H不变,又显示器是共阴极的,此时P0.0-P1.6口均为“0”,即“a-g”段均不显示,从而显示器不显示,并转向程序的开始继续循环扫描键盘,直到有键按下为止。

观察到显示器中的显示现象如下:图4.1(2)当按下第六个键时,开始时P0口的值被赋为00H,P1口的值为FFH,将P1.4口置0,再将P1口的值送A,屏蔽高4位,与0F相异或后,A的值变为0,即第0行没有键按下,转入NOKEY0子程序中,重新赋值P1口的值为FFH,将P1.5口置0后送A,屏蔽高4位,与0FH相异或后,由于第一行有键按下,此时,A的值不为1,为了防止抖动,进入10ms的定时程序后再重新确认一次,是否真的有键按下,当重新确认后,A的值仍不为1,说明确实有键按下,然后将P1的值送A,屏蔽高4位,将A与0EH比较,判断其是否等于0EH相等,由于此时的A等于0DH,即两者不相等,程序转向NEXT5,与0DH比较,相等把5送给key,进入显示程序,将key值送给A,通过查表程序的查表参数查找其对应值06H并送给P0,通过P0口控制显示器,此时P0口的值为01101101B,对应着显示器的a、c、d、f、g段显示,其余段不显示,从而显示为“5”。

接着又转向程序的最开始处继续进行扫描。

观察到显示器中的显示现象如下:图4.2同理,当按下第十个键时,观察到显示器中的显示现象如下:图4.3以此类推,当按下最后一个键时,观察到显示器中显示的数码为“F”。

总之,当按下相应的键时,显示器上对应的显示数符“0-F”,从而实现了对键盘的识别。

5 汇编程序KEY EQU 30HORG 0000H ;入口地址SJMP STARTSTART:MOV P0,#00HJIXU:MOV P1,#0FFH ;判第0行是否有键按下CLR P1.4 ;将P1.4清零MOV A,P1ANL A,#0FH ;屏蔽高4位XRL A,#0FHJZ NOKEY0 ;A为0,转向NOKEY0 LCALL DELAY10MS ;延时,去抖动MOV A,P1 ;再确认一次ANL A,#0FHXRL A,#0FHJZ NOKEY0 ;A为0,转向NOKEY0 MOV A,P1 ;判哪一个键按下ANL A,#0FHCJNE A,#0EH,NEXT1MOV KEY,#0LJMP OK ;转向显示程序NEXT1:CJNE A,#0DH,NEXT2MOV KEY,#1LJMP OKNEXT2:CJNE A,#0BH,NEXT3MOV KEY,#2LJMP OKNEXT3:CJNE A,#07H,NOKEY0MOV KEY,#3LJMP OKNOKEY0:MOV P1,#0FFH ;判第1行是否有键按下CLR P1.5 ;将P1.5清零MOV A,P1ANL A,#0FH ;屏蔽高4位XRL A,#0FHJZ NOKEY1 ;A为0,转向NOKEY1 LCALL DELAY10MS ;延时,去抖动MOV A,P1 ;再确认一次ANL A,#0FHXRL A,#0FHJZ NOKEY1 ;A为0,转向NOKEY1 MOV A,P1 ;判哪一个键按下ANL A,#0FHCJNE A,#0EH,NEXT5MOV KEY,#4LJMP OKNEXT5:CJNE A,#0DH,NEXT6MOV KEY,#5LJMP OKNEXT6:CJNE A,#0BH,NEXT7MOV KEY,#6LJMP OKNEXT7:CJNE A,#07,NOKEY1MOV KEY,#7LJMP OKNOKEY1:MOV P1,#0FFH ;判第2行是否有键按下CLR P1.6 ;将P1.6清零MOV A,P1ANL A,#0FH ;屏蔽高4位XRL A,#0FHJZ NOKEY2 ;A为0,转向NOKEY2LCALL DELAY10MS ;延时,去抖动MOV A,P1 ;再确认一次ANL A,#0FHXRL A,#0FHJZ NOKEY2 ;A为0,转向NOKEY2 MOV A,P1 ;判哪一个键按下ANL A,#0FHCJNE A,#0EH,NEXT9MOV KEY,#8SJMP OKNEXT9:CJNE A,#0DH,NEXT10MOV KEY,#9SJMP OKNEXT10:CJNE A,#0BH,NEXT11MOV KEY,#10SJMP OKNEXT11:CJNE A,#07,NOKEY2MOV KEY,#11SJMP OKNOKEY2:MOV P1,#0FFH ;判第2行是否有键按下CLR P1.7 ;将P1.6清零MOV A,#P1ANL A,#0FH ;屏蔽高4位XRL A,#0FHJZ NEXT16 ;A为0,转向NEXT16 LCALL DELAY10MS ;延时,去抖动MOV A,P1 ;再确认一次ANL A,#0FHXRL A,#0FHJZ NEXT16 ;A为0,转向NEXT16 MOV A,P1 ;判哪一个键按下ANL A,#0FHCJNE A,#0EH,NEXT13MOV KEY,#12SJMP OKNEXT13:CJNE A,#0DH,NEXT14MOV KEY,#13SJMP OKNEXT14:CJNE A,#0BH,NEXT15MOV KEY,#14SJMP OKNEXT15:CJNE A,#07H,NEXT16MOV KEY,#15SJMP OKNEXT16:LJMP JIXUOK:MOV A,KEY ;查表显示MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ALJMP JIXUDELAY10MS:MOV R6,#10 ;延时D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HEND6 课程设计的总结与体会回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这一章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。

相关文档
最新文档