ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【51单片机】矩阵按键

2026/8/6 11:05:54 拓冰建站 浏览量
【51单片机】矩阵按键

0、前言

参考:普中 51 单片机开发攻略

1、硬件

在这里插入图片描述

2、软件

main.c

#include <reg52.h>
#include <intrins.h>
#include "delayms.h"typedef unsigned int u16; //对数据类型进行声明定义 
typedef unsigned char u8; #define GPIO_KEY P1
#define GPIO_DIS P0u8 KeyValue = 0; //保存键值(记录按下的是哪一个键)// 显 示 0~F 的值 
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//确定哪个按键按下
void KeyDown(void)
{GPIO_KEY = 0x0F;if(GPIO_KEY != 0x0F){delayms(100);  //消抖if(GPIO_KEY != 0x0F){//扫描列switch(GPIO_KEY){case(0x07):KeyValue = 0;break;case(0x0B):KeyValue = 1;break;case(0x0d):KeyValue = 2;break;case(0x0e):KeyValue = 3;break;}//扫描行GPIO_KEY = 0xF0;switch(GPIO_KEY){case(0x70):KeyValue = KeyValue + 0; break;case(0xb0):KeyValue = KeyValue + 4;break;case(0xd0):KeyValue = KeyValue + 8;break;case(0xe0):KeyValue = KeyValue + 12;break;}}}
}/************ * 函 数 名 : main * 函数功能 : 主函数 *输 入 :无 *输 出 :无*********************/ 
void main() 
{ while(1) { KeyDown();GPIO_DIS = smgduan[KeyValue];} 
}

3、效果

只有第一个数码管量,并且按第几个键,就显示第几(0-F)。