51单片机—矩阵键盘

STM32 按键检测 #include /****************************** **LED端口定义 ******************************/ #define LED0 PAout(8)// PA8 #define LED1 PDo 阅读详情
#include <reg52.h>
#include "./delay/delay.h"


#define KEYPORT P1
#define SEGPORT P0
sbit bit_select = P2^0;
sbit seg_select = P2^1;


unsigned char segdata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char bitdata[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char TempData[2];
void display()
{
	static unsigned char i = 0;
	SEGPORT = 0x0;
	seg_select = 1;
	seg_select = 0;

	SEGPORT = 0xff;
	bit_select = 1;
	bit_select = 0; //消重影

	SEGPORT = TempData[i];
	seg_select = 1;
	seg_select = 0;

	SEGPORT = bitdata[i];
	bit_select = 1;
	bit_select = 0;
	i++;
	if(2 == i)
	{
		i = 0;
	}


}
void timer0_isr(void) interrupt 1
{
	TH0 = (65536 - 2000) / 256;
	TL0 = (65536 - 2000) % 256;
	display();
}

void timer0_init(void)
{
	EA = 1;
	TH0 = (65536 - 2000) / 256;
	TL0 = (65536 - 2000) % 256;
	TL0 = 0xD8;
	ET0 = 1;
	TR0 = 1;
}
unsigned char key_scan(void)	 //获取矩阵键盘的物理键值
{
	unsigned char keyvalue;
	KEYPORT = 0xf0;
	if(0xf0 != KEYPORT) //有按键按下
	{
		delay_ms(10);
		if(0xf0 != KEYPORT) //确实有按键按下
		{
			KEYPORT = 0xfe;
			if(0xfe != KEYPORT)
			{
				keyvalue = KEYPORT;
				keyvalue &= 0xf0;
				keyvalue += 0x0e;     //过滤干扰
				while(0xfe != KEYPORT);//有按键抬起
				delay_ms(10);
				while(0xfe != KEYPORT);//确实有按键抬起
				return 	keyvalue;
			}
			KEYPORT = 0xfd;
			if(0xfd != KEYPORT)
			{

			}
			 KEYPORT = 0xfb;
			if(0xfb != KEYPORT)
			{

			}
			KEYPORT = 0xf7;
			if(0xf7 != KEYPORT)
			{

			}
		}
	}
	return 0xff;
}

unsigned char key_pro()	  //获取逻辑键值
{
	unsigned char keynum;
	keynum = key_scan();
	switch(keynum)
	{
		case 0x7e:return 0;break;
		case 0xbe:return 1;break;
		case 0xde:return 2;break;
		case 0xee:return 3;break;
		default:return 0xff;break;
	}
}
void main()
{
	unsigned char key;
	timer0_init();
	while(1)
	{
		key = key_pro();
		if(0xff != key)
		{
			
			TempData[0] = segdata[key / 16];
			TempData[1] = segdata[key % 16];
		
		
		}
	}
}





51单片机矩阵键盘_51单片机4×4矩阵键盘 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。结构:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。 阅读详情

相关推荐

51单片机矩阵键盘

矩阵键盘

2302_78279100的博客 1646

protues仿真键盘控制灯点亮

74LS373是一种带三态门的8D锁存器,当CLR为高电平且CLK端电平正跳变时,D0------D7端数据被锁存到8D触发器中,74LS244常用作三态数据缓冲器,OE有效时传送,OE无效时为高阻状态,P1口为独立式键盘的输入,P3口接8个发光二极管,按每个按钮对应的二极管亮。

使用51单片机矩阵键盘和LCD1602做一个密码锁

使用51单片机与LCD1602模块做了一个密码锁。

w736996104的博客 1万+

基于51单片机的多音阶电子琴proteus仿真程序原理设计

硬件设计 仿真图1: 总共二十几个按键,高中低音阶,同时可以播放歌曲,开机可设置显示学号 仿真图2: 7个音符按键,切换高中低音阶,同时可以播放歌曲 程序设计 #include<reg52.h> #define keyport P1 #define uchar unsigned char #define uint unsigned int uchar high,low; //定时器预装值的高8位和低8位 sbit speak=P3^0; sbit gao=P3^5; sbit di=P

weixin_44116175的博客 3688

单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序详解

51单片机矩阵键盘扫描程序详解#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换#define KeyPort P1sbit LATCH1=P2^2;//定义锁存使能端口 段锁存sbit LATCH2=P2^3;// 位锁存unsi...

weixin_42498249的博客 2816

步进电机综合控制

#include #define KeyPort P3 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[10]={0x3f,0x06

xyw_1122的博客 522

51单片机矩阵键盘

数码管扫描(输出扫描) 原理:显示第1位→显示第2位→显示第3位→……,然后快速循环这个过程,最终实现所有数码管同时显示的效果。因为它的扫描速度是非常快的,根据人的肉眼现象,你所看到的扫描都是同时进行显示的。这就是少量 IO 口,连接到矩阵减少 IO 口的一个目的。 矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。原理:跟数码管是极其相像的,扫描的过程其实是由电脑的显卡来进行扫描的这个是一 ​

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 3万+

51单片机实现矩阵键盘密码锁

51单片机上,使用矩阵键盘与led1602显示屏实现密码锁

weixin_54435584的博客 9042

51单片机(六)矩阵键盘矩阵键盘密码锁

相较于独立按键,矩阵键盘可以减少i/o口的占用。独立按键是每个按键都占用一个i/o口;而矩阵键盘是利用四行四列达到16个键盘占用8个i/o口的目的;减少了i/o口的占用。有点类似于利用坐标系,用行号和列号来定位具体的键盘。即采用逐行或逐列的“扫描”,就可以独处任何位置按键的状态。什么是扫描呢?

AnChenliang_1002的博客 5539

51单片机——矩阵键盘扫描(矩阵键盘1602显示及密码锁)

可以看到矩阵键盘是4*4的一个结构,而独立按键是2*4的结构从原理图可以看到,二者按键数量虽然不同,但I/O口数量均为8个,这也就是矩阵键盘的优势所在,大大减少了外设对I/O口的使用;独立按键:4个按键为一小组,一端接GND(低电平),另外一端连接4个I/O口,也就是说,通过给予I/O口高低电平进行按键的扫描矩阵键盘:低四位(接口1234)控制行,高四位(5678)控制列,也就是说整个按键就是一个坐标图,通过(行,列)/(列,行)坐标来进行扫描,从而判断哪个按键被按下。

m0_74225397的博客 5864

51单片机矩阵键盘的使用

首先据我个人理解,矩阵键盘其实和独立按键具有相似之处,独立按键把按键的公共端接在了GND上,另一端接在了IO口上,而矩阵键盘则是把一行的四个单独拿出去就是和独立按键差不多了。

2401_88049051的博客 2476

51单片机矩阵键盘控制数码管显示数字

51单片机矩阵键盘控制数码管显示数字 #include<reg51.h>//头文件 #define keys P1//宏定义矩阵键盘 #define smg P0//宏定义数码管 sbit SMGA=P2^2;//位定义 sbit SMGB=P2^3; sbit SMGC=P2^4; unsigned int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x

基极向上的三极管的博客 1万+

proteus进行51单片机矩阵键盘仿真实验

本文通过在proteus上搭建51单片机矩阵键盘电路并联合keil编程软件编写的源程序进行8*8矩阵键盘仿真,进而熟悉proteus仿真软件的仿真操作。 目录(一)4×4矩阵键盘原理1.逐行扫描2.行列扫描(二)8×8矩阵键盘设计1.proteus电路图设计2.程序设计3.矩阵键盘仿真效果(三)总结 (一)4×4矩阵键盘原理 1.逐行扫描 通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下;然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 2.

qq_45237293的博客 1万+

51单片机入门】矩阵键盘

在嵌入式系统设计中,键盘输入是一种常见的人机交互方式。其中,矩阵键盘因其简单、方便和易于扩展的特性,被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的设计,包括硬件连接、键盘扫描算法以及按键处理等内容。希望通过本文的学习,读者能够掌握矩阵键盘的基本原理和设计方法,为自己的项目提供强大的输入功能。矩阵键盘是一种常见的输入设备,它由多个按键组成,通常是以矩阵的形式排列。每个按键都有一个唯一的行和列位置,通过检测行和列的电平变化来确定按下的是哪个按键。

m0_62599305的博客 1472

51单片机矩阵键盘响应程序

51单片机矩阵键盘响应程序 #include // P0端口接LED // P0端口接数码管 // P3端口接矩阵键盘 #define LED P0 #define KEY P3 #define DIG P0 unsigned char GetKey(void); void delay10ms(void); // 独立数码管的段码表 unsigned char

xiongjianjunCSND的博客 1万+

51单片机——矩阵键盘+动态数码管

基于protues8,13,搭建51单片机最小系统连接4*4矩阵键盘(P3)和两位数码管(段选P0、位选P20\P21) 功能要求;两位数码管显示00~15,00~15与矩阵键盘对应,上电后数码管不显示,按下按键后显示对应的数字。

li_han_han的博客 3788

06 51单片机矩阵键盘

06 51单片机矩阵键盘

汽车软件工程师 | 好奇博主 | 处女座 1499

51单片机矩阵键盘程序

#include<reg52.h> typedef unsigned char uchar; typedef unsigned int uint; sbit a=P1^0; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; ...

weixin_45280176的博客 2697
上一篇: 51单片机—用蜂鸣器播放音乐
下一篇: 51单片机—LCD显示闹钟时间
cy941228
博客等级 码龄10年 68粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值