清翔零基础教你学51单片机_个人学习笔记(6)_独立按键
一、按键的工作原理
轻触开关样式:

它的背面有一个曹
曹一侧的两个引脚是联通的,曹两侧的引脚在开关没按下时是不联通的
当按键按下之后,4个脚全部联通,为避免用错,建议使用时用对角的两个引脚,这样按下才会联通,不容易用错
二、开发板上按键分类
上图,清晰明了

三、原理图

四、原理
当按键按下,对应的引脚机会被拉为低电平,读取引脚电平就知道哪个按键被按下了
五、编程
5.1 创建工程
复制工程模板,改名“6.独立按键”,进入工程文件夹打开工程
5.2 现象说明
当按下S2,数码管显示的一位数+1
5.3 代码
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
void delay(unsigned int i);
void SEG_DIS(uchar position, uchar number);
uchar we[8];
uchar du[25];
sbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选
sbit key_s2 = P3^0;
void main()
{
uchar num;
SEG_DIS(1,num);
while(1)
{
if (key_s2 == 0)
{
delay(20); //按键消抖
if (key_s2 == 0)
{
num++;
if (num == 10) //当num加到10,让nun重新变成0
num = 0;
SEG_DIS(1,num); //实现按下立马改变现实值
}
while (!key_s2); //松手检测,避免按着按键没松手导致数值连续增加
}
}
}
void SEG_DIS(uchar position, uchar number)
{
DU = 0;
WE = 0;
P0 = we[position - 1];
WE = 1;
WE = 0;
P0 = du[number];
DU = 1;
DU = 0;
delay(1);
}
uchar we[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
uchar du[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void delay(unsigned int i)
{
unsigned int j;
for (; i > 0; i--)
for (j = 114; j > 0; j--);
}
显示效果为按下s2,数码管显示数值立马+1,如果数值为9再按下s2,显示数值变为0
5.4 添加s3按下-1代码
//在main函数前面添加
sbit key_s3 = P3^1;
//在while循环里面添加如下代码
if (key_s3 == 0)
{
delay(20);
if (key_s3 == 0
{
num--;
SEG_DIS(1,nu
}
while (!key_s3);
添加这两处代码就行了,按下s2数码管数值+1,当数值=9再按下s2数码管显示0;当数码管数值≠0,按下s3数值-1,当数值 == 0,按下s3无反应。均是按下立即触发而不是松手触发。

浙公网安备 33010602011771号