Board logo

标题: 51单片机由软件实现的PWM控的LED渐亮、渐暗效果 [打印本页]

作者: yuchengze    时间: 2016-9-18 15:00     标题: 51单片机由软件实现的PWM控的LED渐亮、渐暗效果

#include sbit LEDR= P2 ^ 5;     //P2.0引脚上接了一个红的发光二极管
sbit LEDG = P2 ^ 6;    //P2.1引脚上接了一个绿的发光二极管
void delay (unsigned char d){    // 延时功能函数--由d决定延时长度
    unsigned char i;
while( d-- != 0)
{
   for(i = 0; i < 8; i++);
}         
}
void delay1 (unsigned int d){    // 延时功能函数--由d决定延时长度
    unsigned char i;
while( d-- != 0)
{
   for(i = 0; i < 8; i++);
}         
}
//Speed 1~9
//Direct 1\0
void Lighter( unsigned char Speed, bit Direct)
{
     unsigned char Delay_Length, Loop_Time;    // a控制延时长度 b控制循环周期
  LEDR= Direct;
  Delay_Length = 0x00;
     for ( Loop_Time=0; Loop_Time<254; Loop_Time++)
  {
       // 定义半周期循环时间(次数)
         Delay_Length += Speed;
   if (Delay_Length > 250)
       break;
         delay (Delay_Length);    // 延时长度随a而改变
         LEDR= Direct;
         Delay_Length = ~Delay_Length;     // a值取反 决定灯灭时的占空比
         delay (Delay_Length);
         LEDR= ~Direct;
         Delay_Length = ~Delay_Length;     // a值取反 使a回到原值继续循环
     }
}
/****************************************************************************
主程序:渐变式LED闪烁
/****************************************************************************/
void main (void)
{      // 彩灯主函数 实现彩灯的显示
    while (1)
{
     delay1 (60000);
  Lighter(9, 0);
  delay1 (60000);
  }
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0