蓝桥杯工程之矩阵按键数码管显示

说明:为使博文看起来简单,以下程序中没有的函数都在前面已经出现过,如果需要,请自行查阅。

实验现象: 下载程序到实验板,按开发板的矩阵按键可以显示对应的数字,具体按键排列是:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

注意: 跳线帽一定要接KBD(靠左侧的地方)

程序:
matrix_key.h

#ifndef matrix_key
#define matrix_key

sfr P4 = 0xC0;  //头文件中没有P4寄存器的定义
sbit P42 = P4^2;
sbit P44 = P4^4;

extern uchar xdata Key_Read_Value;
void Matrix_Key_Scan(); // 矩阵按键扫描
#endif

matrix_key.c

#include"All.h"

uchar xdata Key_Read_Value=0;

void Matrix_Key_Scan()
{
	P3 = 0x0f; P42 = 0; P44 = 0;   //  0000 1111 拉低列,先使行使能
	if(P3 != 0x0f)   // 有按键按下
	{
	  Delay_ms(5);   // 消抖
		if(P3 != 0x0f)   // 确定按键按下
		{	
			switch(P3)  // 判断是哪一行的按键按下
			{
				case 0x07: Key_Read_Value = 12; break;    // 0000 0111   // 最后一行按下
				case 0x0B:Key_Read_Value = 8; break;    // 0000 1011
				case 0x0D:Key_Read_Value = 4;break;     // 0000 1101
				case 0x0E: Key_Read_Value = 0;break;  // 0000 1110  // 第一行按下
			}
			P3 = 0xf0; P42 = 1; P44 =1; // 拉低行 判断列
			if(P44 == 0) Key_Read_Value += 0; while(P44 == 0);    // 第一列按下
			if(P42 == 0) Key_Read_Value += 1; while(P42 == 0);    // 第二列按下
			if(P3 == 0xD0) Key_Read_Value += 2;while(P3 == 0xD0); // 1101 0000
			if(P3 == 0XE0) Key_Read_Value += 3; while(P3 == 0XE0);  // 第四列按下
		}
 	}
}

main.c

#include "All.h"

/* 按下按键的时候,第一行  0   1   2   3 
                                           4   5   6   7
										   8   9  10 11
										  12 13 14 15
*/

/* 主函数 */
void main()
{
	/* 屏蔽蜂鸣器*/
    HC138_Enable_CS(5);
    P0 = 0x00;   // 全是0  ,经过反相器
    while(1)
	{
		disbuffer[0] = Key_Read_Value / 10;  // 显示10位
        disbuffer[1] = Key_Read_Value % 10; // 显示个位
		SMG_Circle_Display();   // 数码管动态显示
		Matrix_Key_Scan(); // 矩阵按键扫描
	}
}



效果:
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值