跳转至

LED

LED介绍

发光二极管,Light Emitting Diode

开发板上的电阻数字表示,102 = 1K,“102”解释为“10”后再加“2”个“0”,即变成“1000”

单片机中,CPU控制寄存器,一个寄存器分为8个部分,每个部分通过一个驱动器控制一个IO口。

CPU给寄存器传递,1代表高电平,0代表低电平。可以用一个8位二进制数赋值给寄存器,从而控制8个IO口的电平。

点亮一个LED

#include <REGK52.H>

void main(){
    while(1){
        P2 = 0xFE; // 1111 1110
    }
}
// P2端口的状态会不断地被重置为0xFE。
#include <REGK52.H>

void main(){
    P2 = 0xFE; // 1111 1110
    while(1){
    }
}
// P2端口的状态只在程序开始时被设置为0xFE一次,之后除非有其他代码介入,否则不会改变。

// #include AT89X52.H 相关寄存器的信息都存储其中

LED闪烁

#include <REGK52.H>
#include <INTRINS.H>

void Delay500ms(void)   //@12.000MHz 
{
    unsigned char data i, j, k;

    _nop_();
    i = 4;
    j = 205;
    k = 187;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void main(){
    while(1){
        P2 = 0xFE;
        Delay500ms();
        P2 = 0xFF;
        Delay500ms();
    }
}

实现延时的工具:

STC-ISP中的“软件延时计算器”,当前开发板的晶振是12MHz,由于是STC89C系列的单片机,所以指令集改成“STC-V1”,最后生成一个Delay()函数

LED流水灯

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms(void)   //@12.000MHz 
{
    unsigned char data i, j, k;

    _nop_();
    i = 4;
    j = 205;
    k = 187;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void main(){
    while(1){
        P2 = 0xFE;
        Delay500ms();
        P2 = 0xFD;
        Delay500ms();
        P2 = 0xFB;
        Delay500ms();
        P2 = 0xF7;
        Delay500ms();
        P2 = 0xEF;
        Delay500ms();
        P2 = 0xDF;
        Delay500ms();
        P2 = 0xBF;
        Delay500ms();
        P2 = 0x7F;
        Delay500ms();
    }
}
// 改进
#include <REGX52.H>
#include <INTRINS.H>

void Delayms(unsigned int xms)  //@12.000MHz
{
    unsigned char data i, j;
    while(xms--){
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    }
}

void main(){
    while(1){
        P2 = 0xFE;
        Delayms(500);
        P2 = 0xFD;
        Delayms(500);
        P2 = 0xFB;
        Delayms(500);
        P2 = 0xF7;
        Delayms(500);
        P2 = 0xEF;
        Delayms(500);
        P2 = 0xDF;
        Delayms(500);
        P2 = 0xBF;
        Delayms(500);
        P2 = 0x7F;
        Delayms(500);
    }
}