首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51单片机由软件实现的PWM控的LED渐亮、渐暗效果

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);
  }
}
返回列表