51、52单片机使用矩阵键盘

为了学习矩阵键盘,先做个小小的实验目标 : 按下矩阵键盘后 ,数码管显示按下的是第几键。

我的矩阵键盘是4X4的,操作原理是先检测按下的键是哪行。再确定是哪列。这样就能识别是按的哪个键了。

首先看电路图,确定键盘是连CPU的哪个针。我的开发板上是连接的P1,具体是P10~P17,八个针对应逻辑的8位。

(此处省略,直接贴代码)

#include<reg52.h>void delay(int n);void juzhen(void);  char duanxuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,  0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  char keyveluetonumber[17]={0X0,0x77,0x7B,0X7D,0X7E,0XB7,0XBB,0XBD,0XBE,  0XD7,0XDB,0XDD,0XDE,0XE7,0XEB,0XED,0XEE};   int keyvelue=0;

int main(){int j=0;           P2=0XFF;      while(1){      juzhen();      P0=duanxuan[keyvelue];                 }}

void juzhen(void){int a=0,i;char tempkey;P1=0xf0;if(P1!=0Xf0){delay(10);    if(P1!=0Xf0){        tempkey=P1;         P1=0X0f;        tempkey|=P1;

for(i=1;i<=16;i++){      /*下面switch的优化代码  */            if(keyveluetonumber[i]==tempkey) {             keyvelue=i ;             break;            }           }   /* switch(tempkey){  //这个switch的对应关系更直观,但这么编程太2了,                        所以用数组提前把下标和元素做好映射,直接查询即可。                        不省时间,但省程序员的精力。

case 0x77 :  keyvelue=1;break;    case 0x7B :  keyvelue=2;break;    case 0X7D :  keyvelue=3;break;    case 0X7E :  keyvelue=4;break;    case 0XB7 :  keyvelue=5;break;    case 0XBB :  keyvelue=6;break;    case 0XBD :  keyvelue=7;break;    case 0XBE :  keyvelue=8;break;    case 0XD7 :  keyvelue=9;break;    case 0XDB :  keyvelue=10;break;    case 0XDD :  keyvelue=11;break;    case 0XDE :  keyvelue=12;break;    case 0XE7 :  keyvelue=13;break;    case 0XEB :  keyvelue=14;break;    case 0XED :  keyvelue=15;break;    case 0XEE :  keyvelue=16;break;    }    */

}

}

return ;}void delay(int n){ //简陋的延时函数int i;while(n--)    for(i=110;i>0;i--);}

原文地址:https://www.cnblogs.com/cnnnnnn/p/8617994.html

时间: 2024-10-13 15:51:08

51、52单片机使用矩阵键盘的相关文章

51单片机实现矩阵键盘行扫描

-------------------------------------------- 分类: 按结构原理分: 触点式开关按键 无触点开关按键 接入方式 独立式按键 矩阵式键盘 -------------------------------------------- 矩阵式键盘识别方法(行扫描法) 检测列线的状态: 列线Y4~Y7置高电平,行线Y0~Y3置低电平.只要有一列的电平为低,则表示键盘该列有一个或多个按键被按下.若所有列线全为高电平,则键盘中无按键按下. 判断闭合按键所在的位置: 行

单片机入门-矩阵键盘控制数码管显示

任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位电路: 锁存器.上拉电阻: 4x4矩阵键盘: 代码实现: void key44scan(void)//键盘扫描函数 { uint t; P2=0xfe; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xee:keynum

AVR单片机教程——矩阵键盘

本文隶属于AVR单片机教程系列. ? 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称

单片机 &amp; 4&#215;4矩阵键盘 &amp; 4位串行595数码管显示

1 #include ? <reg52.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 //Led数码管数 5 sbit DIO = P2^0;//串行数据输入 6 sbit LRCLK = P2^1;//时钟脉冲信号——上升沿有效 7 sbit LSCLK = P2^2;//打入信号————上升沿有效 8 unsigned char code LED_0F[] = 9 {// 0 1 2 34 5 6 78 9 A

51单片机第四弹---矩阵键盘

原理图: 原理: 和独立键盘相似 /******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/

51单片机的数码管和矩阵键盘

使用4*4的矩阵键盘和一个数码管 在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符. //4*4键盘检测程序,按下键后相应的代码显示在数码管上 #include<reg51.h> typedef unsigned char UINT8; UINT8 i=100; UINT8 j,k,temp,key; void delay(unsigned char i) { for(j=i;j>0;j--) for(k=125;k>0;k--); } UINT8 cod

十天学会单片机Day2键盘检测(独立键盘、矩阵键盘)

1.键盘的分类 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘 非编码键盘:靠软件编程来识别的称为非编码键盘.独立键盘.矩阵键盘 2.按键消抖              如图,理想波形与实现波形之间是有区别的.实际波形在按下和释放的瞬间都有抖动现象,抖动事件的长短与按键的机械特性有关,一般为5~10ms.通常我们手动按下键然后立即释放,这个动作中稳定闭合时间超过20ms.因此检测键盘是否按下时,需加上去抖动操作. 一般有两种消抖方式: 硬件消

疑问----单片机矩阵键盘行列反转扫描法

学到矩阵键盘这一块对网上别人写的C代码有些疑问,希望有能看到的大牛帮助解答. 矩阵键盘和独立键盘原理图: 原理:对于图右侧的矩阵键盘,把P3口的低四位(P3.0 ~ P3.3)和高四位(P3.4 ~ P3.7)分别置1,只要有按键被按下,那么与之对应的P3口某一位将由高电平被拉低,两次分别测得了行值和列值即确定了哪一个按键被按下了. 比如:先把低四位赋高电平即 P3 = 0000_1111 假如 S15 被按下了,那么 P3.2 就被拉成低电平即 P3 = 0000_1011 ,此时再把高四位赋

单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面.想要的结果是按第0个按键,数码管显示0,以此类推.注意,这里的数码管是共阳极的. #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa