🌹作者简介: @鹤辞 ,喜欢玩弄单片机,嵌入式,PCB制作,电路设计等等,希望自己的学习经历经验能够对你们有启发

🌹前期回顾:单片机之中断系统篇_@鹤辞的博客-CSDN博客

🌹努力目标:突破1000粉丝

🌹支持鹤辞:点赞👍,留言👏, 关注💖,收藏🤞
 

 51单片机独立按键

按键的基本原理

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

按键的消抖(重点)

 可以从上图看到,断开和闭合之间有一些毛刺现象,这样,当我们按键按下时,我们无法判别此时P2.0口到底是高电平还是低电平,所以,这是我们要解决的问。

通常按键消抖有两种方式:

1,软件消抖(简易,省资源,常用)

利用延时程序代码进行消除抖动的一种方式。

2,硬件消抖

 主要利用锁存器来实现按键消抖的一种方式。

3,利用protues实现模拟

仿真视频连接:https://video-community.csdnimg/vod-84deb4/3a529b43ee9042318901de6572c6a7ac/snapshots/7876adef0122495fa2ba5a2e36e83400-00002.jpg?auth_key=4811481057-0-0-2de201306ecba0f11d6395d528c01996

代码多种编写:

第一种编写:

#include <reg52.h>
sbit key=P2^0;
unsigned char smg[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
bit falg=0;
unsigned char num=0;
void key_scan()
{
  if(key==0&&falg==0)
	{
	  falg=1;
	}
	if(key==1&&falg==1)
	{
	  num++;  falg=0;
	}
}
void smg_display()
{
  P3=smg[num];
	if(num==10)
		num=0;
}
int main()
{
	while(1)
	{
	key_scan();
	smg_display();
	}
 }

 第二种编写:

void key()
{
  if(key_1==0)
	{
	Delay10ms();
		if(key_1==0)
			led=~led;
	}
  while(!key_1);
}

❀❀❀下期:矩阵键盘多种编写

文章制作不易,感谢你的喜欢!点赞👍,留言👏, 关注💖,收藏🤞

下期再见吧🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍🐱‍🏍

更多推荐

单片机之独立按键(多种按键代码编写)