单片机控制led灯的创新点是什么

单片机控制led灯的创新点是什么,第1张

单片机控制led灯的创新点是,LED的阳极全部接到了正极(电源),当负极接到LED的阴极时就会发光,因为LED的阴极与单片机的P2口相接,如果你想点亮那一个LED就把单片机相应的引脚赋值为低电平。具体如下:1、LED基础知识

LED是发光二极管的一种,它具有单向导电的特点,在51开发板上使用的是贴片式发光二极管,正向导电电压在1.8-2.2v之间,工作时的电流在1-20mA。当电流在1-5mA之间变化时,肉眼可以观测到亮度的变化,但是当电流在5-20mA之间变化时,亮度变化不太明显。如果电流一直增大二极管可能会烧坏。其余LED知识就不再进行叙述,其中LED原理图如下图所示。

LED原理图

2、点亮第一个LED灯

由原理图可知,LED的阳极全部接到了正极(电源),当负极接到LED的阴极时才会发光,因为LED的阴极与单片机的P2口相接,如果你想点亮那一个LED就把单片机相应的引脚赋值为低电平,具体程序如下:

#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

sbit led=P2^0 //将单片机的P2.0端口定义为led

void main()

{

while(1)

{

led=0//P2.0端口设置为低电平

}

}

1

2

3

4

5

6

7

8

9

10

11

12

1

2

3

4

5

6

7

8

9

10

11

12

3、LED闪烁

如果想让LED进行闪烁就要涉及到延时,针对单片机进行延时的方法有很多,在耐樱此向大家推荐一种比较简单的程序助手—单片机小精灵,可以直接进行设置时间,并且生成相应的代码。

将P2^0引脚的LED进行间隔一秒闪烁的程序如下:

#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

#include "intrins.h" //头文件

sbit led=P2^0 //将单片机的P2.0端口定义为led

void delay1s() //延时1s,误差 0us

{

unsigned char a,b,c

for(c=46c>0c--)

for(b=152b>0b--)

for(a=70a>0a--)

_nop_() //if Keil,require use intrins.h

}

void main()//主猛亩型程序

{

while(1)

{

led=0//P2.0端口设置为低电平

delay1s()//调用延时函数

led=1//P2.0端口设置为低电平

delay1s()

}

}

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

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

为了使程序更好的进行表达,使用16进制进行表述枝猜,程序如下:

#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

#include "intrins.h" //头文件

void delay1s() //延时1s,误差 0us

{

unsigned char a,b,c

for(c=46c>0c--)

for(b=152b>0b--)

for(a=70a>0a--)

_nop_() //if Keil,require use intrins.h

}

void main()//主程序

{

while(1)

{

P2=0xFE//P2.0端口设置为低电平

delay1s()//调用延时函数

P2=0xFF//P2.0端口设置为低电平

delay1s()

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

上面是针对一个LED灯进行的设计,下面针对8个LED灯依次闪烁进行设计,具体程序如下:

#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

#include "intrins.h" //头文件

void delay1s() //延时1s,误差 0us

{

unsigned char a,b,c

for(c=46c>0c--)

for(b=152b>0b--)

for(a=70a>0a--)

_nop_() //if Keil,require use intrins.h

}

void main()//主程序

{

while(1)

{

P2=0xFE//1111 1110

delay1s()//调用延时函数

P2=0xFD//1111 1101

delay1s()

P2=0xFB//1111 1011

delay1s()

P2=0xF7//1111 0111

delay1s()

P2=0xEF//1110 1111

delay1s()

P2=0xDF//1101 1111

delay1s()

P2=0xBF//1011 1111

delay1s()

P2=0x7F//0111 1111

delay1s()

}

}

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

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

4、LED左右移动

上面进行描述的是利用延时并对P2口引脚进行赋值设计LED灯的闪烁,这样程序较为繁杂,下面将利用“左移”和“右移”进行设计,crol(a,b),左循环,a是左移的值,b是左移的位数;cror(a,b),右循环,a是右移的值,b是右移的位数。包含在instrins.h库函数中。具体程序如下:

#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

#include "intrins.h" //头文件,包含延时(_nop_ )和函数循环

typedef unsigned int u16//声明新类型名

typedef unsigned char u8//声明新类型名

#define led P2//宏定义

void delay1s() //延时1s,误差 0us

{

u8 a,b,c

for(c=46c>0c--)

for(b=152b>0b--)

for(a=70a>0a--)

_nop_() //if Keil,require use intrins.h

}

void main()//主程序

{

u8 i//定义i的类型

led=0xFE

delay1s()

while(1)

{

for(i=0i<7i++)//左移

{

led=_crol_(led,1)

delay1s()

}

for(i=0i<7i++)//右移

{

led=_cror_(led,1)

delay1s()

}

}

}

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

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

5、总结

以上程序均进行了实验验证,完全正确。针对LED灯的控制,可以和按键进行联合设计,实现更多的功能,后面会进行更新。对于没有单片机开发板的小伙伴可以利用proteus仿真软件进行设计。

方法其实瞎斗有很多啊,给你列出几种吧:

用移位实睁神掘悉核现跑马灯

#include<reg52.h>

#include<intrins.h>

#define uint unsigned

int

#define uchar unsigned char

#define DELAY_CONST 50000

uchar value = 0xfe

void Delay(uint n)

{ uint i

for(i = 0; i <n;i ++)

}

void main(void)

{ while(1){

Delay(DELAY_CONST)

P2 = value

value <<= 1

if(value==0x00){

value = 0xfe}

}

}

这个思路跟一楼的差不多,

但绝对是自己写的

2.用数组编写程序

#include <reg51.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void main()

{uint a

while(1){

for(a=0a<9,a++)

{P0=table[a]

delay(1000)}

}}

用位 *** 作实现

#include <reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit D0=P0^0

sbit D1=P0^1

sbit D2=P0^2

sbit D3=P0^3

sbit D4=P0^4

sbit D5=P0^5

sbit D6=P0^6

sbit D7=P0^7

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void main()

{

while(1)

{P0=0xff

delay(1000)

D0=0

delay(1000)

D1=0

delay(1000)

D2=0

delay(1000)

D3=0

delay(1000)

D4=0

delay(1000)

D5=0

delay(1000)

D6=0

delay(1000)

D7=0

delay(1000)

}

}

最基本的编程方法(看起来有点多余)

1.最基本赋值语句编写

#include <reg51.h>

#define uint unsigned int

#define uchar unsigned char

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void main()

{

while(1)

{

P0=0xff

delay(1000)

P0=0xfe

delay(1000)

P0=0xfc

delay(1000)

P0=0xf8

delay(1000)

P0=0xf0

delay(1000)

P0=0xe0

delay(1000)

P0=0xc0

delay(1000)

P0=0x80

delay(1000)

P0=0x00

delay(1000)

}

}

具体步骤如下:

1、首先,开启我们的keil软件,具体的安装步骤就不做太多的介绍了;

开启后,点击菜单栏上的Project选项,创建我们的工程,如图所示;

2、点击后,d出图中的窗口,在箭头所指的文本框中输入你培袭的芯片型号进行查找,如果没有需要自行将芯片添加到keil软件的库下,如图所示;

3、选中芯片点击Ok即可,在左侧的文本框中,选中图中选项右键选择Add New...选项,如图所示;

4、选择.c的文件,输入文件名以及文件的存储目录,如图所示;

5、点击OK后,在我们添加的文本框中输入我们的程序代码,如图所示;

6、编写好代码以后,选择菜单栏上的魔法棒选项,如图所示;

7、选择Output选项,将图中箭头所指的选项,选中,点击ok,如图所示;斗纯

8、然后点击编译选项,如图所示;

编译完成后,在我们的文件夹下找到.hex的文件,将其烧写到我空中咐们的芯片中即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12387701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存