|
我收藏的舞臺燈程序 含有源碼
完整源碼下載(包含頭文件內容):
舞臺燈程序.docx
(18.5 KB, 下載次數: 28)
2017-4-20 19:59 上傳
點擊文件名下載附件
舞臺燈程序
單片機源碼:
- #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);
- }
復制代碼
|
|