矩阵键盘独立接口设计(Keil+Proteus)

前言

实验:通过4*4的矩阵键盘,按下某个按钮之后会在数码管上面显示对应的键号。(0~F)

基础操作参考这篇博客:

LED数码管的静态显示与动态显示(Keil+Proteus)-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/134101256

Keil

实验采用的是共阳极的接法。所以这个二进制的数据里面的元素都是共阳极的。

通过逐行的扫描,假设当前扫描第一行,对应的P1^0~P1^3中有0则说明是该行有键被按下,结合if判断可以确定是哪一列。

cpp 复制代码
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
	
sbit L1=P1^0;//定义列
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
//共阳极字符0~F的段码
uchar dis[16]={0xC0,0XF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint time;
//延时,放键盘抖动
void delay(uint time);

void main(void){
	uchar temp;
	uchar i;
	while(1){
		P1=0xEF;//行扫描初值1110 1111(扫描P1^4)
		for(i=0;i<4;i++){//逐行为低,按行扫描,一共4行
			if(L1==0)P0=dis[i*4+0];//判断第一列有无键被按下
			if(L2==0)P0=dis[i*4+1];//判断第二列有无键被按下
			if(L3==0)P0=dis[i*4+2];//判断第三列有无键被按下
			if(L4==0)P0=dis[i*4+3];//判断第四列有无键被按下
			delay(500);//延时
			temp=P1;//读入P1口的状态
			temp=temp|0x0F;//将P1^3~P1^0为1
			temp=temp<<1;//左移,准备扫描下一行
			temp=temp|0x0F;
			P1=temp;//为扫描下一行做准备
		}
	}
}				
//软件消除抖动,延时
void delay(uint time){
	uint i;
	for(i=0;i<time;i++);
}

Proteus

相信大家已经轻车熟路了,就直接放原理图了。

所需要的器件

|--------------|------------------|
| 元件名称 | Proteus关键字 |
| 51单片机 | AT89C51 |
| 复位按钮 | BUTTON |
| 电阻 | RES |
| 共阳极八位数码管 | 7SEG-MPX1-CA |
| 电源 | POWER |

矩阵键盘

总结

继续加油!!!

相关推荐
不穿格子的程序员7 小时前
从零开始写算法——二分-搜索二维矩阵
线性代数·算法·leetcode·矩阵·二分查找
dingzd957 小时前
跨平台账号矩阵高效协同术
线性代数·矩阵·web3·facebook·tiktok·instagram·clonbrowser
一勺汤11 小时前
YOLO12 改进、魔改|秩增强线性注意力RALA,通过增强 KV 缓冲与输出特征的矩阵秩,增强 YOLO 对小目标、复杂场景目标的识别能力
线性代数·yolo·矩阵·yolov12·yolo12·yolo12改进·小目标
资深web全栈开发12 小时前
力扣2536子矩阵元素加1-差分数组解法详解
算法·leetcode·矩阵·golang·差分数组
西西弗Sisyphus16 小时前
线性代数 - 理解求解矩阵特征值的特征方程
线性代数·矩阵·特征值·特征向量
资料,小偿1 天前
4.29.3五种波形发生器8086波形发生器,锯齿波脉冲波正弦波三角波直流信号含调试视频➕18页5000字原创报告软件流程图proteus8.9近期原创的,
汇编·proteus
Tisfy1 天前
LeetCode 2536.子矩阵元素加 1:二维差分数组
算法·leetcode·矩阵
醒过来摸鱼1 天前
多重组合问题与矩阵配额问题
线性代数·矩阵·概率论
小欣加油1 天前
leetcode 2536 子矩阵元素加1
数据结构·c++·算法·leetcode·矩阵
hazy1k2 天前
ESP32基础-PWM_直流电机
stm32·单片机·嵌入式硬件·51单片机·proteus·esp32