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的文件,将其烧写到我空中咐们的芯片中即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)