|
我收藏的舞台灯程序 含有源码
完整源码下载(包含头文件内容):
舞台灯程序.docx
(18.5 KB, 下载次数: 28)
单片机源码:
- #include<reg52.h>
- #include<intrins.h>
- #include"led_disp.h"
- /********引脚定义*******/
- sbit led1=P1^2; //蓝灯
- sbit led2=P1^3; //绿灯
- sbit led3=P1^4; //红灯
- /*********89板测试引脚***************
- sbit key4=P3^3; //存储
- sbit key3=P3^2; //减
- sbit key2=P3^1; //T0 加
- sbit key1=P3^0; //T1 模式选择
- */
- // 彩灯引脚
- sbit key4=P1^6; //存储
- sbit key3=P1^7; //减
- sbit key2=P3^4; //T0 加
- sbit key1=P3^5; //T1 模式选择
- //-----------------------------------------//
- sbit voice=P1^0; //声控引脚
- /***********延时函数*******************/
- void delay(unsigned int time);
- void delayus(uint t);
- void delayms(uint k);
- void delay_nms(uint n);
- void delay_1ms(void);
- /****模式设置函数***************************/
- void led_1(uint t);
- void led_2(uint t);
- void led_3(uint t);
- void led_mod0(void);
- void led_mod1(void); // 模式1
- void led_mod2(void); //模式2
- void led_mod3(void); //模式3
- void led_mod4(void); //模式4,声控模式
- /********按键功能函数*********************/
- void key1_fun(void);
- void key2_fun(void);
- void key3_fun(void);
- void key4_fun(void);
- void key_fun(void);
- /*********中断、显示、其他函数***********/
- void InitTimer0(void); //定时100us,用于数码管显示;中断用于执行数码管显示
- void InitTimer1(void); //定时10ms,用于按键;中断执行按键扫描
- void disp(void);
- void dis(void);
- void dis1(void);
- /******************************/
- void led_work(void); //led 花样闪烁
- void led_rem(void); //记忆模式功能,开机时执行
- void voice_ctr(void); //声控功能
-
- uint MOD_T; //模式闪烁快慢变量
- uchar MOD_NUM,MOD_T_ADD; //模式号,模式闪烁时间快慢变量
- /**********模式闪烁快慢变量及对应的向量**************************************/
- uint MOD_T0,MOD_T1,MOD_T2,MOD_T3,MOD_T4,MOD_T5;
- uchar MOD_T_ADD0,MOD_T_ADD1,MOD_T_ADD2,MOD_T_ADD3,MOD_T_ADD4,MOD_T_ADD5;
- uint MOD_TR[6]; // 元素7为存储变量
- uchar MOD_T_ADDR[6]; //
- /********存储记忆变量*****************/
- uchar MOD_NUM_REM;
- uchar MOD_T_ADD_REM;
- uint num; //声控变量
- /****************************************************************************/
- uint delay_time; //MOD_T=3000-55*(MOD_T_ADD+1); 200--60000
- uchar t,TN; //定时器0变量
- bit key_flag;
- //code uchar led_mod[]={0x39,0x39,0x39,0x73,0x39,0x6d,0x5e,0x79,0x7c,0x79,0x5e,0x3f}; //89板模式数显段
- //code uchar led_tab[]={0x0A,0xFA,0x8C,0x98,0x78,0x19,0x09,0xBA,0x08,0x18, 0x49,0x0F,0xC8,0x0D,0x2C}; //0-9,b,c,d,e,p
- code uchar led_mod[]={0x0f,0x0f,0x0f,0x2c,0x0f,0x19,0xc8,0x0d,0x49,0x0d,0xc8,0x0a}; //彩灯模式数显段
- //主函数
- void main(void)
- {
- InitTimer0();
- InitTimer1();
- led1=0;
- led2=0;
- led3=0;
- P2=0x00; //数码管初始化控制
- MOD_T=6000; //led闪烁时间变量
- MOD_TR[0]=6000;
- MOD_TR[1]=6000;
- MOD_TR[2]=6000;
- MOD_TR[3]=6000;
- MOD_TR[4]=6000;
- MOD_TR[5]=6000;
- MOD_T_ADDR[0]=0;
- MOD_T_ADDR[1]=0;
- MOD_T_ADDR[2]=0;
- MOD_T_ADDR[3]=0;
- MOD_T_ADDR[4]=0;
- MOD_T_ADDR[5]=0;
- //MOD_NUM=MOD_NUM_REM;
- //MOD_T_ADD=0;
- //led_rem();
- //key_flag=0;
- while(1) //主程序循环
- {
- //led_mod3();
-
- // key1_fun();
- //key2_fun();
- //key3_fun();
- //key4_fun();
- //key_fun();
- led_work();
-
- }
- }
- //延时子函数
- //参数范围 0-65536
- void delayus(uint t)
- {
- while(t--);
- }
- //延时子函时,
- //参数 d_time 控制延时的时间
- //作用,灯亮和熄灭必须持续一定时间,人眼才能看到
- void delayms(uint k)
- {
- uint i,j;
- for(i=0;i<k;i++)
- for(j=0;j<120;j++);
- }
- void delay_1ms(void)
- {
- unsigned char a,b;
- for(b=4;b>0;b--)
- for(a=248;a>0;a--);
- }
- void delay_nms(uint n)
- {
- uint i;
- for(i=0;i<n;i++)
- {delay_1ms();}
- }
-
- /************************************/
- void led_1(uint t)
- {
- led1=1;
- delayms(t);
- led1=0;
- delayms(t);
-
- led2=1;
- delayms(t);
- led2=0;
- delayms(t);
- led3=1;
- delayms(t);
- led3=0;
- delayms(t);
- }
- void led_2(uint t)
- {
- led1=1;
- led2=1;
- delayms(t);
- led1=0;
- led2=0;
- delayms(t);
-
- led2=1;
- led3=1;
- delayms(t);
- led2=0;
- led3=0;
- delayms(t);
- led3=1;
- led1=1;
- delayms(t);
- led3=0;
- led1=0;
- delayms(t);
- }
- void led_3(uint t)
- {
- led1=1;
- led2=1;
- led3=1;
- delayms(t);
- led1=0;
- led2=0;
- led3=0;
- delayms(t);
- }
- void led_mod0(void)
- {
- led_1(MOD_TR[0]);
- }
- void led_mod1(void)
- {
- led_2(MOD_TR[1]);
- }
- void led_mod2(void)
- {
- led_3(MOD_TR[2]);
- }
- void led_mod3(void)
- {
- led_1(MOD_TR[3]);
- led_2(MOD_TR[3]);
- led_3(MOD_TR[3]);
- }
- void led_mod4(void)
- {
- switch(num)
- {
- case 0:
- { led1=1;
- led2=1;
- led3=1;
- break;
- }
- case 1:
- {
- led1=0;
- led2=1;
- led3=1;
- break;
- }
- case 2:
- {
- led1=1;
- led2=0;
- led3=1;
- break;
- }
- case 3:
- {
- led1=1;
- led2=1;
- led3=0;
- break;
- }
- case 4:
- {
- led1=1;
- led2=0;
- led3=0;
- break;
- }
- case 5:
- {
- led1=0;
- led2=0;
- led3=1;
- break;
- }
- case 6:
- {
- led1=0;
- led2=1;
- led3=0;
- break;
- }
- }
- }
- void led_rem(void)
- {
- }
- /*************************************/
- /**************中断设置及执行*****************/
- void InitTimer0(void) //100us
- {
- TMOD |= 0x02;
- TH0 = 0x00;
- TL0 = 0x38;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
-
- void Timer0Interrupt(void) interrupt 1
- {
- //add your code here!
- //disp();
- t++;
- if(t==30)
- {
- t=0;
- TN++;
- if(TN==5) TN=1;
- dis();
- }
- if(t<15)
- {
- voice_ctr();
- }
- //dis();
- }
- /************************************************/
- void InitTimer1(void)
- {
- TMOD |= 0x10;
- TH1 = 0x0B1;
- TL1 = 0x0E0;
- EA = 1;
- ET1 = 1;
- TR1 = 1;
- }
- void Timer1Interrupt(void) interrupt 3
- {
- TH1 = 0x0B1;
- TL1 = 0x0E0;
- /*********add your code here!*****************/
- //dis();
- key_fun();
- }
- /*****************按键功能函数************************************/
- void key1_fun(void) //按键1功能--模式选择
- {
- if(!key1)
- {
- delayus(1000);
- if(!key1)
- {
- while(!key1);
- MOD_NUM++;
- if(MOD_NUM==6) MOD_NUM=0;
- }
- num=0;
- }
- }
- void key2_fun(void) //按键2功能--加
- {
- if(!key2)
- {
- delayus(1000);
- if(!key2)
- {
- while(!key2);
- //if(MOD_NUM==0)
- {
- if(MOD_T_ADDR[MOD_NUM]==99) MOD_T_ADDR[MOD_NUM]=0;
- else MOD_T_ADDR[MOD_NUM]+=1;
- }
- }
- }
- MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));
- }
- void key3_fun(void) //按键3功能--减
- {
- if(!key3)
- {
- delayus(1000);
- if(!key3)
- {
- while(!key3);
- if(MOD_T_ADDR[MOD_NUM]==0) MOD_T_ADDR[MOD_NUM]=99;
- else MOD_T_ADDR[MOD_NUM]-=1;
- }
- }
- MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));
- }
- void key4_fun(void) //存储键:模式,闪烁快慢存储
- {
- if(!key4)
- {
- delayus(1000);
- if(!key4)
- {
- while(!key4);
- MOD_NUM_REM=MOD_NUM;
- MOD_T_ADD_REM=MOD_T_ADDR[MOD_NUM];
- }
- }
- }
- void key_fun(void)
- {
- // if(!key1||!key2||!key3||!key4) key_flag=1;
- //if(key_flag)
- key1_fun();
- key2_fun();
- key3_fun();
- key4_fun();
-
- }
- //-------------------------------------------------//
- void voice_ctr(void)
- {
- if(!voice)
- {
- //delayus(10);
- while(!voice);
- num++;
- if(num==7) num=0;
- }
- }
- /**************led花样闪烁*****************/
- void led_work(void)
- {
-
- if(MOD_NUM==0) { led_mod0(); }
- else if(MOD_NUM==1) { led_mod1(); }
- else if(MOD_NUM==2) { led_mod2(); }
- else if(MOD_NUM==3) { led_mod3(); }
- else if(MOD_NUM==4) { led_mod4(); }
- else
- {
- led1=1;
- led2=1;
- led3=1;
- }
- }
- /*****************************显示函数:模式和闪烁快慢显示***************************/
- void dis(void)
- {
- /*P0=led_tab[MOD_NUM/10]; seg1 delayus(50);
- P0=led_tab[MOD_NUM%10]; seg2 delayus(50);
- P0=led_tab[MOD_T_ADD/10]; seg3 delayus(50);
- P0=led_tab[MOD_T_ADD%10]; seg4 delayus(50);
- */
- if(TN==1)
- {
- led_disp(1,led_mod[MOD_NUM*2]);
- //delayus(5);
- }
- else if(TN==2)
- {
- led_disp(2,led_mod[MOD_NUM*2+1]);
- //delay_nms(5);
- // delayus(5);
- }
- else if(TN==3)
- {
- led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);
- //delay_nms(5);
- // delayus(5);
- }
- else
- {
- led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);
- //delay_nms(5);
- // delayus(5);
- }
- /* if(TN==0)
- { led_disp(0,led_mod[MOD_NUM*2]); }
- else if(TN==1)
- { led_disp(1,led_mod[MOD_NUM*2+1]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD%10]);}
- */
-
- /*if(MOD_NUM==0)
- {
- if(TN==0)
- { led_disp(0,led_mod[0]); }
- else if(TN==1)
- { led_disp(1,led_mod[1]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD0/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD0%10]);}
- }
- else if(MOD_NUM==1)
- {
- if(TN==0)
- { led_disp(0,led_mod[2]); }
- else if(TN==1)
- { led_disp(1,led_mod[3]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD1/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD1%10]);}
- }
- else if(MOD_NUM==2)
- {
- if(TN==0)
- { led_disp(0,led_mod[4]); }
- else if(TN==1)
- { led_disp(1,led_mod[5]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD2/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD2%10]);}
- }
- else if(MOD_NUM==3)
- {
- if(TN==0)
- { led_disp(0,led_mod[6]); }
- else if(TN==1)
- { led_disp(1,led_mod[7]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD3/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD3%10]);}
- }
- else if(MOD_NUM==4)
- {
- if(TN==0)
- { led_disp(0,led_mod[8]); }
- else if(TN==1)
- { led_disp(1,led_mod[9]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD4/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD4%10]);}
- }
- else
- {
- if(TN==0)
- { led_disp(0,led_mod[10]); }
- else if(TN==1)
- { led_disp(1,led_mod[11]); }
- else if(TN==2)
- {led_disp(2,led_tab[MOD_T_ADD5/10]);}
- else
- {led_disp(3,led_tab[MOD_T_ADD5%10]);}
- }
- */
- }
- void dis1(void)
- {
- /*
- led_disp(1,led_tab[11]);
- led_disp(2,led_tab[11]);
- led_disp(3,led_tab[0]);
- led_disp(4,led_tab[0]); delay_led(500);
- */
- if(TN==1)
- {
- led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
- led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
- led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
- led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
- }
- else if(TN==2)
- {
- led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
- led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
- led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
- led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
- }
- else if(TN==3)
- {
- led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
- led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
- led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
- led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
- }
- else if(TN==4)
- {
- led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
- led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
- led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
- led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
- }
- }
- void disp(void)
- {
- P0=led_tab[11]; P2=0x20; // P0=0x0f; //led_tab[11];
- delayus(14);
- //P2=0xff;
- //delayms(10);
-
- P0=led_tab[11]; P2=0x10; //P0=0x0f; //led_tab[11];
- delayus(14);
- //P2=0x00;
- //P2=0xff;
- //delayms(10);
-
- P0=led_tab[0]; P2=0x08; // P0=0x0a; //led_tab[0];
- delayus(14);
- //P2=0x00;
- //P2=0xff;
- //delayms(10);
-
- P0=led_tab[0]; P2=0x40; //P0=0x0a; //led_tab[0];
- delayus(14);
- //P2=0x00;
- //P2=0xff;
- //delayms(10);
- }
复制代码
|
|