51单片机由软件实现的PWM控的LED渐亮、渐暗效果
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);
}
}
51单片机软件实现PWM 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)