c51单片机学习笔记-矩阵按键实验

本文介绍了一个基于C51单片机的矩阵按键实验项目。通过使用行列式扫描方法检测16个矩阵按键的状态,并利用数码管显示按下的键值。详细介绍了端口定义、延时函数、按键扫描函数及主函数等内容。

目的:通过数码管显示矩阵按键 S1-S16 按下后键值 0-F。

编译软件:keil5

过程:

(1)定义各端口

#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
#define KEY_MATRIX_PORT P1 //使用宏定义矩阵按键控制口
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
//共阴极数码管显示 0~F 的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}

(2)延时函数定义

函 数 名 : delay_10us

函数功能 : 延时函数,ten_us=1 时,大约延时 10us

输 入 : ten_us

输 出 : 无

void delay_10us(u16 ten_us)
{
while(ten_us--);
}

(3)key_matrix_ranks_scan函数

函 数 名 : key_matrix_ranks_scan

函数功能 : 使用行列式扫描方法,检测矩阵按键是否按下,按下则返回对应键值

输 入 : 无

输 出 : key_value:1-16,对应 S1-S16 键,0:按键未按下

u8 key_matrix_ranks_scan(void)
{
u8 key_value=0;
KEY_MATRIX_PORT=0xf7;//给第一列赋值 0,其余全为 1
if(KEY_MATRIX_PORT!=0xf7)//判断第一列按键是否按下
{
delay_10us(1000);//消抖
switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值
{
case 0x77: k
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GallyDowney

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值