单片机源程序如下:
- #include<reg52.h>//
- #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;
- }
- }
- }
复制代码
所有资料51hei提供下载:
流星雨.rar
(33.64 KB, 下载次数: 17)
|