单片机第8课:矩阵键盘扫描

JP3接P0,VCC接+5V,矩阵键盘的左边八个引脚接在P1上面。想要的结果是按第0个按键,数码管显示0,以此类推。注意,这里的数码管是共阳极的。

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0,
					  0x99, 0x92, 0x82, 0xf8,
					  0x80, 0x90, 0x88, 0x83,
					  0xc6, 0xa1, 0x86, 0x8e};
uchar code table_scan[] = {0xfe, 0xfd, 0xfb, 0xf7};
void init();
uchar temp;
void main()
{
	uint i_row;
	init();
	while(1)
	{
		for(i_row=0; i_row<4; i_row++)
		{
			P1 = table_scan[i_row];
			temp = P1;
			temp = P1 & 0xf0;
			switch(temp)
			{
				case 0xe0:
				if(i_row==0) P0 = table[0];
				else if(i_row==1) P0 = table[4];
				else if(i_row==2) P0 = table[8];
				else P0 = table[12];
					break;
				case 0xd0:
					if(i_row==0) P0 = table[1];
					else if(i_row==1) P0 = table[5];
					else if(i_row==2) P0 = table[9];
					else P0 = table[13];
					break;
				case 0xb0:
					if(i_row==0) P0 = table[2];
					else if(i_row==1) P0 = table[6];
					else if(i_row==2) P0 = table[10];
					else P0 = table[14];
					break;
				case 0x70:
					if(i_row==0) P0 = table[3];
					else if(i_row==1) P0 = table[7];
					else if(i_row==2) P0 = table[11];
					else P0 = table[15];
					break;
			}
		}

	}
}

void init()
{

	P0 = 0xff;

}

注意,代码中没有进行消抖操作,是因为这个不消抖不会影响实验结果。

时间: 2024-08-10 09:54:34

单片机第8课:矩阵键盘扫描的相关文章

4x4矩阵键盘扫描

4x4矩阵键盘扫描 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了 Win10 IoT 如何对本地 IoT 设备内嵌 SQLite 数据库进行 CURD 操作 ,这章我们来学习如何使用 GPIO Pin 扫描4x4矩阵键盘按键状态.如果对安装部署过程还不熟悉可以参考前几篇文章,Raspberry安装 IoT系统及搭建开发环境(http:/

4X4矩阵键盘扫描程序

4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读取列线GIO的值,可确定是哪一个按键: 电路图如下: 注意: 1. 图中用作输入的GIO,一定要有一个上拉电阻. 2. 芯片中的每一个引脚是否用作了GPIO口来用,需配置芯片的寄存器,使引脚当作GPIO口来使用,才会有效. 测试代码如下: #define KEY_GIO_ROW_1 37 #define KEY_GIO_R

矩阵键盘扫描算法

函数的主体 unsigned char GetKey() { unsigned char i,j,k; static unsigned char backup[4][4]={ {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1} }; EA=1; TMOD=0x01;//设置T0为模式1 TH0=0xF8; TL0=0xCD; ET0=1;//使能T0中断 TR0=1;//启动T0 while(1) { for(i=0;i<4;i++)//循环检测4×4的矩阵按键 {

Win10 IoT C#开发 6 - 4x4矩阵键盘扫描

Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了 Win10 IoT 如何对本地 IoT 设备内嵌 SQLite 数据库进行 CURD 操作 ,这章我们来学习如何使用 GPIO Pin 扫描4x4矩阵键盘按键状态.如果对安装部署过程还不熟悉可以参考前几篇文章,Raspberry安装 IoT系统及搭建开发环境(http://www.cnblo

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可. 1.键盘原理图: 2.STM32 cubemx 引脚配置图: 这里用外部晶振内部晶振都可以,时钟对这个没什么影响,不用开中断,所以其他的配置就不细说了,下面再说一下这8个GPIO的配置. 4个引脚配推挽输出,这4个配输出的引脚内部上下拉不用配置:另外4个配成输入,内部上拉. 3.生成代码后,开始编写逻辑: 编写之前我们先做一下头文件的定义,把一些要用到的宏定

51单片机第四弹---矩阵键盘

原理图: 原理: 和独立键盘相似 /******************************************************************************* * 实 验 名 : 矩阵键盘实验 * 使用的IO : 数码管使用P0 矩阵键盘使用P3 * 实验效果 : 显示独立键盘的按键值 * 注 意 : *******************************************************************************/

利用中断实现的4*4矩阵键盘扫描

#include <reg51.h> #include <intrins.h> typedef unsigned char UINT8; typedef unsigned int UINT16; UINT8 num = 0, temp = 0, key = 16, t0 = 0, t1 = 0, shu = 0; /* 数码管编码 */ UINT8 code table[]= { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f

4x4矩阵键盘 扫描程序

一:不排除第四位异常处理 uchar JuzhenkeyScan() { // P3=0xfe; // temp=P3; // while(temp!=0xfe) // { // temp=P3; // switch(temp) // { // case 0xee:num=10; // break; // case 0xde:num=3; // break; // case 0xbe:num=2; // break; // case 0x7e:num=1; // break; // } // d

AVR单片机教程——矩阵键盘

本文隶属于AVR单片机教程系列. ? 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称