呼吸灯程序


#nclude //51头文件


//《B_无级亮度变化》
#define DY_PORT     P1 //设置LED连接的I/O组
#define DY_SPEED    1 //设置每一个明亮级的停留时间(值域:0~65535)
#define DY_PWM      500 //设置明亮的总级数(级数过大会出现闪烁)(值域:0~65535)
#define DY_MAX      500 //设置最大明亮(值域:小于明亮总级数)

void delay (unsigned int a){ // 0.1ms延时程序(12MHz 10倍于51单片机速度时)
    unsigned char i;
    while( --a != 0){
        for(i = 0; i < 12; i++);
    }                     
}

void display (unsigned int a){ //显示程序(50ms的PWM宽度)
    DY_PORT = 0x00; //LED小灯亮
    delay (a);      //延时a的长度
    DY_PORT = 0xff; //LED小灯灭
    delay (DY_PWM-a);//延时总PWM长度减a
}

void main (void){ //主程序
    unsigned int t=1;
    unsigned int i;
    bit LOOP=0; //LOOP是循环切换标志
 
    while (1){
        if(LOOP == 0){ //变亮循环
            for(i = 0; i < DY_SPEED; i++){
                display(t);
            }
            t++;
            if(t>(DY_MAX-2)){
                LOOP = 1;
            }
        }
        if(LOOP == 1){ //变暗循环
            for(i = 0; i < DY_SPEED; i++){
                display(t);
            }
            t--;
            if(t<2){
      

你可能感兴趣的:(呼吸灯程序)