MCS-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单片机矩阵式键盘接口程序设计
彭波
【期刊名称】《电脑知识与技术:学术版》
【年(卷),期】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矩阵键盘的设计
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
(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单片机具有强大的输入输出能力,可以连接各种外设。
在使用矩阵键盘时,通常使用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
工作过程:
(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单片机矩阵键盘设计
一、引言
AT89C51单片机矩阵键盘设计是嵌入式系统中一个重要的技术,它的
作用是以矩阵形式把外部按键与MCU相连,使得系统可以对外部的按键进
行检测和响应。
矩阵键盘设计在可编程嵌入式系统的设计中占有重要的地位,如智能交通系统、智能家居系统、航空电子系统等。
本文主要介绍了矩阵键盘设计中硬件电路的设计,包括按键、拉电阻、和矩阵编码等,同时给出系统的控制算法,使得系统可以实现有效的按键
检测和响应。
二、矩阵键盘概述
矩阵键盘是将多个按键排布成列行形式进行连接,一般来说,矩阵键
盘是由按键、拉电阻、矩阵编码器和控制器组成,按键是系统中重要的部件,其作用是将外部输入信号传递给控制器。
拉电阻起到的作用是防止按
键耦合,一般可以使用4.7KΩ拉电阻来防止按键耦合。
矩阵编码器用来
识别按键的状态,通常通过硬件把按键信号编码为数字信号,输入到处理
器或控制器。
控制器用来实现按键信号的检测,通过定义硬件定时器和软
件定时器,实现按键检测和处理。
1、硬件电路设计
应用AT89C51单片机矩阵键盘。
51单片机矩阵键盘的C语言程序与分析
51单片机矩阵键盘的C语言程序与分析2009-10-17 19:25学习51单片机矩阵键盘时,我有点迷乱了,不知道是怎样处理的,经过仔细分析电路,然后终于明白其中的原理,这样的话,再看程序,就是那样的简单了。
首先看一下电路图是怎样连接的,我买的开发板上是AT89S52单片机,矩阵键盘在P3口。
接法如下图:当然上面的图的意思是P3.1~P3.3 跟P3.4~P3.7不一样的,他们是相互连接(当按下键时),组成4*4=16个键的。
如果给P3一个扫描初值的话:如0x0F ,则没有键按下时为:P3.1~P3.3为1,P3.4~P3.7为0。
如果有键按下,则情况发生变化:高电平接入低电平:如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。
则P3此时为:0000 0111,这时如果用P3&0x0F,则高四位为0,低四位保留,可以得到低四位的内容了。
通过去抖操作,即一个delay,可以得到低四位内容。
这里设为:h=P3&0x0F;如果再得到高四位内容,则可以组成一个数,来定位哪个键了。
用P3=h|0xF0;这会出现什么情况呢?1|0=1 1| 1 =1,这里难道高四位全置1 吗?不是的,当赋值后,如果有键按下的话,P3高四位不会全为1111,被拉到0了。
如P3.3与P3.7连接的键按下,则P3.3与P3.7为0,即接地了。
即:0111 0111,&F0之后,得到0111 0000,这样的话,我们得到高四位的值了,用高四位+低四位,就可以得到一个数值,确定一个键。
下面看看人家编写的程序,相信不是太难了吧。
//keyboard.c 这里的行与列的扫描,也就是把字节的8位,高四位与低四位分开来,从而确定坐标。
//行列扫描程序,可以自己定义端口和扫描方式,这里做简单介绍#include <reg52.h>//包含头文件#define uchar unsigned char#define uint unsigned intunsigned char constdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F,数码管来显示按下键的值。
实验四 键盘接口设计
实验四:矩阵式键盘接口设计一、实验目的1.掌握独立式按键和矩阵式键盘结构和工作原理。
2.掌握矩阵式键盘的按键识别和扫描方法。
3.掌握独立式按键和矩阵式键盘的接口电路及其编程应用。
二、实验说明键盘的接口形式有两种:独立式按键接口和矩阵式键盘接口。
独立式按键是直接用I/O口构成的单个按键电路,其特点是每个按键单独占用一根I/O 口,每个按键的工作不会影响其它I/O口的状态。
独立式按键电路配置灵活,程序设计简单,但这种键盘占用硬件资源多,每个按键必须占用一根I/O口,因此,在按键较多时,I/O 口浪费较大,不宜采用。
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。
一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V 上。
当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。
这是识别按键是否按下的关键。
然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
识别按键的方法很多,其中,最常见的方法是扫描法。
按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平。
显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平。
只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。
CPU根据行电平的变化,便能判定相应的行有键按下。
在单片机应用系统中,键盘是人机对话不可缺少的组件之一。
在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。
基于51单片机的矩阵键盘
case 4:wei_1=0;wei_2=1;wei_3=1;wei_4=1;break;
}
delay_ms(2)
P0=0x00;
//每次显示完后都要消隐,这非常重要!这句一缺数码管就会闪屏
wei_1=1;wei_2=1;wei_3=1;wei_4=1;
if(temp==1)key=key+0;
else if(temp==2)key=key+1;
if(temp==4)key=key+2;
else if(temp==8)key=key+3;
}
void led_init()
{
wei_1=1;wei_2=1;wei_3=1;wei_4=1;
P0=0x00;
break;
}
if(key_putdown())//这个if是转到第一个while的必要条件
break;
}
}
}
}
void main()
{
wei=1;
control=0;
led_init();
if(key_putdown())
while(1)
//这里用了两个while(1)嵌套
{
key_scan();
key_tem[control++]=key;
if(control==5){led_init();control=0;}
}
void led_disp(uchar wei2,uchar num)
{
P0=table[num];
switch(wei2)
51单片机矩阵键盘设计
工业大学课程设计资料袋电气与信息工程学院(系、部)2009--2010 学年第 1 学期课程名称单片机应用系统指导教师贺正芸学生专业班级电子信息科学与技术学号题目4*4矩阵键盘成绩起止日期2009 年11 月23 日~2009 年12 月04 日目录清单工业大学课程设计任务书2009 —2010 学年第 1 学期电气与信息工程学院(系、部)电子信息科学与技术专业班级课程名称:单片机应用系统设计题目:4*4矩阵键盘完成期限:自2009 年11 月9 日至2009 年11 月20 日共 2 周指导教师(签字):年月日系(教研室)主任(签字):年月日单片机应用系统4*4矩阵键盘设计说明书学生 班级 电科072学号成绩指导教师(签字)起止日期:2009 年 11 月 23 日 至 2009 年 12 月4 日电气与信息工程学院(部)年月日单片机设计题目:矩阵式键盘数显设计一、设计要求及任务1、设计要求(1)由P1.0—P1.3(列)和P1.4—P1.7(行)组成4*4矩阵键盘,P0口接LED 静态显示电路。
由于P0口部无上拉电阻,因此必须外部接上上拉电阻,其阻值的选择可以根据LED数码管发光电流及其亮度来决定,参考值为560欧姆。
编写4*4键盘的驱动程序。
(2)编写主程序,当按键按下时,能够在数码管显示器与按键的键值对应的数字2、设计任务(1)以AT89S51为核心,设计系统硬件电路,并根据所设计的电路制作实物。
(2)分析任务要求,绘制程序流程图,编写相应的软件程序。
(3)编写设计说明书,容包括:电路原理图;程序流程图,源程序清单;电路实测波形、电路原理分析、硬件调试分析;软件调试分析;结论和体会。
根据任务要求知此课程设计是做一个4*4的矩阵键盘P1口接键盘,P0口接数码管。
19脚和18脚接晶振电路,9脚接复位电路,P1.5—P1.7要接下载接口。
应先画出电路原理图,根据原理图列出报目表,编写程序,进行软件仿真,软件仿真成功后开始做硬件。
51单片机的矩阵按键扫描的设计C语言程序
51单片机的矩阵按键扫描的设计C语言程序以下为一个基于51单片机的矩阵按键扫描的设计C语言程序:```c#include <reg51.h>//定义端口连接到矩阵键盘sbit col1 = P2^0;sbit col2 = P2^1;sbit col3 = P2^2;sbit row1 = P2^3;sbit row2 = P2^4;sbit row3 = P2^5;sbit row4 = P2^6;//声明按键函数char read_keypad(;void maiwhile (1)char key = read_keypad(; // 读取按键值//根据按键值进行相应操作switch(key)case '1'://第一行第一列按键逻辑//在此处添加相应的代码break;case '2'://第一行第二列按键逻辑//在此处添加相应的代码break;//继续处理其他按键//...default://未识别到按键break;}}//按键扫描函数char read_keypacol1 = 0; col2 = 1; col3 = 1; // 激活第一列if (row1 == 0) { // 第一行第一列按键被按下while (row1 == 0); //等待按键释放return '1'; // 返回按键值}if (row2 == 0) { // 第二行第一列按键被按下while (row2 == 0); //等待按键释放return '4'; // 返回按键值}if (row3 == 0) { // 第三行第一列按键被按下while (row3 == 0); //等待按键释放return '7'; // 返回按键值}if (row4 == 0) { // 第四行第一列按键被按下while (row4 == 0); //等待按键释放return '*'; // 返回按键值}col1 = 1; col2 = 0; col3 = 1; // 激活第二列//处理第二列的按键逻辑//...col1 = 1; col2 = 1; col3 = 0; // 激活第三列//处理第三列的按键逻辑//...return '\0'; // 返回空字符表示未检测到按键```以上代码中,我们使用51单片机的P2端口连接到矩阵键盘的列和行,通过扫描不同的列和检测行的状态来判断按键是否被按下。
单片机中键盘输入接口的设计与应用案例
单片机中键盘输入接口的设计与应用案例键盘输入接口在单片机中具有重要的作用,它可以实现用户与单片机之间的信息交互。
在本文中,我们将探讨单片机中键盘输入接口的设计原理,并给出一个应用案例来展示其实际应用。
一、设计原理单片机中实现键盘输入接口的基本原理是通过矩阵键盘扫描的方式进行的。
具体步骤如下:1. 连接矩阵键盘首先,我们需要将矩阵键盘与单片机连接起来。
矩阵键盘由多个按钮组成,每个按钮有一个独特的按键码。
常见的矩阵键盘有4×4和4×3两种类型。
2. 设置引脚模式接下来,我们需要设置单片机的引脚模式,将指定的引脚配置为输入模式。
这样,我们就可以通过这些引脚来读取矩阵键盘上的按键信息。
3. 扫描按键在单片机程序中,我们需要编写代码来扫描键盘。
扫描的步骤是逐行扫描矩阵键盘,通过拉低某一行的引脚,然后读取对应列的引脚状态。
如果发现某个按键被按下,则对应的引脚状态为低电平。
4. 处理按键事件一旦检测到按键按下事件,我们就可以根据按键的按键码进行相应的处理。
这可能包括显示按键信息、执行特定的功能等。
二、应用案例为了更好地理解键盘输入接口的设计与应用,我们以一个简单的密码锁系统为例来说明。
1. 系统设计这个密码锁系统需要用户通过按下特定的按键组合来输入密码,一旦输入正确,系统会开启门锁。
2. 硬件设计我们可以选择4×4矩阵键盘作为输入设备,并连接到单片机的引脚上。
3. 程序设计我们需要编写相应的程序来实现密码锁系统的功能。
程序的主要逻辑如下:(1)初始化引脚:将矩阵键盘对应的引脚设置为输入模式。
(2)密码输入:通过扫描矩阵键盘,读取按键信息。
根据按键码将按键信息存储到一个缓冲区中。
(3)密码验证:当用户输入完整的密码后,我们需要对其进行验证。
如果密码正确,则开启门锁;否则提示密码错误。
(4)功能实现:在密码验证通过后,我们可以添加一些额外的功能,例如计时器、报警器等。
4. 系统测试完成程序编写后,我们需要将代码烧录到单片机中,并测试系统的功能。
《单片机应用技术(C语言)》课件—4.6 单片机与矩阵键盘接口
列线
0
1
2
3
4×4矩阵键盘
0
1行 线
2
3
单片机
行线连接
列线
0
1
2
3
4×4矩阵键盘
0
1行 线
2
3
单片机
列线连接
列线
0
1
2
3
0
1行 线
2
3
4×4矩阵键盘
单片机
+VCC 列线
0
1
2
3
0
1行 线
2
3
4×4矩阵键盘
4.6.2 矩阵式键盘按键的识别
+VCC 列线
0
1
2
3
1K×4
0
1行 线
2
3
如何识别哪一个按键按下?
是否有键按下; 行电平不全为高→有键按下 判断具体按键; 逐列送低电平→判断每列按键状态
输入 输出
逐列扫描法:
+VCC 列线
0
1
2
3
1K×4
S0
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
S15
0
1行 线
2
3
是否有键按下; 行电平不全为高→有键按下 判断具体按键; 逐列送低电平→判断每列按键状态
S8
S9
S10
S11
S12
S13
S14
S15
0
0
0
0
0
1行 线
2
3
逐列扫描法:
是否有键按下; 判断具体按键;
51单片机矩阵键盘与8051连接设计
sbit L6=P0_;
sbit L7=P0_;
sbit L8=P0_;
sbit DUAN=P2_;
sbit WEI=P2_;
/*-----------------------------
定时器0初始化函数
-----------------------------*/
void init()
case 0xed:L5=~L5;/*按键05功能*/ break;
case 0xdd:L6=~L6;/*按键06功能*/ break;
case 0xbd:L7=~L7;/*按键07功能*/ break;
case 0x7d:L8=~L8;/*按键08功能*/ break;
case 0xeb:/*按键09功能*/ break;
{
TR0=0; //定时终止
TH0=(65536-10000)/256; //定时器0初值重装
TL0=(65536-10000)%256;
NUM--;
}
/*--------------------------------------------------
矩阵键盘检测兼编码函数
--------------------------------------------------*/
kvalue=matrixkeyscan();
switch(kvalue)
{
case 0xee:L1=~L1;/*按键01功能*/ break;
case 0xde:L2=~L2;/*按键02功能*/ break;
case 0xbe:L3=~L3;/*按键03功能*/ break;
case 0x7e:L4=~L4;/*按键04功能*/ break;
51单片机综合学习系统之矩阵键盘篇
10-5 软件流程图 51 单片机综合学习系统资源丰富,可做实验有:8 位 LED 数码管、32 路 LED、4x4 矩阵键盘、4 个直控 键盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64 液晶、红外接收头接 口、支持 PS/2 接口的 104 键标准键盘、步进电机驱动接口、ADC0832 模/数转换接口、PC817 光电耦合器、 串行时钟芯片 DS1302、温度传感器 DS18B20 接口、RS232 串口通讯、外扩展接口以便外接更多的实验资源。 软件代码 /***************************************************************************/ /*杭州晶控电子有限公司*/ /**/
图 1 矩阵键盘布局图
图 2 矩阵键盘内部电路图 当无按键闭合时,P10~P13 与 P14~P17 之间开路。当有键闭合时,与闭合键相连的两条 I/O 口线之间 短路。判断有无按键按下的方法是:第一步,置列线 P14~P17 为输入状态,从行线 P10~P13 输出低电平, 读入列线数据, 若某一列线为低电平, 则该列线上有键闭合。 第二步, 行线轮流输出低电平, 从列线 P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是 键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可 能会连续多次进行同样的键操作。 矩阵键盘软硬件设计实例 本期以 51 单片机综合学习系统为硬件平台,介绍矩阵式键盘的编程方法。实验通过按下相应键后在一 位数码管上显示出键值。0 到 16 个键分别对应显示 0 到 F。
switch(n) { case(0xe0):display(7);break; case(0xd0):display(6);break; case(0xb0):display(5);break; case(0x70):display(4);break; } } } //扫描第三行 P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(11);break;
单片机与矩阵键盘接口电路设计实验报告
单片机与矩阵键盘接口电路设计实验报告姓名:林蔼龄学号:1060601007班级:10级物理系电子信息工程A班单片机与矩阵键盘接口电路设计实验报告一:实验内容使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。
二:电路图三:程序流程图四:程序org 0000hljmp mainmain:mov p1,#0fh;列线输出0,行线设为输入mov a,p1;读P1口anl a,#0fh;屏蔽高4位,留下行线状态cjne a,#0fh,look;有按键按下,转lookret;无按键按下,返回主程序look:lcall dlay10;延时10msmov a,p1;读P1口anl a,#0fh;屏蔽高4位,留下行线状态cjne a,#0fh,rank ;确认键已按稳,转RANK ljmp main;是抖动,未按稳,重新扫描rank:mov r2,#00h ;窜键标志寄存器请0mov r3,#04h ;查列次数mov r4,#0f7h ;列扫描字初值mov r5,#0ffh ;列号处值rloop1:inc r5 ;开始列扫描,列号加1mov a,r4 ;列扫描字送Arl a ;列扫描字左移一位mov r4,a ;暂存列扫描字mov p1,a ;送出列扫描字mov a,p1 ;读P1口anl a,#0fh ;屏蔽高4位,留下行线状态cjne a,#0fh,next1 ;当前列有键按下,转next1rloop2:djnz r3,rloop1 ;列扫描未完,继续sjmp line ;列扫描完,转行扫描next1:inc r2 ;窜键标志加1mov 20h,r5 ;暂存有按键的列号sjmp rloop2 ;继续列扫描line:cjne r2,#01h,main ;若已窜键,转main,重新扫描mov r2,#00h ;开始查行,窜键标志寄存器清0mov r3,#04h ;行扫描次数mov r6,#0ffh ;行号初值mov p1,#0fh ;列线送0,准备读行线mov a,p1 ;读P1口,获取行线状态lloop1:inc r6 ;行号加1rrc a ;从第0行开始,判断有无按键jnc next2 ;本行有按键,转next2lloop2:djnz r3,lloop1 ;无按键,继续查下一行sjmp next3 ;查完,转next3next2:inc r2 ;窜键标志加1mov 21h,r6 ;暂存有按键的行号sjmp lloop2 ;继续行扫描next3:cjne r2,#01h,main ;若窜键,转main,重新扫描gainky:mov a,21h ;无窜键,取出行号mov b,#04h ;键盘列数mul ab ;行号*键盘列数add a,20h ;乘积与列号相加,得到键号mov b,#03h;为执行键处理程序做准备mul ab ;键号*3mov dptr,#ptab ;键处理程序表首地址送DPTRjmp @a+dptr ;散转至与键号对应的键处理程序ptab:ljmp prog0;键处理程序表ljmp prog1ljmp prog2ljmp prog3ljmp prog4ljmp prog5ljmp prog6ljmp prog7ljmp prog8ljmp prog9ljmp prog10ljmp prog11ljmp prog12ljmp prog13ljmp prog14ljmp prog15prog0:mov p2,#3fhretprog1:mov p2,#06hretprog2:mov p2,#5bhretprog3:mov p2,#4fhretprog4:mov p2,#66hretprog5:mov p2,#6dhretprog6:mov p2,#7dhretprog7:mov p2,#07hretprog8:mov p2,#7fhretprog9:mov p2,#6fhretprog10:mov p2,#77hretprog11:mov p2,#7chretprog12:mov p2,#39hretprog13:mov p2,#5ehretprog14:mov p2,#79hretprog15:mov p2,#71hretdlay10:mov r0,#100 ;约10ms延时dlay1:mov r1,#50dlay2:djnz r1,dlay2djnz r0,dlay1retend五:实验结果当矩阵键盘的3号键被按下时,P2口的七段数码管显示的数据为3.如下图1所以:图1当矩阵键盘的A号键被按下时,P2口的七段数码管显示的数据为A.如下图2所以:图2当矩阵键盘的D号键被按下时,P2口的七段数码管显示的数据为d.如下图3所以:图3当矩阵键盘的F号键被按下时,P2口的七段数码管显示的数据为F.如下图4所以:图4。
51单片机的矩阵键盘协处理器设计
摘要各种数字系统的终端设备都需要对十进制信息进行数码显示,而LED是最常用的显示器件。
在大规模可编程逻辑器件CPLD的硬件基础上,根据显示译码器原理运用VHDL硬件描述语言对LED的通用七段显示译码器进行了设计,同时使用ISE开发软件对设计电路进行了时序仿真和功能验证。
此设计在大规模数字电路的数码显示中更为实用,具有设计简单使用灵活和工作可靠等优点。
通过本次设计,可以体现出可编程逻辑器件CPLD等在电子设计领域的广泛应用,设计者可以方便的设计出符合要求的芯片或应用系统。
相对于普通键盘,矩阵键盘有效的提高按键操作的效率,它可以提高系统的准确行,有利于资源的节约。
对操作者的要求也比较低。
能够准时、时实、高效的显示按键信息。
4*4矩阵键盘式键盘采用AT89S51单片机作为核心控制器件,以按键信号作为简单的输入信息,利用8段数码管和VHDL语言编程,单片机将检测到的按键信号转换成数字量。
最种在数码管显示了0-F,并且在程序设计中利用按键扫描技术来对按键进行消抖。
该设计实现了对矩阵键盘简单的信息输入的识别。
关键词:VHDL;LED显示;CPLD;矩阵键盘AbstractTerminal equipment digital system needs to decimal information digital display, while LED are the most common display devices. In the hardware foundation of large-scale programmable logic device CPLD, according to the principle of display decoder using VHDL hardware description language for general LED seven segment display decoder is designed, and the circuits are simulated to validate the use of ISE software. This design in large scale digital circuit digital display more practical, has the advantages of simple design, flexible and reliable. Through this design,it can see that CPLD has a widely application in electronic a rea.The design a chip or a system expediently.Compared to ordinary keyboard, matrix keyboard, effectively improve the efficiency of the key operation, it can improve the accuracy for the system, is conducive to resource saving. The operator's requirements are relatively low. on time,when the real and efficient display key information . 4*4 matrix keyboard keyboard using AT89S51 singlechipas the core control device, as a simple information input to key signal, the use of 8 digital tube and VHDL language programming. SCM will push the detected signal into digital quantity. The total in the digital tube display 0-F. The design and implementation of the recognition of information input matrix keyboard simple.Keywords:VHD;LED display;CPLD;matrix keyboard目录1 绪论 (1)1.1 课题背景 (1)1.2 EDA的历史及发展 (2)1.3 课题意义 (4)2 硬件介绍 (5)2.1 51单片机简介 (5)2.1.1 51单片机的功能及引脚 (5)2.1.2 51单片机在课题中的运用 (7)2.2 CPLD简介 (10)2.2.1 CPLD的基本结构及特点 (10)2.2.2 应用及发展趋势 (11)2.2.3 CPLD在本课题中的运用 (12)3 VHDL语言及相关软件介绍 (15)3.1 VHDL简介 (15)3.2 ISE简介及工程设计流程 (16)3.3 Keil C51简介及HEX格式文件创建 (18)3.3.1 Keil C51简介 (18)3.3.2 HEX格式文件创建 (20)3.4 Easy 51Pro简介 (20)4 51单片机的显示协处理器设计 (23)4.1 课题任务 (23)4.2 相关原理 (23)4.3 51单片机的显示协处理器的VHD代码设计 (24)4.4 操作步骤 (32)5 51单片机的矩阵键盘协处理器设计 (36)5.1 课题任务 (36)5.2 相关原理 (36)5.3 51单片机的矩阵键盘协处理器VHDL代码设计 (37)6 结论 (42)6.1 单片机的显示协处理器设计结果 (42)6.2 51单片机的矩阵键盘协处理器设计结果 (42)致谢 ........................................................................................................ 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性(独立)键盘:采用多个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 } }