蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理

这篇具有很好参考价值的文章主要介绍了蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

独立按键

首先我们看一下按键的原理图,如图1,当J5中的2,3接在一起的时候,红线标注就是一个完整的电路图,此时只有s4、s5、s6、s7按键可以使用,也就是独立按键。例如:当我们按下s4时,电路导通,P33引脚被拉为低电平0,此时我们读取P33引脚电平的高低就能判断出哪个按键被按下。其他按键也是如此。

矩形按键的原理图,蓝桥杯单片机比赛学习,蓝桥杯,单片机,学习
图1 独立按键

消抖 

 消抖的方法包括:硬件消抖和软件消抖。硬件消抖主要是通过添加滤波电路消除抖动干扰。软件消抖则是延迟时间,当检测到按键状态发生变化时,延迟5~10ms的时间,让抖动消失后,再次检测按键的状态。我们在这里主要使用软件消抖。当我们按下按键时,整个过程的波形如下图2所示。所以,当我们检测到按键状态发生变化时,加一个10ms的延迟后,再次检测按键状态,如果与上次状态相同则说明按键被按下。

矩形按键的原理图,蓝桥杯单片机比赛学习,蓝桥杯,单片机,学习
图2 按键波形图

矩阵按键

如图3所示,J5中的1,2连接在一起就形成4X4的矩阵按键,这里我们设从下到上依次为Y1、Y2、Y3、Y4(行),从左到右依次为X1、X2、X3、X4(列),例如:想要扫描第一列时,只要使X1为低电平0,Y1、Y2、Y3、Y4为高电平1,此时如果没有按键按下,那么这个状态会一直保持。当S7按下的时候,由于X1为低电平0,S7按下电路导通,使得Y4也为低电平0。(这里我们就可以用代码判断:Y4的电平高低,当Y4为低电平时,说明S7按下)其他按键同理。

矩形按键的原理图,蓝桥杯单片机比赛学习,蓝桥杯,单片机,学习
图3 矩阵按键

这里我们最好使用 #include "stc15f2k60s2.h" 而不是  #include "reg52.h" ,下图我们对比一下,reg52.h中有很多端口没有声明。而stc15f2k60s2.h中则比较全面。大家有兴趣也可以自己去头文件里看一下。

矩形按键的原理图,蓝桥杯单片机比赛学习,蓝桥杯,单片机,学习
图4 reg52.h
矩形按键的原理图,蓝桥杯单片机比赛学习,蓝桥杯,单片机,学习
图5 stc15f2k60s2.h

代码实现 :

如使用独立按键请将矩阵按键代码屏蔽,反之亦然。

独立按键S4的功能:按下时8个数码管全亮,松开时8个数码管全灭。

矩阵按键S4、S8、S12、S16的功能:按下S4 L1 L2亮,按下S8L3 L4亮,按下S12 L5 L6亮,按下S16 L7 L8亮,松开熄灭。文章来源地址https://www.toymoban.com/news/detail-735592.html

#include "stc15f2k60s2.h"

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

//***********独立按键****************
sbit s7 = P3^0;
sbit s6 = P3^1;
sbit s5 = P3^2;
sbit s4 = P3^3;
//***********************************

//**********矩阵按键***************
//Y为行,X为列
sbit Y1=P3^3;
sbit Y2=P3^2;
sbit Y3=P3^1;
sbit Y4=P3^0;

sbit X1=P4^4;
sbit X2=P4^2;
sbit X3=P3^5;
sbit X4=P3^4;



void Delay1ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);
}

void delay_ms(int x)
{
	while(x--)
	{
		Delay1ms();
	}
}

/* 选择通道并且输入数据 */
void slect_138_573(unsigned char channel, unsigned char dat)
{
	P0 = 0x00;									/* 将原来P0口中的数据清0 */
	P0 = dat;										/* 这里用P0而不用其他端口是因为我们操作LED、数码管、继电器、蜂鸣器都是对P0进行操作 */
	switch(channel)							/* 选择通道 */
	{
		case 4:										/* 使Y4输出低电平0,也就是操作LED */
			P2 = (P2 & 0x1f) | 0x80;/* (P2 & 0x1f)就是将前3位清0,再操作前3位。将0x80转为2进制1000 0000,这里只看前3位100就是Y4 */
		break;
		case 5:										/* 使Y5输出低电平0,也就是操作继电器和蜂鸣器 */
			P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:										/* 使Y6输出低电平0,也就是操作8个数码管 */
			P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:										/* 使Y7输出低电平0,也就是操作8个数码管中的1个数码管显示值 */
			P2 = (P2 & 0x1f) | 0xe0;
		break;
		case 0:										/* 关闭所有通道 */
			P2 = (P2 & 0x1f) | 0x00;
		break;
	}
	P2 = (P2 & 0x1f) | 0x00;		/* 使用后,关闭所有通道 */
	
}



*****************************独立按键***********************
void anjian(void)
{  
  if(s4==0)
  {
    delay_ms(10);
    if(s4==0)
    {
				slect_138_573(4, 0x00);
				while(s4==0);
				slect_138_573(4, 0xff);
    } 
  }
  
  
  
}

********************************************************************



//******************************矩阵按键*********************************

//void anjian(void)
//{
//  Y1=0;//扫描第一行
//  Y2=Y3=Y4=1;
//  X1=X2=X3=X4=1;
//  if(X1==0)				/* s4 */
//  {
//		delay_ms(10);
//		if(X1==0)
//		{
//			slect_138_573(4, 0xfc);
//			while(X1==0);
//			slect_138_573(4, 0xff);
//		}
//  }
//  else if(X2==0)	/* s8 */
//  {
//    delay_ms(10);
//		if(X2==0)
//		{
//			slect_138_573(4, 0xf3);
//			while(X2==0);
//			slect_138_573(4, 0xff);
//		}
//  } 
//  else if(X3==0)	/* s12 */
//  {
//    delay_ms(10);
//		if(X3==0)
//		{
//			slect_138_573(4, 0xcf);
//			while(X3==0);
//			slect_138_573(4, 0xff);
//		}
//  } 
//  else if(X4==0)	/* s16 */
//  {
//    delay_ms(10);
//		if(X4==0)
//		{
//			slect_138_573(4, 0x3f);
//			while(X4==0);
//			slect_138_573(4, 0xff);
//		}
//  } 
//  
//  
//}

//***********************************************************************
void main(void)
{
	slect_138_573(0,0x00);
	slect_138_573(4,0xff);
	slect_138_573(5,0x00);
	slect_138_573(6,0xff);
	slect_138_573(7,0xff);
  while(1)
  {
    anjian();
  }
}

到了这里,关于蓝桥杯单片机比赛学习:3、独立按键与矩阵按键的基本原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机——独立按键实验,小白讲解,相互学习

    按键介绍:         按键是一种电子开关,使用时轻轻按开关按钮就可式开关接通,当松手时,开关断开。开发板上使用的按键及内部简易图如下图:         按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态,如果按键按下,初始导通状态变为断

    2024年02月04日
    浏览(55)
  • 【51单片机】LED与独立按键(学习笔记)

    LED:发光二极管 补:电阻读数 102 = 10 00 = 1k 473 = 47 000 1、新建工程:Project = New Project Ctrl + Shift + N :新建文件夹 2、选型号:Atmel-AT89C52 3、xxx提示?选否 4、Source Group = 右键 = Add New Item … = C文件\\\"main.c\\\" 5、设置勾选创建HEX File文件 6、编译 CPU通过对寄存器的控制,寄存器通过驱

    2024年02月06日
    浏览(47)
  • 关于蓝桥杯单片机 官方例程 矩阵按键 消抖原理 ‘s 解释

    关于蓝桥杯单片机官方例程矩阵按键消抖原理解释 芯片:IAP15F2K60S 蓝桥杯原书41页官方例程 最开始我以为这款开发板有硬件消抖,对于下面这部分代码一直当作固定格式写,最近回看,发现其中另有“玄机”。 这里默认大家看过并且会了 = = 之前的按键扫描例程了 众所周知

    2023年04月08日
    浏览(37)
  • 蓝桥杯单片机比赛学习:12、DS1302时钟基本原理与使用方法

    DS1302是 DALLAS 公司推出的时钟芯片,内含一个实时时钟/日历和 31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。 但是在我们比赛中一般只需要写/读时钟。 DS1302可以采

    2024年02月02日
    浏览(49)
  • 蓝桥杯单片机比赛学习:9、PCF8591的基本原理和使用方法

    前面一节我们说了PWM呼吸灯的基本原理和使用方法,下面我们来看第二个模块,也是蓝桥杯单片机比赛中常考的一个模块——PCF8591。 我主页有其他模块的使用方法和基本原理(2条消息) Do My Best的博客_CSDN博客-蓝桥杯单片机比赛学习领域博主 PCF8591实际上就是一个具有 I2C 总线

    2024年02月02日
    浏览(45)
  • 51单片机——矩阵按键实验,小白讲解,相互学习

    矩阵按键介绍:         独立按键与单片机连接时,每一个按键都需要单片机的一个I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O 口资源.单片机系统中I/O 口资源往往比较宝贵,当用到多个按键时为了减少I/O 口引脚,引入了矩阵按键。       

    2024年02月12日
    浏览(50)
  • 51单片机 --独立按键

    前言 前几章介绍的都是IO 口输出的使用,这一教程我们通过独立按键实验来介绍IO 口作为输入的使用。开发板上板载8 个独立按键。本教程所要实现的功能是:通过开发板上的独立按键K1 控制D1 指示灯亮灭。大家可以参考前面的实验内容。 一、按键介绍 按键是一种电子开关

    2024年02月06日
    浏览(59)
  • 单片机之独立按键(多种按键代码编写)

    单片机之独立按键原理:按键右端接GND,左边接到单片机的IO口,同时接了一个上拉电阻,当按键未按下时,P2.0为高电平(学过模电的人都应该知道为什么吧)当按键按下时,相当于P2.0口与GND相连为 低电平。

    2024年02月03日
    浏览(60)
  • 单片机独立按键扫描程序

    为了方便,写一些方便的程序片段以便以后使用 首先是定时器扫描按键给两个例子: 一: 二:

    2024年02月16日
    浏览(49)
  • 四、51单片机控制独立按键

    按键相关知识。 1.1、按键工作原理 (1)按键内部是机械结构,也就是内部是没有电路的。按键对外表现位四个引脚,但本质上只是两个,引脚是两两连在一起的。按键按下内部引脚导通,松开内部断开。 (2)电路连接与原理图中图标。 按键一端接地,一端接单片机IO口。  (3)按

    2023年04月14日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包