51按键及按键矩阵(复习)

发布于:2022-10-16 ⋅ 阅读:(443) ⋅ 点赞:(0)

该知识点来源于B站知弦本章便是对其按键应用的简单总结!!!

一、按键的简单使用

1、仿真

即在数码管的基础上添加一个按键,并且加上拉电阻,具体如原理图所示:

 2、程序部分

主要功能为按下一次按键,数码管的数字自动加一,该程序对按键消抖有点要求,程序所使用的是添加标志位的方法达到消抖的目的(或者可以使用延时的方法消抖),具体程序如下:

#include "reg51.h"
sbit key_button=P1^0;
unsigned int num=0,flat=0;
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void key()
{
	if(key_button==0&&flat==0)
	{
		flat=1;
	}  
	if(key_button==1&&flat==1)
	{
		num++;
		flat=0;
	}
}

void display()
{
	 P2=s[num];
	 if(num==10)
	 {
	 	num=0;
	 }
}

void main()
{
	while(1)
	{	
		key();
		display();
	}
}

二、按键矩阵

1、仿真

该仿真使用到的元器件搜索:7seg、button、At89c51

原理图中为3*3大小的按键矩阵,

分别接3个P1.0、P1.1、P1.2 、、、以及、、、P1.4(注意不是P1.3)、P1.5、P1.6(如下图所示)

2、程序部分

 功能:按下第一行第一列的按键,数码管第一个位置显示1,按下第一行第2列的按键,数码管第2个位置显示2,由此类推,最后第8个位置显示8(原理图中为按下第1行第3列的按键显示为3);

程序设计的思路:首先初始化P1为0x70(0111 0000),若第一个按键按下时则会变为0x60(0110 000),这是确定了行数,,,再次初始化P1为0x07(0000 0111),若按下第一个按键则变为0x06(0000 0110),相加后,由此就可以知道第一个位置的P1值为0x66。

其余按键位置同样的计算,不明白的话在B站找知弦的视频看(第10集):按键的原理及独立式按键的实现_哔哩哔哩_bilibili

具体程序如下:

#include "reg51.h"
int temp0=0,temp1=0,temp=0;
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void key_scan()
{
	P1=0x70;
	if(P1!=0x70)
	{
		temp0=P1;
		P1=0x07;
		if(P1!=0x07)
		{
			temp1=P1;
		}
	}
}

void display()
{
	temp=temp0+temp1;
	if(temp==0x66)
	{
		P3=~0x01;
		P2=	s[1];
	}
	if(temp==0x65)
	{
		P3=~0x02;
		P2=	s[2] ;
	}
	if(temp==0x63)
	{
		P3=~0x04;
		P2=	s[3];
	}
	if(temp==0x56)
	{
		P3=~0x08;
		P2=	s[4] ;
	}
	if(temp==0x55)
	{
		P3=~0x10;
		P2=	s[5];
	}
	if(temp==0x53)
	{
		P3=~0x020;
		P2=	s[6] ;
	}
	if(temp==0x36)
	{
		P3=~0x40;
		P2=	s[7] ;
	}
	if(temp==0x35)
	{
		P3=~0x80;
		P2=	s[8];
	}
}

void main()
{
	while(1)
	{
		key_scan();	
		display();
	}
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到