51单片机矩阵按键+数码管显示
51单片机矩阵按键+数码管显示键码
文章目录
一、项目概要
本项目基于STC89C51单片机,采用线翻转法实现4×4矩阵按键的按键识别功能,将按键对应的键值(0~F)通过共阴极数码管实时显示,同时配合无源蜂鸣器实现按键提示音。
二、硬件设计
2.1 核心器件清单
1. 主控芯片:STC89C51单片机
2. 输入模块:4×4矩阵按键
3. 显示模块:1位共阴极数码管
4. 提示模块:无源蜂鸣器
5. 辅助电路:晶振电路(11.0592MHz)、复位电路、上拉排阻
2.2 电路连接方式
1. 单片机最小系统:晶振引脚接11.0592MHz晶振+22pF陶瓷电容,复位引脚接下拉电阻与按键,保证单片机正常启动与运行。
2. 4×4矩阵按键:全部引脚连接单片机P1口,其中P1.0~P1.3为列线,P1.4~P1.7为行线,采用线翻转法完成按键扫描。
3. 共阴极数码管:段码引脚(a~dp)连接单片机P0口,公共端接地,P0口外接上拉排阻增强驱动能力,实现0~F字符显示。
4. 无源蜂鸣器:直接连接单片机P3.0引脚,由IO口直接驱动发出提示音。
可参考如下图连接:

三、程序设计思路
1. 引脚与段码定义:定义蜂鸣器控制引脚P3.0,编写共阴极数码管0~F段码表,用于键值匹配显示。
2. 矩阵键盘扫描(线翻转法):第一步将列线置0、行线置1,读取行值判断按键所在行;第二步翻转电平,将行线置0、列线置1,读取列值判断按键所在列;通过行列值组合计算出唯一键值。 3. 按键消抖与处理:通过延时函数消除按键机械抖动,确保键值识别准确,识别成功后触发蜂鸣器短响提示。
4. 数码管显示:将计算得到的键值送入数码管段码表,通过P0口输出段码,实现对应字符实时显示。
5. 主函数逻辑:循环调用键盘扫描函数,获取键值后实时更新数码管显示,全程保持程序稳定运行。
源码可参考:
#include <reg51.h>
#include "delay.h"
// 引脚定义
sbit BEEP = P3^0; // 无源蜂鸣器
// 共阴极数码管 0~F 段码
unsigned char code seg_table[] = {
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71
};
// 无源蜂鸣器响一声(发方波 PWM)
void beep(void) {
unsigned int i;
// 发一段方波,频率约1kHz
for(i=0;i<100;i++) {
BEEP = 1;
delay_us(80);
BEEP = 0;
delay_us(80);
}
}
// 4x4 键盘扫描
unsigned char key_scan(void) {
unsigned char row,col,val;
P1 = 0x0F;//给行赋0,查看列
if(P1 != 0x0F) {
delay_ms(10); // 消抖
if(P1 != 0x0F) {
switch(P1) {
case 0x0E: col=0; break;
case 0x0D: col=1; break;
case 0x0B: col=2; break;
case 0x07: col=3; break;
default: return 16;//无效值
}
P1 = 0xF0;//给列赋0,查看行
switch(P1) {
case 0xE0: row=0; break;
case 0xD0: row=1; break;
case 0xB0: row=2; break;
case 0x70: row=3; break;
default: return 16;//无效值
}
val = row*4 + col;
while(P1 != 0xF0); // 等待松开
delay_ms(10);
return val;
}
}
return 16;//无效值
}
void main(void) {
unsigned char key;
BEEP = 0;
P0=0x00;
while(1) {
key = key_scan();
if(key < 16) {
P0 = seg_table[key]; // 显示键值
beep(); // 无源蜂鸣器响一声
}
}
}
四、编译下载与仿真演示
4.1 程序编译
在Keil C51工程中,点击编译按钮,查看编译日志,无错误、无警告则代表程序编写正常。

4.2 仿真运行
1. 打开Proteus仿真电路,双击单片机芯片,导入Keil生成的HEX格式下载文件。

2. 启动仿真运行,按下矩阵键盘任意按键,单片机通过线翻转法识别按键,共阴极数码管立即显示对应键值(0~F),同时无源蜂鸣器发出短促提示音,松开按键后显示保持。

五、项目小结
通过此项目,掌握了51单片机IO口配置、矩阵键盘工作原理、线翻转法编程逻辑、共阴极数码管驱动及无源蜂鸣器控制方法。
最后,我已经把本次实验的完整源码、Proteus仿真文件、工程文件都整理好啦,需要的同学直接复制链接到百度网盘自取下载:
https://pan.baidu.com/s/1XmWvzCJF3f05ZQVayZDpfg?pwd=nvvc
⚠️ 特别提醒:本项目资料仅用于学习与技术交流分享,严禁用于任何商业用途或二次开发售卖,感谢理解!
更多推荐



所有评论(0)