【51单片机】LED流水灯
前言
最近突然想玩一玩单片机,就从拼夕夕上买了个51单片机开发板,客服很好,资料很全,今下午刚到手,就迫不及待的整了个LED流水灯玩玩,体验很不错,Nice!
LED流水灯
什么是单片机 ?
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器、串口等功能集成到一块硅片上构成的一个小而完善的计算机系统,通常称为微控制器。
这是我从网上买的51单片机的外观图片,大致就是这个样子

硬件知识
硬件的东西一说就是一大堆,在这就说一说芯片引脚吧,其他的就不多说了,大家有兴趣的可以自己百度一下。
51单片机引脚分类
(1)电源引脚: 引脚图中的 VCC、 GND 都属于电源引脚。
(2)晶振引脚: 引脚图中的 XTAL1、XTAL2 都属于晶振引脚。
(3)复位引脚: 引脚图中的 RST/VPD 属于复位引脚,不做其他功能使用。
(4)下载引脚: 51 单片机的串口功能引脚 (TXD、RXD) 可以作为下载引脚使用。
(5) GPIO (general purpose intput output,通用输入输出端口)引脚: 引脚图中带有 Px.x等字样的均属于GPIO引脚
LED简介
LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3 mA - 20 mA 之间,通常我们会在 LED 管脚上串联一个电阻,目的就是限制电流。
下面是这个开发板上的LED模块的电路图

通过分析这个原理图我们可以得知,这个LED 采用共阳接法,即所有LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到 P2 口上。
从上图中我们可以看到 D1-D8 连接在单片机的 P20-P27 口上,要知道,让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭,所以我们要想控制开发板上的LED灯,就必须通过单片机管脚在 P2 口上输出低电平。
实现LED流水灯
要实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮,同样我们还需要用到延时,不然无法体现出流水灯的效果。将移位和循环结合起来就可以了
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
void delay (u16 i)
{
while(i--);
}
void main()
{
while (1){
u8 i = 0;
for (i = 0; i <= 8; i++)
{
P2 = (0x01<<i);
delay (50000);
}
}
}
//51仿真器的调试结果如下
C:0x0000 020029 LJMP C:0029
11: void main()
12: {
13: while (1){
14: u8 i = 0;
C:0x0003 E4 CLR A
C:0x0004 F508 MOV 0x08,A
15: for (i = 0; i <= 8; i++)
C:0x0006 F508 MOV 0x08,A
16: {
17: P2 = (0x01<<i);
C:0x0008 AF08 MOV R7,0x08
C:0x000A 7401 MOV A,#0x01
C:0x000C A807 MOV R0,0x07
C:0x000E 08 INC R0
C:0x000F 8002 SJMP C:0013
C:0x0011 C3 CLR C
C:0x0012 33 RLC A
C:0x0013 D8FC DJNZ R0,C:0011
C:0x0015 F5A0 MOV P2(0xA0),A
18: delay (50000);
C:0x0017 7F50 MOV R7,#0x50
C:0x0019 7EC3 MOV R6,#0xC3
C:0x001B 120035 LCALL delay(C:0035)
19: }
C:0x001E 0508 INC 0x08
C:0x0020 E508 MOV A,0x08
C:0x0022 D3 SETB C
C:0x0023 9408 SUBB A,#0x08
C:0x0025 40E1 JC C:0008
C:0x0027 80DA SJMP main(C:0003)
C:0x0029 787F MOV R0,#0x7F
C:0x002B E4 CLR A
C:0x002C F6 MOV @R0,A
C:0x002D D8FD DJNZ R0,C:002C
C:0x002F 758108 MOV SP(0x81),#0x08
C:0x0032 020003 LJMP main(C:0003)
6: void delay (u16 i)
7: {
8: while(i--);
C:0x0035 EF MOV A,R7
C:0x0036 1F DEC R7
C:0x0037 AC06 MOV R4,0x06
C:0x0039 7001 JNZ C:003C
C:0x003B 1E DEC R6
C:0x003C 4C ORL A,R4
C:0x003D 70F6 JNZ delay(C:0035)
9: }
C:0x003F 22 RET
C:0x0040 00 NOP
最后将程序烧录进我们的开发板就可以了
总结
这小东西还挺好玩儿,后续会持续更新,go语言的最快明天更,感谢观看,若有什么疑问欢迎评论区一起讨论,大家一起进步!

浙公网安备 33010602011771号