控制LED灯发光

LED:是发光二极管,一种半导体固体发光器件。对于普通发光二极管(又称LED)来说,红黄等暖色光LED一般是1.8至2.2V,蓝绿冷色光LED一般是3.0至3.6V。
不过发光二极管一般需要注意的不是其工作电压,而是要限定工作电流。一般普通的指示用LED正常工作电流为5-10mA,过高的工作电流将会引起LED节温超限而烧坏。

LED工作原理:LED的工作是有方向性的,只有当正极接到LED阳极,负极接到LED阴极的时候才能工作,如果接反是不能正常工作的。在开发板上面LED的原理图如下,LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P2口,如果你想点亮一盏LED,就得把单片机相对应的IO赋为低电平。

C语言程序简单框架:

#include "reg52.h"
//将P20口赋给led变量
sbit led = P2^0;
void main()
{
    while(1)
    {
        //将P20端口置为低电平
        led = 0;
     }
 }

程序书写完成,进行编译、生成hex文件;最后下载到开发板实际运行。

#typedef的使用:typedef unsigned char u8;  typedef unsigned int u16;(后面要加分号)将unsigned char重命名为u8,将unsigned int重命名为u16。

                            重定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的。

 LED灯闪烁的简单程序:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit led=P2^0; //D1
void delay(u16 i)
{
    while (i--);//循环一次大约10us
}
void main()
{
    while(1)
    {
         led=0;
         delay(50000); //不可以超过65535
         led=1;
         delay(50000);
    }
}

利用仿真计算延时函数所用的时间:打开Target Options / Target / Xtal改为12.0(因为开发板上的晶振频率是12MHz),然后计算前后的时间差就可以了。

C语言常用的预处理命令:#define A P0(即用A表示P0)

循环左移右移函数:_crol_(a, b); 循环左移函数,a是左移的值,b是左移的位数。包含在instrins.h库函数里面。

                                _cror_(a, b); 循环右移函数,a是右移的值,b是右移的位数。包含在instrins.h库函数里面。

LED流水灯的简单程序:

#include "reg52.h"
#include <intrins.h> //这两种方式都可以

typedef unsigned char u8; //占用一个字节
typedef unsigned int u16; //占用两个字节

#define led P2

void delay(u16 i)
{
    while(i--);
}

void main()
{
    u8 i=0;
    led=0xfe;
    delay(50000);
    while(1)
    {
            for(i=0;i<7;i++)
        {
             led=_crol_(led, 1);
             delay(50000);
        }
        for(i=0;i<7;i++)
        {
            led=_cror_(led, 1);
            delay(50000);
        }
    }
}
原文地址:https://www.cnblogs.com/czz0508/p/10435755.html