首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51单片机-点亮led

51单片机-点亮led

二极管的发光原理:当发光二极管中流过的电流达到一定值时,二极管便会发光,一般情况下,这个电流值是3~10mA(稍微大于10mA也可以,不过最好不要大于20mA,否则二极管会被烧坏),所以我们要点亮发光二极管就是让他流过的电流在这个范围内。我们可以在二极管的阳极端加上上拉电阻,并且加上VCC,阴极端接在单片机的接口。由电路知识可知,当阴极端为低电平时,二极管导通,发光。即单片机接口输出低电平时,二极管发光。所以,我们要点亮二极管,就是要让单片机接口输出低电平。

单片机接口输出1代表高电平,输出0代表低电平。(上图中U4代表锁存器,可不予理会,相当于直接和单片机接口连接)接下来我们来看一个,具体程序:
# include<reg51.h> //头文件声明
sbit led=P1^0; //把P1的第零个口起个名字叫led,以后led就代表P1的第零个口
void main()
{
led=0; //让P1的第零个口输出低电平,此时发光二极管点亮
while(1); //让程序停在此处,即P1的第零个口始终输出低电平,二极管始终点亮
}
接下来看一个更高级的程序:
# include<reg51.h>
# include<intrins.h> //_crol_函数的头文件
# define uchar unsigned char //宏定义,让uchar代表unsigned char
sbit p2_0=P2^0; //让p2_0代表P2的第零个口
uchar temp;
void delay(); //延时函数
void main()
{
temp=0xfe; //把temp定义为0xfe,即11111110
P1=temp; //把temp赋值给P1
while(1)
{
temp=_crol_(temp,1); //调用_crol_函数
p2_0=0;
delay(); //调用延时函数,即让P2的第零个灯亮一段时间
P1=temp;
p2_0=1; //熄灭P2的第零个灯
delay(); //调用延时函数,即让P2的第零个灯灭一段时间
}
}
void delay() //delay 函数
{
uint x,y;
for(x=301;x>0;x--)
for(y=414;y>0;y--);
}
_crol_ 函数使用,循环左移函数,表示一个无符号字符型个位循环向左移,_crol_(a,b)表示无符号字符型数据a循环向左移动b个位置,如本例中的 temp=_crol_(temp,1); 表示将temp循环左移1位,刚开始temp为11111110,循环左移一位后为11111101,左边的1一道最右边,若是01111111循环左移一位为11111110,最左边的0移到最右边。本程序就是让8个发光二极管逐次点亮,然后循环。
返回列表