LscmunaixMG 发表于 2017-6-17 16:44:59

单片机IO口产生8路不同PWM占空比方波的方法,史上流水灯最强花样均采用此方法实现。


/*
单片机IO口产生8路不同PWM占空比方波的方法,史上流水灯最强花样均采用此方法实现。
通过产生8路256级不同占空比的方波而驱动8个LED产生不同的亮度。
可用于驱动4脚全彩LED用于驱动不同LED的亮度达到颜色混合产生数千万种颜色。
或者用于驱动智能车或无人机用于控制不同电机的不同转速。
以下程序是设置8个LED随机亮度并且持续一段时间,用keil4编译后烧写即可:
*/

#include "reg51.h"
#include "intrins.h"
#define uc unsigned char
uc aa,bb,cc,dd,ee,ff,gg,hh,ii,j; //随机数计算相关
uc rand(){//计算随机数
bb=(cc+3)*3;cc=(dd-3)*3;dd=(ee+3)*3;ee=(ff-3)*3;
ff=(gg+3)*3;gg=(hh-3)*3;hh=(ii+3)*3;ii=(bb-3)*3;
if(bb > 127) cc = cc^127;
if(cc < 127) dd = dd^127;
if(dd > 127) ee = ee^127;
if(ee < 127) ff = ff^127;
if(ff > 127) gg = gg^127;
if(gg < 127) hh = hh^127;
if(hh > 127) ii = ii^127;
if(ii < 127) bb = bb^127;
aa=bb^cc^dd^ee^ff^gg^hh^ii;
return aa;
}

void set_8pwm(uc *a){ //产生8路PWM
uc b,c,d;
for(b=0;b<255;b++){
   for(c=0;c<8;c++){
    if(a <= b){
   d|=1<<c;
    }
   }
   P3=d;
   d=0;
}
}
void main(){
uc a;
uc b;
while(1){
for(b=0;b<8;b++){
a=rand();
}
for(b=0;b<16;b++){
set_8pwm(a);
}
}
}

Cute 发表于 2017-6-17 19:55:32

不错,顶1个。:D

Kuni7wa 发表于 2017-9-22 17:13:21

这就是最强流水灯???
页: [1]
查看完整版本: 单片机IO口产生8路不同PWM占空比方波的方法,史上流水灯最强花样均采用此方法实现。