点亮LED和按键控制LED

这篇文章我们来入门51单片机编程的第一小节,我们来学习一下如何使用51单片机点亮LED和如何使用按键控制LED产生流水灯等

1.电阻的数码表示方法

对于电阻而言,数码表示法是用三位数字来表示其阻值。具体规则如下:

​​前两位数字​​:代表有效数字,即阻值的基本组成部分。
​第三位数字​​:表示10的幂次,也就是要将前两位数字乘以 10 的该幂次方,从而得到实际的电阻阻值,单位为欧姆(Ω) 。

实际举例如下:

2.寄存器和驱动器

我们来看一下在芯片当中,寄存器是怎么操作I/O端口的

寄存器在单片机当中用于存储数据,往往在下一次触发信号到临之前保存上一个时刻的数据 寄存器通过驱动器的作用,会有强大的驱动能力,进而可以控制I/O口的输出高电平或者输出低电平

在51单片机当中我们采用的是TTL电平,也就是1表示5V,0表示0V

3.点亮一个LED

我们先来看一下在51开发板当中LED模块的原理图:

我们如果想要点亮D1这个编号的LED,我们只需要在D1这个LED一端输出低电平,这个时候就跟LED另一端的VCC形成一个闭合回路,点亮LED。

代码:

1
2
3
4
5
6
7
8
#include <REGX52.H>

void main(){
P2=0xFE;
while(1){

}
}

4.LED闪烁

在实现LED闪烁的时候,我们可以使用简单的延时函数进行一个延时,可以在STC-ISP当中使用延时函数生成工具生成一个固定时长的延时函数

实现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
#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;

_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

void main(){
while(1){
P2=0xFE;
Delay500ms();
P2=0xFF;
Delay500ms();
}
}

注意点:在引入空语句函数_nop_()之前需要先引入头文件#include<INTRINS.H>

5.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
#include <REGX52.H>

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

void main(){
while(1){
P2=0xFE;
Delayxms(500);
P2=0xFD;
Delayxms(500);
P2=0xFB;
Delayxms(500);
P2=0xF7;
Delayxms(500);
P2=0xEF;
Delayxms(500);
P2=0xDF;
Delayxms(500);
P2=0xBF;
Delayxms(500);
P2=0x7F;
Delayxms(500);
}
}

6.无符号数和有符号数的表示范围

我们在这里主要是要记住不同符号数的表示范围

无符号数的取值范围为0~2^n-1
有符号数的取值范围为-2^(n-1)到2^(n-1)-1
我们需要把这几个重点的知识点记住即可


点亮LED和按键控制LED
http://example.com/2025/05/10/点亮LED和按键控制LED/
Author
John Doe
Posted on
May 10, 2025
Licensed under