【51单片机】2-8【I/O口】数码管显示矩阵按键值

1.硬件

2.软件

  • 动态数码管
c 复制代码
#include "reg52.h"			 //头文件

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

#define GPIO_DIG P0//数码管段选
#define GPIO_KEY P1//按键

u8 KeyValue;	//用来存放读取到的键值

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极,显示0~F的值

void delay(u16 i)//延时
{
	while(i--);	
}

void KeyDown(void)//矩阵按键扫描函数
{
	char a=0;
	GPIO_KEY=0x0f;//矩阵按键接P1口,默认高四位为低电平,低四位为高电平
	if(GPIO_KEY!=0x0f)//读取按键是否按下
	{
		delay(1000);//延时10ms进行消抖
		if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
		{	
			//测试列
			GPIO_KEY=0X0F;//0000 1111
			switch(GPIO_KEY)
			{
				case(0X07):	KeyValue=0;break;//P1为0000 0111
				case(0X0b):	KeyValue=1;break;//0000 1011
				case(0X0d): KeyValue=2;break;//0000 1101
				case(0X0e):	KeyValue=3;break;//0000 1110
			}
			//测试行
			GPIO_KEY=0XF0;//1111 0000
			switch(GPIO_KEY)
			{
				case(0X70):	KeyValue=KeyValue;break;//0111 0000
				case(0Xb0):	KeyValue=KeyValue+4;break;//1011 0000
				case(0Xd0): KeyValue=KeyValue+8;break;//1101 0000
				case(0Xe0):	KeyValue=KeyValue+12;break;//1110 0000
			}
			
		}
	}
	while((a<50)&&(GPIO_KEY!=0xf0))	 //检测按键松手检测
	{
		delay(100);
		a++;
	}
}

void main()
{	

	while(1)
	{	
		KeyDown();		   //按键判断函数
		GPIO_DIG=smgduan[KeyValue];	  //检测按键松手检测
	}		
}

3.实物效果

  • 硬件接线

相关推荐
iCxhust1 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理
智者知已应修善业3 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
达不溜的日记12 小时前
PDUR路由基本功能
网络·stm32·单片机·嵌入式硬件·mcu·51单片机·信息与通信
智者知已应修善业1 天前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
iCxhust1 天前
微机原理实践教程(C语言篇)---A002流水灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·课程设计·微机原理
iCxhust1 天前
微机原理实践教程(汇编篇)---A002流水灯
汇编·单片机·嵌入式硬件·51单片机·微机原理
iCxhust2 天前
led_pattern = (led_pattern << 1) | (led_pattern >> 7)执行顺序
stm32·单片机·嵌入式硬件·51单片机·微机原理
llilian_162 天前
晶体频率测试仪 破解晶振品控核心难题:晶体频率网络测试仪深度解析 晶体网络分析仪
网络·功能测试·单片机·嵌入式硬件·测试工具·51单片机
iCxhust3 天前
将8088 BootLoader分拆烧写到8086 ROM中
stm32·单片机·嵌入式硬件·51单片机·微机原理
llilian_163 天前
晶振测量仪 晶振频率测试仪器的多领域应用解析 晶振频率测试仪器
功能测试·单片机·嵌入式硬件·测试工具·51单片机