设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2138|回复: 2
收起左侧

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

[复制链接]
发表于 2017-6-17 16:44:59 | 显示全部楼层 |阅读模式

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

  8. #include "reg51.h"
  9. #include "intrins.h"
  10. #define uc unsigned char
  11. uc aa,bb,cc,dd,ee,ff,gg,hh,ii,j; //随机数计算相关
  12. uc rand(){  //计算随机数
  13. bb=(cc+3)*3;cc=(dd-3)*3;dd=(ee+3)*3;ee=(ff-3)*3;
  14. ff=(gg+3)*3;gg=(hh-3)*3;hh=(ii+3)*3;ii=(bb-3)*3;
  15. if(bb > 127) cc = cc^127;
  16. if(cc < 127) dd = dd^127;
  17. if(dd > 127) ee = ee^127;
  18. if(ee < 127) ff = ff^127;
  19. if(ff > 127) gg = gg^127;
  20. if(gg < 127) hh = hh^127;
  21. if(hh > 127) ii = ii^127;
  22. if(ii < 127) bb = bb^127;
  23. aa=bb^cc^dd^ee^ff^gg^hh^ii;
  24. return aa;
  25. }

  26. void set_8pwm(uc *a){ //产生8路PWM
  27.   uc b,c,d;
  28.   for(b=0;b<255;b++){  
  29.    for(c=0;c<8;c++){
  30.     if(a[c] <= b){
  31.      d|=1<<c;
  32.     }
  33.    }
  34.    P3=d;
  35.    d=0;
  36.   }
  37. }
  38. void main(){
  39. uc a[8];
  40. uc b;
  41. while(1){
  42. for(b=0;b<8;b++){
  43. a[b]=rand();
  44. }
  45. for(b=0;b<16;b++){
  46. set_8pwm(a);
  47. }
  48. }
  49. }
复制代码

评分

1

查看全部评分

相关帖子

发表于 2017-9-22 17:13:21 来自手机 | 显示全部楼层
这就是最强流水灯???
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-17 02:38 , Processed in 0.554032 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表