玩爆LED -- 竹海学嵌入式(1)

LED 是发光二极管,发光的原理是基于能带电子跃迁理论。

LED应用范围很广,本文针对LED进行详细阐述。首先给出点亮的原理。如下图所示,为低电平点亮LED连接图。值得注意的是电阻的选择。电阻太小。LED会烧毁,电阻太大,LED会亮度不够。常规在10毫安左右。如果电源电压为5V,则电阻大概500左右。

玩爆LED -- 竹海学嵌入式(1)

上文给出的是低电平点亮,此外还有高电平点亮。

LED使用有两种存在形式:单独和组合。

单独的可以这样用。

sbit LED_1bit=P1^0;// 用sbit 关键字 选择的位信息

直接选择一位进行操作,如果是1BYTE操作,直接操作P1即可。

本文给出两种玩法。一种切换。

void led_test00()

{

    //

    P1 = 0x55;// 一次可以操作1BYTE

    delayMs(100);

    P1 = 0xfe;

    delayMs(100);

}

 

void led_test01()

{

    unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255

 

    P1=0x7f;

    while(1)

    {

     for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次

     {

     delayMs(100);

     P1>>=1;

     P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1

     }

     P1=0x7f;

    }

看起来比较简单,还有一种是查表。

void led_test_rom()

{

    unsigned char i;

    while(1)

    {

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

{

P1=table[i];

delayMs(100);

     }  

    }

}

玩爆LED -- 竹海学嵌入式(1)

玩爆LED -- 竹海学嵌入式(1)

以上内容比较简单,推荐的ROM的方法,便于以后扩展。本文想说明的问题是延迟函数。

本文采用的是10MHz的晶振,那么我空循环一次大概是1.2us,人要能分辨间隔需要至少60ms的间隔。

祝大家开心 学习