点亮一个发光二极管LED--51的第一个程序

点亮一个发光二极管LED--51的第一个程序

一、发光二极管LED的参数

要点亮LED,首先要清楚LED的参数,这样才能将它点亮。LED的压降一般为1.5~2.0 V,其工作电流一般取10~20 mA为宜。换句话说,只要我们给LED加上1.5~2.0V的正向电压,10~20mA的电流,那么就可以使LED正常发光了。

 

二、单片机与LED电路图如下所示:

 

由于51单片机的驱动能力有限,所以外接74HC245总线驱动器,加强驱动能力。当OE接地,AB/BAVcc时,数据流向为AB,即当P2.0输出“1”时,B0也为“1”,这时,LED的压降为0,故LED不亮;当P2.0输出“0”时,B0也为“0”,这时,LED的压降不为为0,但为多少呢?这个取决与R1,为了LED正常发光,及给LED加上1.5~2.0V的正向电压,10~20mA的电流,则此时R1两端电压为3.2V左右,电流为20mA(Vcc=5V,LED额定电压为1.8V,电流为20mA)R1=3.2/0.02=160欧姆。此时硬件电路已经接好。

 

三、程序设计

    由上面的分析可知,只要使P2.0输出为“0”,即可点亮LED

1、汇编语言设计

ORG    0000H   ;程序开始

MOV    P2,,#0FEH   ;使P2.0输出“0

END

2C51语言设计

#include   //此文件包含了,51特殊功能寄存器的定义,必须包含进来

Void main()

{

   P2=0xfe;  //使P2.0输出“0

}

 

点亮LED后,那么流水灯就简单得多了。

流水灯的汇编语言程序设计:

ORG    0000H

AJMP   MAIN

ORG    0030H

MAIN:

MOV     A,#0FEH    

LOOP:  

MOV     P2,A       ;点亮第一个LED

RL      A           A向左移移一位,第一次执行是A变为FD

LCALL  DELAY      ;调用延时子程序

AJMP    LOOP       ;跳到LOOP处,此时A=FDH,赋给P2点亮第二个LED,依次类推

 

DELAY:              ;延时子程序

MOV     R7,#250

L1:          MOV   R6,#250

L2:      DJNZ  R6,L2

DJNZ     R7,L1

RET

END

 

流水灯的C51语言程序设计:

#include

 

void Delay(int n)                  //延时1ms子程序

{

   int x,y;

   for(x=0;x<110;x++)

      for(y=0;y

}

void main ()

{

   int i,temp=0xfe;

   while(1)

   {

          for(i=0;i<8;i++)         //

          {

                P2=~(1<

                Delay(50);

          }

          for(i=7;i>0;i--)     //

          {

             P2=~(1<

                Delay(50);

          }

   }

}

你可能感兴趣的:(51学习心得)