【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.实物效果

  • 硬件接线

相关推荐
尼喃39 分钟前
24V过压过流保护电路芯片PW1605,60V耐压5A大电流,硬件设计选型优选
单片机·51单片机·芯片
电子工程师成长日记-C511 小时前
基于51单片机的乒乓球计分器
单片机·嵌入式硬件·51单片机
深耕AI11 小时前
【时钟周期 vs 指令】为什么51单片机需要12个时钟周期?
单片机·嵌入式硬件·51单片机
Arciab12 小时前
51单片机_LCD1602液晶显示
网络·嵌入式硬件·51单片机
尼喃1 天前
汽车摩托车LED车灯驱动芯片IC,精准调光抗干扰,为车灯性能提升赋能
单片机·汽车·51单片机·芯片
Arciab1 天前
51单片机_数码管显示
单片机·嵌入式硬件·51单片机
v先v关v住v获v取2 天前
12米折叠式高空作业车工作臂设计9张cad+三维图+设计说明书
科技·单片机·51单片机
Kuakewei8882 天前
USB过压保护芯片,专业级电源过压和静电浪涌保护方案
单片机·51单片机·芯片
尼喃2 天前
USB过压保护芯片,切断输入和输出,防护后端电路,带自恢复
单片机·51单片机·芯片
v先v关v住v获v取2 天前
模块机器人逆向设计cad5张+三维图+设计说明书
科技·单片机·51单片机