MCS-51单片机与矩阵键盘接口设计

合集下载

51单片机矩阵键盘原理

51单片机矩阵键盘原理

51单片机矩阵键盘原理51单片机矩阵键盘原理矩阵键盘是一种常用的输入设备,可以通过少量的I/O口控制多个按键。

51单片机作为嵌入式系统中常用的控制器,也可以通过控制矩阵键盘来实现输入功能。

1. 矩阵键盘的结构矩阵键盘由多个按键组成,每个按键都有一个引脚与其他按键共用,形成了一个按键矩阵。

例如,4x4的矩阵键盘有16个按键,其中每行和每列各有4个引脚。

2. 矩阵键盘的工作原理当用户按下某一个按键时,该按键所在行和列之间会形成一个电路通路。

这时,51单片机可以通过扫描所有行和列的电路状态来检测到用户所按下的具体按键。

具体实现过程如下:(1)将每一行引脚设置为输出状态,并将其输出高电平;(2)将每一列引脚设置为输入状态,并开启上拉电阻;(3)逐一扫描每一行引脚,当发现某一行被拉低时,则表示该行对应的某一个按键被按下;(4)记录下该行号,并将该行引脚设置为输入状态,其余行引脚设置为输出状态;(5)逐一扫描每一列引脚,当发现某一列被拉低时,则表示该列对应的是刚才所记录下的行号及其对应的按键;(6)通过行号和列号确定具体按键,并进行相应的处理。

3. 代码实现下面是一个简单的51单片机矩阵键盘扫描程序:```c#include <reg52.h> //头文件sbit row1 = P1^0; //定义引脚sbit row2 = P1^1;sbit row3 = P1^2;sbit row4 = P1^3;sbit col1 = P1^4;sbit col2 = P1^5;sbit col3 = P1^6;sbit col4 = P1^7;unsigned char keyscan(void) //函数定义{unsigned char keyvalue; //定义变量while(1) //循环扫描{row1=0;row2=row3=row4=1; //设置行状态 if(col1==0){keyvalue='7';break;} //读取按键值 if(col2==0){keyvalue='8';break;}if(col3==0){keyvalue='9';break;}if(col4==0){keyvalue='/';break;}row2=0;row1=row3=row4=1;if(col1==0){keyvalue='4';break;}if(col2==0){keyvalue='5';break;}if(col3==0){keyvalue='6';break;} if(col4==0){keyvalue='*';break;}row3=0;row1=row2=row4=1; if(col1==0){keyvalue='1';break;} if(col2==0){keyvalue='2';break;} if(col3==0){keyvalue='3';break;} if(col4==0){keyvalue='-';break;}row4=0;row1=row2=row3=1; if(col1==0){keyvalue='C';break;} if(col2==0){keyvalue='0';break;} if(col3==0){keyvalue='=';break;} if(col4==0){keyvalue='+';break;}}return keyvalue; //返回按键值}void main() //主函数{unsigned char key;while(1) //循环读取{key = keyscan(); //调用函数}}```以上代码实现了一个简单的矩阵键盘扫描程序,可以通过调用`keyscan()`函数来获取用户所按下的具体按键值。

MCS-51单片机矩阵式键盘接口程序设计

MCS-51单片机矩阵式键盘接口程序设计

MCS-51单片机矩阵式键盘接口程序设计
彭波
【期刊名称】《电脑知识与技术:学术版》
【年(卷),期】2006(0)12X
【摘要】本文介绍了MCS-51单片机中所使用得键盘的基本概念,并阐述了矩阵式键盘接口的程序设计方法。

【总页数】2页(P125-126)
【关键词】单片机;键盘
【作者】彭波
【作者单位】苏州经贸职业技术学院
【正文语种】中文
【中图分类】TP368.11
【相关文献】
1.基于MCS-51单片机的PS/2模拟键盘接口的设计研究 [J], 李克讷;蔡炳煌;刘兰兰
2.用8155作为单片机的键盘与显示接口及程序设计 [J], 苏明
3.MCS-51单片机系统键盘与显示器接口的一种设计 [J], 邵思飞
4.实用单片机讲座:手把手教你学单片机(十四)——单片机的键盘接口技术 [J], 周兴华
5.基于MCS-51的矩阵式键盘扫描程序编写难点的克服 [J], 王琳
因版权原因,仅展示原文概要,查看原文内容请购买。

基于51单片机4乘4矩阵键盘的设计

基于51单片机4乘4矩阵键盘的设计
case 0xbd:KEY=6;break;
case 0x7d:KEY=7;break;
case 0xeb:KEY=8;break;
case 0xdb:KEY=9;break;
case 0xbb:KEY=10;break;
case 0x7b:KEY=11;break;
case 0xe7:KEY=12;break;
控制任务:
编程实现4乘4的矩阵键盘控制连接在P0口和P1口上的16个LED,当按下某键并释放后只有对应的LED灯亮,例如按S0后D0亮,按S1后D1亮。
程序及仿真:
#include<reg51.h>
unsigned char code led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
b=P2;
a=a|b;
switch(a)
{
case 0xee:KEY=0;break;
case 0xde:KEY=1;break;
case 0xbe:KEY=2;break;
case 0x7e:KEY=3;break;
case 0xed:KEY=4;break;
case 0xdd:KEY=5;break;
{
P0=0xff;
P1=led[n-8];
}}
int main(void)
{
whilsplay(KEY);
}
return 0;
}
更多资源,请关注微博“风竹弈星”,私聊。
unsigned char KEY=0xff;
void keyscan(void)
{
unsigned char a,b;
P2=0xf0;//高四位作为输入(高电平),低四位输出低电平

第5章 MCS–51单片机的接口与应用 99页 5.8M

第5章  MCS–51单片机的接口与应用 99页 5.8M

(1) 用键盘连接的I/O线的二进制组合表示键码。例如用4行、
4列线构成的16个键的键盘,可使用一个8位I/O口线的高、低4 位口线的二进制数的组合表示16个键的编码,如图5.4(a)所示。 各键相应的键值为88H、84H、82H、81H、48H、44H、42H、 41H、28H、24H、22H、21H、18H、14H、12H、11H。这种键 值编码软件较为简单直观,但离散性大,不便安排散转程序的 入口地址。
第5章 MCS–51单片机的接口与应用 JNB ACC.2,K2 JNB ACC.3,K3 JNB ACC.4,K4 JNB ACC.5,K5 JNB ACC.6,K6 ;检测2号键是否按下,按下转 ;检测3号键是否按下,按下转 ;检测4号键是否按下,按下转 ;检测5号键是否按下,按下转 ;检测6号键是否按下,按下转
;0号键功能程序
;0号键功能程序执行完返回 ;0号键功能程序
JMP START
……………………… PROM7: ……………………… JMP START …
;1号键功能程序执行完返回
;7号键功能程序 ;7号键功能程序执行完返回
第5章 MCS–51单片机的接口与应用
5.1.4 行列式键盘
行列式键盘又叫矩阵式键盘。用I/O口线组成行、列结构, 按键设置在行列的交点上。例如4×4的行列结构可组成16个键 的键盘。因此,在按键数量较多时,可以节省I/O口线。 1.行列式键盘的接口 行列式键盘的接口方法有许多,例如直接接口于单片机的 I/O口上;利用扩展的并行I/O接口;用串行口扩展并行I/O口接 口;利用一种可编程的键盘、显示接口芯片8279进行接口等。 其中,利用扩展的并行I/O接口方法方便灵活,在单片机应用系
MOVX @DPTR,A

51单片机矩阵键盘原理

51单片机矩阵键盘原理

51单片机矩阵键盘原理介绍在嵌入式系统中,矩阵键盘是一种常见的输入装置。

51单片机是广泛使用的一种微控制器,结合矩阵键盘可以实现各种应用。

本文将详细介绍51单片机矩阵键盘的原理及其工作方式。

什么是矩阵键盘?矩阵键盘是将一组按钮布置成矩阵形式,以减少输入引脚的数量。

每个按钮在矩阵键盘中都会被分配一个坐标,通过扫描行和列,可以确定用户按下的是哪个按钮。

51单片机的输入输出结构51单片机具有强大的输入输出能力,可以连接各种外设。

在使用矩阵键盘时,通常使用IO口进行输入和输出操作。

矩阵键盘的接线方式将矩阵键盘与51单片机连接时,需要将键盘的行和列引脚分别连接到单片机的IO 口。

通过对行进行扫描,再根据列的输入状态判断按钮是否按下。

这种接线方式可以大大减少所需的IO口数量。

矩阵键盘的扫描原理矩阵键盘的扫描原理是通过不断扫描行并读取列的状态来判断按钮是否按下。

具体步骤如下: 1. 将所有行引脚设为输出,输出高电平。

2. 逐个扫描行,将当前行引脚设为低电平。

3. 读取所有列引脚的状态,如果有低电平表示有按钮按下。

4. 如果有按钮按下,则根据行和列的坐标确定按下的按钮。

51单片机矩阵键盘的实现以下是使用51单片机实现矩阵键盘的基本步骤: 1. 将行和列引脚连接到单片机的IO口。

2. 初始化IO口的状态。

3. 在主程序中进行循环扫描,根据扫描结果执行相应的操作。

优化矩阵键盘的扫描速度为了提高矩阵键盘的扫描速度,可以采用以下优化方法: 1. 使用硬件定时器来定时扫描行,减少CPU的负载。

2. 使用中断方式处理按键事件,从而减少程序中的轮询操作。

3. 将矩阵键盘的行和列布局进行优化,减少扫描的时间复杂度。

利用矩阵键盘实现密码输入矩阵键盘广泛应用于密码输入功能。

通过将矩阵键盘与51单片机结合,可以实现密码的输入、验证等功能。

以下是一个简单的密码输入的实现步骤: 1. 设置一个密码数组用于存储密码。

2. 使用矩阵键盘获取用户输入的密码,并依次存储到临时数组中。

MCS-51与键盘.ppt

MCS-51与键盘.ppt
扫描键盘。
工作过程:
(1)在键盘扫描子程序中,先判断有无键按下。
方法:PA口8位输出全0,读PC口低4位状态,若PC0~ PC3为全1,则说明键盘无键按下;若不全为1,则说明 键盘可能有键按下。
2020/10/22
(2)用软件来消除按键抖动的影响。如有键按下,则 进行下一步。 (3)求按下键的键号。 (4)等待按键释放后,再进行按键功能的处理操作。 2. 定时扫描工作方式
LJMP PKEY3
;S3按下,转PKEY3处理
KEY4: CJNE A,#17H,KEY5 ;S4键未按下,转KEY5
LJMP PKEY4
;S4按下,转PKEY4处理
KEY5: CJNE A,#0FH,PASS ;S5未按下,转RETURN
LJMP PKEY5
;S5按下,转PKEY5处理
RETURN:RET
2020/10/22
识别键盘有无键被按下的方法,分两步进行:
第1步:识别键盘有无键按下; 第2步:如有键被按下,识别出具体的按键。
把所有列线置0,检查各行线电平是否有变化,如 有变化,说明有键按下,如无变化,则无键按下。
上述方法称为扫描法,即先把某一列置低电平, 其余各列为高电平,检查各行线电平的变化,如果某 行线电平为低,可确定此行列交叉点处的按键被按 下。 b. 线反转法
MOV A,#00H
;0行有键闭合,首键号0→A
AJMP LKP
;跳LKP,计算键号
LONE:JB Acc.1,LTW0 ;1行线为高,无键闭合,跳LTW0,
1.动态显示程序设计 8031内部RAM 6个显示缓冲单元:79H~7EH,存
放要显示的6位数据。 8155H的PB口输出相应位的段码,依次改变PA口

单片机矩阵按键课程设计

单片机矩阵按键课程设计

单片机矩阵按键课程设计一、课程目标知识目标:1. 学生能理解单片机矩阵按键的基础知识,掌握矩阵按键的原理及其在电路中的应用。

2. 学生能描述单片机I/O口操作方法,并运用此知识实现矩阵按键的编程控制。

3. 学生能解释并运用行、列扫描法进行按键识别,实现按键的消抖处理。

技能目标:1. 学生能够独立完成矩阵按键电路的连接,并进行调试。

2. 学生能够运用所学知识,编写程序实现矩阵按键的扫描与功能分配。

3. 学生能够通过实验,分析和解决矩阵按键编程过程中遇到的问题。

情感态度价值观目标:1. 学生培养对单片机技术的兴趣,增强对电子工程领域的认识。

2. 学生在学习过程中,培养解决问题的耐心和毅力,树立团队协作意识。

3. 学生能够认识到单片机技术在现实生活中的应用价值,增强创新实践能力。

课程性质:本课程为实践性较强的电子技术课程,要求学生在掌握理论知识的基础上,注重动手实践。

学生特点:学生具备一定的单片机基础知识,对电子技术有较高的兴趣,但编程和动手能力参差不齐。

教学要求:结合学生特点,课程注重理论与实践相结合,充分调动学生的积极性,提高学生的动手能力和创新能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面均有所提升。

二、教学内容1. 矩阵按键原理:介绍矩阵按键的电路结构、工作原理以及其在单片机系统中的应用。

- 教材章节:第二章第二节《矩阵键盘的工作原理》2. 单片机I/O口操作:回顾并加深理解单片机I/O口的基本操作,为矩阵按键编程打下基础。

- 教材章节:第一章《单片机基础》3. 行列扫描法:讲解如何运用行列扫描法进行按键识别,包括消抖处理方法。

- 教材章节:第二章第三节《矩阵键盘的编程方法》4. 矩阵按键编程实践:指导学生编写程序,实现矩阵按键的扫描与功能分配。

- 教材章节:第二章第四节《矩阵键盘应用实例》5. 电路连接与调试:学生动手实践,完成矩阵按键电路的连接,并进行调试。

- 教材章节:实验指导书《矩阵键盘实验》6. 问题分析与解决:针对编程和调试过程中遇到的问题,引导学生进行分析和解决。

51单片机矩阵键盘设计

51单片机矩阵键盘设计

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

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCS-51单片机与矩阵键盘接口设计
线性(独立)键盘:采用多个IO口,每个IO口接一个按 键。优点是编程简单、可靠,缺点是IO口占用过多。
D N G SW-PBSW-PBSW-PBSW-PB VCC VCCVCC 19876543212345678900 33333333322222222234 VCC PSEN P2.0/A8P2.1/A9 EA/VPP P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 U(AT/STC/SST)89(S/C)5X 09876234510 912345678 11111111112 K 21 0 p R1C0.1uFREST 9 2 C2 D N VCC G D 1 N X G 12-40M p 8 52 SC2 RESET
;无键按下
keydown:mov a,#00010000b;有键按下,进行列查找
next2:
mov 34h,31h
anl 34h,a
rl a
mov r3,34h
cjne r3,#0,find
djnz r1,next2
find:
mov a,#4
;找到后处理键值
subb a,r0
mov 32h,a
;暂存行号
loop1: mov dptr,#8800h ;行选线锁存器地址
mov a,30h
movx @dptr,a ;输出行选线数据
mov r1,#4
;四列
mov dptr,#9000h ;列选线锁存器பைடு நூலகம்址
movx a,@dptr
mov 31h,a
;保存读入的数据
cjne a,#0,keydown
jmp next
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D 3333 N 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 /ACS2 4 2222 1234 SSW-12SSW-22SSW-32SSW-42 K U39B74AHC02D 0 56 R471 ACS1ACS2 1111 1234 0 SSW-11SSW-21SSW-31SSW-41 41 盘 键 阵 U24B74AHC02DU24C74AHC02D 矩 5689 R D OUT4OUT5OUT6OUT7WCS1CS2R 4X4 IN4IN5IN6IN7 D N C G C V C IN4IN5IN6IN7/ACS2OUT4OUT5OUT6OUT7 C 12345678900 V 11234567891111111121 C C V EL0123456776543210 CD DDDDDDDDQQQQQQQQ CN CS1CS2 VG 0123456 791111111 CD 76543210CN01234567 76543210 C QQQQQQQQVGELDDDDDDDD YYYYYYYY C U2674HC573U2274HC573 V 123456789 23456789001 C 11111111211 D C N 0123456701234567 V ABCOE2AOE2BOE1G DDDDDDDDDDDDDDDD9 D AAAAAAAAAAAAAAAAU74HC138D N G 1234568 ACS1CR.OUT D N G A13A15A12A14A11 AD[0..7] 2 5 1 SOUTPUT 13 CC CC VV 01234567 DDDDDDDD C AAAAAAAAA11A12A13A14A15 C D V N 19876543212345678900 G 33333333322222222234 NC E C S V P EA/VPP P2.0/A8P2.1/A9 P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 D 图 U(AT/STC/SST)89(S/C)5X N G 路 09897623451234567810 11111111112 电 盘 R D RESTW p 键 N 9 2 G C2 子 阵 K 2 0 矩 R1 电 12-40M 8 1 板 天 C p X 2 2 4 习 RESET 0 力 1 学 1 5 CS C C V LT-Super51 CpoyRight@
rl a
mov 30h,a
djnz r0,loop1
jmp loop2
end
#include <reg52.h> #include <absacc.h> sbit LED=P1^6; void delay(void) //延时10ms { unsigned int i,j;
for(i=128;i>0;i--) for(j=10;j>0;j--); } void main(void) { unsigned char lval,val,temp,i,j,k,m,n; while(1) {
for(i=0,k=0x10;i<4;i++)//行扫描 {
XBYTE[0x8800]=k; k<<=1; m=XBYTE[0x9000]; m&=0xf0; if(m)//读出列值非0 {
for(j=0,n=0x10;j<4;j++,n<<=1)//列扫描 {
temp=m; temp&=n; if(temp) break; } val=i*4+j+1; //键值计算 if(lval!=val) //消抖 {
例子:4×4矩阵键盘从右下角开始编码为1,从右至左、 从下到上的顺序递增,有按键按下后获得相应的键码。
org 0000h
ljmp start
org 0030h
start:mov sp,#6fh
loop2: mov r0,#4
;四行
mov 30h,#00010000b;行选线初始值,只选中一行
mov 31h,#00h ;保存读入的列选数据
mov a,#4
subb a,r1
mov 33h,a
;暂存列号
mov b,#4
mov a,32h
mul ab
add a,33h
inc a
;计算结果a(行号)*4+列号+1
setb p1.6 ;输出至发光二极管流水灯显示
mov p0,a
clr p1.6
jmp start
next: mov a,30h
;下一行
矩阵键盘:将多个键盘接成行列交叉的形式,采用两 组IO口分别控制行和列,通过循环扫描查询的方式判 断是否有按键按下。
本图列选线为下拉电阻,当无按键按下时,列选线为低电平; 同样,列选线也可以接上拉电阻,当无按键按下时,列选线为 高电平。
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D N 3333 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 2222 1234 SSW-12SSW-22SSW-32SSW-42 K 0 R471 1111 1234 SSW-11SSW-21SSW-31SSW-41 OUT4OUT5OUT6OUT7 IN4IN5IN6IN7
lval=val; } else if(lval)//两次键值相当且非零 {
LED=1;P0=val;LED=0; } }
break;
} delay();//延时10ms } }
相关文档
最新文档