这是一篇 2017–2018 年的嵌入式学习笔记,保留当时的工具、代码和实验过程。 查看系列目录

1
科普:LED的开启电压是2V,反向击穿电压是5v,工作电压约为3v,通常正向电流为10~20mA,当电流在3~10mA时,led亮度与电压成反比。电流超过30mA的时候,led会烧毁,一般串联300欧姆左右的电阻。

windows下仿真程序(proteus+keilc)

点亮一个灯

proteus的仿真图:

原图(暂不可用)

点亮一个灯

keilc的代码如下:

1
2
3
4
5
6
#include <reg51.h>
void main()
{
P1 = 0;
while(1);
}

led闪烁

原图(暂不可用)

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
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

sbit led P1^0

void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}

void main()
{
while(1)
{
led = ~led;
delay(100);
}
}

心形流水灯

原图(暂不可用)

心形流水灯

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
//version 1
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code led[] = {
0xfe, 0xfd,0xfb,0xf7,
0xef, 0xdf,0xbf,0x7f};

void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}



void main()
{
uchar i=0 ;
while(1)
{
P1 = led[i];
i = (i+1)%8;
delay(50);
}
}
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
//version 2
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code led[] = {
0xfe, 0xfd,0xfb,0xf7,
0xef, 0xdf,0xbf,0x7f};

void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}



void main()
{
uchar i=0 ;
while(1)
{
for(i = 0; i<8;i++)
{
P1 = led[i];
delay(70);
}
}
}

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
//version 3
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

void delay(uint timer)
{
uchar j = 124;
while(timer--)
{
while(j--);
}
}

void main()
{
uchar i;
while(1)
{
for(i = 0;i<8;i++)
{
P1 = ~(1<<i);
delay(200);
}
}
}

原图(暂不可用)