原创 [博客大赛]51单片机-点亮led

2012-10-9 11:07 1664 8 9 分类: MCU/ 嵌入式

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

b_large_iwAO_48e3000013d51263.jpg

单片机接口输出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个发光二极管逐次点亮,然后循环。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户424277 2012-10-11 15:01

支持,会不会是连载呢
相关推荐阅读
用户412802 2013-10-11 21:26
【博客大赛】AD9834,高性能信号发生器的选择
  AD9834简介 AD9834是一款75 MHz、低功耗DDS器件,能够产生高性能正弦波和三角波输出。其片内还集成一个比较器,支持产生方波以用于时钟发生。当供电电压为3 V时,其功耗仅...
用户412802 2013-04-22 16:47
想学就学,EDN助你一臂之力!拿板子参加嵌入式主题大赛
  就这几个月入门进阶FPGA,边参加嵌入式主题大赛,边学习FPGA!加入FPGA入门小组一起学!       新手快来,原理有文档文档介绍,网友在完成此次的基础上,可尽情发挥,重在学习领...
用户412802 2013-02-19 10:55
ouryk回来,活动继续
最近一直忙着其他事情,小组等活动暂停了,不过现在回来了,继续完成承诺,给以最大优惠奉献大家,欢迎关注我的小组 我爱单片机...
用户412802 2013-01-12 17:09
2013的我们
2013的我们该怎么生活,技术路线,职业生涯,希望大家一起好好讨论下...
用户412802 2012-12-11 13:11
【告别2012】我们一起破2012还继续,奋斗着,学习着
2012即将结束,拿出手上的资源,让利给大家 单片机200 包邮价格 带液晶屏 http://item.taobao.com/item.htm?spm=a1z10.3.0.76.3bpjHq&...
用户412802 2012-11-30 08:53
【博客大赛】DIY个性时钟与温度计
   学了51,你可以自己diy个性时钟与温度计,让你的东西与众不同,让同学们羡慕去吧 [注:AT89S52使用12M晶振]======================================...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条