【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 P0

u8 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)。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-21 02:28:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-21 02:28:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-21 02:28:02       82 阅读
  4. Python语言-面向对象

    2024-01-21 02:28:02       91 阅读

热门阅读

  1. 2024年对我懒这件事的弥补

    2024-01-21 02:28:02       46 阅读
  2. 调试工具gdb的常用命令总结

    2024-01-21 02:28:02       71 阅读
  3. MVC和MVVM区别和VUE关系

    2024-01-21 02:28:02       54 阅读
  4. html+css3 补充学习

    2024-01-21 02:28:02       67 阅读
  5. 2024QS世界大学排名完整榜单

    2024-01-21 02:28:02       53 阅读
  6. Druid连接池工具公式化SQL附踩坑记录

    2024-01-21 02:28:02       60 阅读
  7. RHCE: 主从DNS服务器配置 (实现正反向解析)

    2024-01-21 02:28:02       62 阅读
  8. Vue-Router: 如何使用路由钩子函数来处理路由变化

    2024-01-21 02:28:02       65 阅读