该知识点来源于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 后查看