LED流星雨灯的制作(51单片机程序代码)

控制/MCU

1882人已加入

描述

  本文主要介绍了LED流星雨灯的制作原理,包括成品图片,威廉希尔官方网站 原理图以及所用的51单片机的程序代码。

  一、图片分享:

  二、PCB文件分享:

  三、原理图分享:

  上面只做了5根灯管,如果需要增加灯管的话,只需稍微改动下 下面的程序即可。如果增长

  连线把灯管摆成圆形或者方形效果也比较牛逼的。

  此款流星灯直径只有1.5公分只可以做30公分、50公分、80公分、1000公分等 。

  程序代码大家可以随意修改,但不可用于商业用途。

  /*流星雨程序代码 

  单片机型号:STC11F04 IO口16个!原理:

  利用PWM来模似流星雨:将亮度等级分为8个

  ,通过改变每一组LED的亮度来达到流星雨效果。

  (因为流星雨是前面亮后面越来越暗,就像一条龙一样,拖着尾巴过来),

  完整的程序源代码下载:http://www.51hei.com/f/ledss.rar

  */

  #include《reg52.h》//MCU头文件

  #define uchar unsigned char//字浮型宏定义

  #define uint unsigned int//整型宏定义

  #define shudu 3 //LED渐变速度调整

  uchar yin0 =31;//LED变化等级调整

  uchar yin1 =63;//LED变化等级调整

  uchar yin2 =95;//LED变化等级调整

  uchar yin3 =127;//LED变化等级调整

  uchar yin4 =159;//LED变化等级调整

  uchar yin5 =191;//LED变化等级调整

  uchar yin6 =223;//LED变化等级调整

  uchar yin7 =255;//LED变化等级调整

  sbit led0=P3^5;//16个IO口

  sbit led1=P3^6;

  sbit led2=P3^0;

  sbit led3=P3^1;

  sbit led4=P3^2;

  sbit led5=P3^3;

  sbit led6=P3^4;

  sbit led7=P3^7;

  sbit led8=P1^0;

  sbit led9=P1^1;

  sbit led10=P1^2;

  sbit led11=P1^7;

  sbit led12=P1^6;

  sbit led13=P1^5;

  sbit led14=P1^4;

  sbit led15=P1^3;

  uchar d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15;//各IO口变量

  /***************************************************/

  /**********************延时子程序*******************/

  /***************************************************/

  void delay(uint z)

  {

  uint x,y;//局部变量定义

  for(x=0;x《5;x++)//延时外循环

  for(y=0;y《z;y++);//延时内循环

  }

  /**********************************************/

  /**********PWM控制红绿兰3种灯亮灭时间**********/

  /**********************************************/

  void RGBpwm(uchar d0,uchar d1,uchar d2,uchar d3,uchar d4,uchar d5,uchar d6,uchar d7,uchar d8,uchar d9,uchar d10,uchar d11,uchar d12,uchar d13,uchar d14,uchar d15)//3个局部变量,些部分为带参数函数

  {

  if(d0!=0)

  {

  led0=0;

  delay(d0);

  led0=1;//1

  }

  if(d1!=0)

  {

  led1=0;

  delay(d1);

  led1=1;//1

  }

  if(d2!=0)

  {

  led2=0;

  delay(d2); //2

  led2=1;

  }

  if(d3!=0)

  {

  led3=0;

  delay(d3);

  led3=1;//3

  }

  if(d4!=0)

  {

  led4=0;

  delay(d4);

  led4=1;//4

  }

  if(d5!=0)

  {

  led5=0;

  delay(d5);

  led5=1;//5

  }

  if(d6!=0)

  {

  led6=0;

  delay(d6);

  led6=1;//6

  }

  if(d7!=0)

  {

  led7=0;

  delay(d7);

  led7=1;//7

  }

  if(d8!=0)

  {

  led8=0;

  delay(d8);

  led8=1;//8

  }

  if(d9!=0)

  {

  led9=0;

  delay(d9);

  led9=1;//9

  }

  if(d10!=0)

  {

  led10=0;

  delay(d10); //10

  led10=1;

  }

  if(d11!=0)

  {

  led11=0;

  delay(d11);

  led11=1;//11

  }

  if(d12!=0)

  {

  led12=0;

  delay(d12);

  led12=1;//12

  }

  if(d13!=0)

  {

  led13=0;

  delay(d13); //13

  led13=1;

  }

  if(d14!=0)//14

  {

  led14=0;

  delay(d14);

  led14=1;

  }

  if(d15!=0)//15

  {

  led15=0;

  delay(d15);

  led15=1;

  }

  }

  /***********************************************/

  /********************主程序*********************/

  /***********************************************/

  void main()

  {

  TMOD=0x01;

  EA=1;

  ET0=1;

  TR0=1;

  TH0=(65536-56)/256;

  TL0=(65536-56)%256;

  while(1)//程序主循环

  {

  RGBpwm(d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15);//调用RGBpwm子程序

  }

  }

  /*************************************************/

  /*中断服务子程序(控制LED红绿兰亮灭时间占空比例)*/

  /*************************************************/

  void zhong() interrupt 1//中断向量位为1

  {

  uint num;//定时器计数变量

  uint ji;//亮度等级控制变量

  TH0=(65536-500)/256;//给定时器高8位赋值

  TL0=(65536-500)%256;//给定时器低8位赋值

  num++;//将定时计数变自动增加1

  if(num==shudu)//如果速度变量等于定时计数器变量就执行下面大括号语句

  {

  num=0;//将计数器清0

  ji++;//将亮度等级控制变量加1

  if((ji》0)&&(ji《10))//移位移动 流水。..。.

  {

  d0=yin7;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》10)&&(ji《20))//23456789

  {

  d0=yin6;

  d1=yin7;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》20)&&(ji《30))//345678910

  {

  d0=yin5;

  d1=yin6;

  d2=yin7;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》30)&&(ji《40))//4567891011

  {

  d0=yin4;

  d1=yin5;

  d2=yin6;

  d3=yin7;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》40)&&(ji《50))//12345678

  {

  d0=yin3;

  d1=yin4;

  d2=yin5;

  d3=yin6;

  d4=yin7;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》50)&&(ji《60))//23456789

  {

  d0=yin2;

  d1=yin3;

  d2=yin4;

  d3=yin5;

  d4=yin6;

  d5=yin7;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》60)&&(ji《70))//345678910

  {

  d0=yin1;

  d1=yin2;

  d2=yin3;

  d3=yin4;

  d4=yin5;

  d5=yin6;

  d6=yin7;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》70)&&(ji《80))//4567891011

  {

  d0=yin0;

  d1=yin1;

  d2=yin2;

  d3=yin3;

  d4=yin4;

  d5=yin5;

  d6=yin6;

  d7=yin7;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》80)&&(ji《90))//12345678

  {

  d0=0;

  d1=yin0;

  d2=yin1;

  d3=yin2;

  d4=yin3;

  d5=yin4;

  d6=yin5;

  d7=yin6;

  d8=yin7;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》90)&&(ji《100))//345678910

  {

  d2=yin0;

  d3=yin1;

  d4=yin2;

  d5=yin3;

  d6=yin4;

  d7=yin5;

  d8=yin6;

  d9=yin7;

  d0=0;

  d1=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》100)&&(ji《110))//345678910

  {

  d3=yin0;

  d4=yin1;

  d5=yin2;

  d6=yin3;

  d7=yin4;

  d8=yin5;

  d9=yin6;

  d10=yin7;

  d0=0;

  d1=0;

  d2=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》110)&&(ji《120))//4567891011

  {

  d4=yin0;

  d5=yin1;

  d6=yin2;

  d7=yin3;

  d8=yin4;

  d9=yin5;

  d10=yin6;

  d11=yin7;

  d1=0;

  d2=0;

  d3=0;

  d12=0;

  d0=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》120)&&(ji《130))//56789101112

  {

  d5=yin0;

  d6=yin1;

  d7=yin2;

  d8=yin3;

  d9=yin4;

  d10=yin5;

  d11=yin6;

  d12=yin7;

  d0=0;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if((ji》130)&&(ji《140))//678910111213

  {

  d6=yin0;

  d7=yin1;

  d8=yin2;

  d9=yin3;

  d10=yin4;

  d11=yin5;

  d12=yin6;

  d13=yin7;

  d0=0;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d14=0;

  d15=0;

  }

  if((ji》140)&&(ji《150))//

  {

  d7=yin0;

  d8=yin1;

  d9=yin2;

  d10=yin3;

  d11=yin4;

  d12=yin5;

  d13=yin6;

  d14=yin7;

  d0=0;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d15=0;

  }

  if((ji》150)&&(ji《160))//

  {

  d8=yin0;

  d9=yin1;

  d10=yin2;

  d11=yin3;

  d12=yin4;

  d13=yin5;

  d14=yin6;

  d15=yin7;

  d0=0;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  }

  if((ji》160)&&(ji《450))//让所有LED都灭掉 等待下一次流星。..。..

  {

  d0=0;

  d1=0;

  d2=0;

  d3=0;

  d4=0;

  d5=0;

  d6=0;

  d7=0;

  d8=0;

  d9=0;

  d10=0;

  d11=0;

  d12=0;

  d13=0;

  d14=0;

  d15=0;

  }

  if(ji》450)

  {

  TR0=0;

  ji=0;

  TR0=1;

  }

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分