独立按键控制LED

这个小节我们再来看一下51单片机的按键怎么控制LED

1.实现最简单的按键控制LED的案例

我们只需要不断扫描按键输入的那个端口,按键按下的时候,端口输入电压为0,随时扫描端口,发现输入端口的电压为0的时候,就可以点亮LED。

1
2
3
4
5
6
7
8
9
10
11
12
#include <REGX52.H>

void main(){

while(1){
if(P3_1==0){
P2=0xFE;
}else{
P2=0xFF;
}
}
}

2.我们再来看一下数据处理的逻辑

在这里要注意一下逻辑与和按位与的区别即可
还有要注意一下<<为按位左移,>>为按位右移

异或的概念:两个数不同才为1,相同则为0

3.按键原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <REGX52.H>

void Delayxms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}

void main(){
while(1){
if(P3_1==0){
Delayxms(20);
while(P3_1==0);
Delayxms(20);
P2_0=~P2_0;
}
}
}

4、独立按键控制LED显示二进制

这个代码实现的功能就是每次加一,就会模拟二进制加一的进位。一共有八位,到达最大值255的时候,变为0.如何从0又开始增加,不断往复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <REGX52.H>

unsigned char LED_Num=0;

void Delayxms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}

void main(){
P2=~LED_Num;
while(1){
if(P3_1==0){
Delayxms(20);
while(P3_1==0);
Delayxms(20);
LED_Num++;
if(LED_Num>0xFF){
LED_Num=0;
}
P2=~LED_Num;
}
}
}

5、独立按键控制LED移位。

在这个独立按键控制LED移位的代码中,我们要先注意一个点就是(0x01<<7)就是已经到达1000 0000这个二进制数了。这个点经常出错。
可以控制按键实现LED灯的左移和右移
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <REGX52.H>

char i=0;

void Delayxms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}

void main(){
while(1){
P2=~(0x01<<i);
if(P3_1==0){
Delayxms(20);
while(P3_1==0);
Delayxms(20);
i++;
if(i==8){
i=0;
}
}
if(P3_0==0){
Delayxms(20);
while(P3_0==0);
Delayxms(20);
i--;
if(i==-1){
i=7;
}
}
}
}

独立按键控制LED
http://example.com/2025/05/11/独立按键控制LED/
Author
John Doe
Posted on
May 11, 2025
Licensed under