找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2403|回复: 0
打印 上一主题 下一主题
收起左侧

单片机舞台灯程序 含有源码 我一直收藏的

[复制链接]
跳转到指定楼层
楼主
ID:191780 发表于 2017-4-20 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我收藏的舞台灯程序 含有源码

完整源码下载(包含头文件内容):
舞台灯程序.docx (18.5 KB, 下载次数: 28)


单片机源码:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include"led_disp.h"
  4. /********引脚定义*******/        
  5. sbit  led1=P1^2;                    //蓝灯
  6. sbit  led2=P1^3;                                        //绿灯
  7. sbit  led3=P1^4;                                        //红灯
  8. /*********89板测试引脚***************
  9. sbit  key4=P3^3;                 //存储
  10. sbit  key3=P3^2;                //减
  11. sbit  key2=P3^1;           //T0          加
  12. sbit  key1=P3^0;           //T1  模式选择
  13. */

  14. // 彩灯引脚
  15. sbit  key4=P1^6;                 //存储
  16. sbit  key3=P1^7;                //减
  17. sbit  key2=P3^4;           //T0          加
  18. sbit  key1=P3^5;           //T1  模式选择
  19. //-----------------------------------------//
  20. sbit voice=P1^0;         //声控引脚

  21. /***********延时函数*******************/                                       
  22. void delay(unsigned int time);
  23. void delayus(uint t);
  24. void delayms(uint k);

  25. void delay_nms(uint n);        
  26. void delay_1ms(void);         
  27. /****模式设置函数***************************/
  28. void led_1(uint t);
  29. void led_2(uint t);
  30. void led_3(uint t);

  31. void led_mod0(void);
  32. void led_mod1(void);           // 模式1
  33. void led_mod2(void);           //模式2
  34. void led_mod3(void);           //模式3
  35. void led_mod4(void);           //模式4,声控模式

  36. /********按键功能函数*********************/
  37. void key1_fun(void);
  38. void key2_fun(void);
  39. void key3_fun(void);
  40. void key4_fun(void);
  41. void key_fun(void);
  42. /*********中断、显示、其他函数***********/
  43. void  InitTimer0(void);                //定时100us,用于数码管显示;中断用于执行数码管显示
  44. void  InitTimer1(void);                //定时10ms,用于按键;中断执行按键扫描
  45. void disp(void);
  46. void dis(void);
  47. void dis1(void);

  48. /******************************/
  49. void led_work(void);    //led 花样闪烁
  50. void led_rem(void);                   //记忆模式功能,开机时执行
  51. void voice_ctr(void);        //声控功能

  52.                                           
  53. uint MOD_T;                        //模式闪烁快慢变量
  54. uchar MOD_NUM,MOD_T_ADD;                //模式号,模式闪烁时间快慢变量
  55. /**********模式闪烁快慢变量及对应的向量**************************************/
  56. uint MOD_T0,MOD_T1,MOD_T2,MOD_T3,MOD_T4,MOD_T5;
  57. uchar MOD_T_ADD0,MOD_T_ADD1,MOD_T_ADD2,MOD_T_ADD3,MOD_T_ADD4,MOD_T_ADD5;
  58. uint MOD_TR[6];                   //         元素7为存储变量
  59. uchar MOD_T_ADDR[6];        //
  60. /********存储记忆变量*****************/
  61. uchar MOD_NUM_REM;
  62. uchar MOD_T_ADD_REM;
  63. uint num;        //声控变量
  64. /****************************************************************************/
  65. uint delay_time;             //MOD_T=3000-55*(MOD_T_ADD+1);           200--60000
  66. uchar t,TN; //定时器0变量
  67. bit key_flag;

  68. //code uchar led_mod[]={0x39,0x39,0x39,0x73,0x39,0x6d,0x5e,0x79,0x7c,0x79,0x5e,0x3f};          //89板模式数显段

  69. //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
  70. code uchar led_mod[]={0x0f,0x0f,0x0f,0x2c,0x0f,0x19,0xc8,0x0d,0x49,0x0d,0xc8,0x0a};    //彩灯模式数显段
  71. //主函数                                
  72. void main(void)
  73. {
  74.     InitTimer0();
  75.         InitTimer1();

  76.         led1=0;
  77.         led2=0;
  78.         led3=0;
  79.         P2=0x00;        //数码管初始化控制

  80.         MOD_T=6000;                //led闪烁时间变量
  81.         MOD_TR[0]=6000;
  82.         MOD_TR[1]=6000;        
  83.         MOD_TR[2]=6000;        
  84.         MOD_TR[3]=6000;        
  85.         MOD_TR[4]=6000;        
  86.         MOD_TR[5]=6000;        


  87.         MOD_T_ADDR[0]=0;
  88.         MOD_T_ADDR[1]=0;
  89.         MOD_T_ADDR[2]=0;
  90.         MOD_T_ADDR[3]=0;
  91.         MOD_T_ADDR[4]=0;
  92.         MOD_T_ADDR[5]=0;


  93.         //MOD_NUM=MOD_NUM_REM;
  94.         //MOD_T_ADD=0;
  95.     //led_rem();
  96.         //key_flag=0;
  97.         while(1)                        //主程序循环         
  98.         {
  99.            //led_mod3();
  100.          
  101.           // key1_fun();
  102.            //key2_fun();
  103.            //key3_fun();
  104.            //key4_fun();
  105.            //key_fun();
  106.            led_work();
  107.          
  108.         }
  109. }


  110. //延时子函数
  111. //参数范围 0-65536
  112. void delayus(uint t)
  113. {
  114. while(t--);
  115. }
  116.                                         //延时子函时,
  117.                                         //参数 d_time 控制延时的时间                                                         
  118.                                         //作用,灯亮和熄灭必须持续一定时间,人眼才能看到
  119. void delayms(uint k)
  120. {
  121.          uint i,j;
  122.         for(i=0;i<k;i++)
  123.          for(j=0;j<120;j++);
  124. }

  125. void delay_1ms(void)
  126. {
  127.    unsigned char a,b;
  128.     for(b=4;b>0;b--)
  129.         for(a=248;a>0;a--);
  130. }
  131. void delay_nms(uint n)                                   
  132.   {
  133.    uint i;
  134.     for(i=0;i<n;i++)
  135.          {delay_1ms();}
  136.   }
  137.   
  138. /************************************/

  139. void led_1(uint t)
  140. {
  141.           led1=1;
  142.           delayms(t);  
  143.           led1=0;
  144.           delayms(t);  
  145.          

  146.           led2=1;
  147.           delayms(t);  
  148.           led2=0;
  149.           delayms(t);  

  150.           led3=1;
  151.           delayms(t);
  152.           led3=0;
  153.           delayms(t);
  154. }

  155. void led_2(uint t)
  156. {
  157.           led1=1;
  158.           led2=1;
  159.           delayms(t);
  160.           led1=0;
  161.           led2=0;
  162.           delayms(t);  
  163.          

  164.           led2=1;
  165.           led3=1;
  166.           delayms(t);  
  167.           led2=0;
  168.           led3=0;
  169.           delayms(t);

  170.           led3=1;
  171.           led1=1;
  172.           delayms(t);
  173.           led3=0;
  174.           led1=0;
  175.           delayms(t);  

  176. }

  177. void led_3(uint t)
  178. {
  179.           led1=1;
  180.           led2=1;
  181.           led3=1;
  182.           delayms(t);  
  183.           led1=0;
  184.           led2=0;
  185.           led3=0;
  186.           delayms(t);
  187. }
  188. void led_mod0(void)
  189. {
  190. led_1(MOD_TR[0]);
  191. }

  192. void led_mod1(void)
  193. {
  194. led_2(MOD_TR[1]);
  195. }

  196. void led_mod2(void)
  197. {
  198. led_3(MOD_TR[2]);
  199. }

  200. void led_mod3(void)
  201. {
  202.           led_1(MOD_TR[3]);
  203.         led_2(MOD_TR[3]);
  204.         led_3(MOD_TR[3]);
  205. }                           
  206. void led_mod4(void)
  207.   {
  208.    switch(num)
  209.     {
  210.           case 0:
  211.             { led1=1;
  212.                  led2=1;
  213.                  led3=1;
  214.                  break;
  215.                  }
  216.           case 1:
  217.              {
  218.                  led1=0;
  219.                  led2=1;
  220.                  led3=1;
  221.                  break;
  222.                  }
  223.           case 2:
  224.              {
  225.                  led1=1;
  226.                  led2=0;
  227.                  led3=1;
  228.                  break;
  229.                  }
  230.           case 3:
  231.              {
  232.                  led1=1;
  233.                  led2=1;
  234.                  led3=0;
  235.                  break;
  236.                  }
  237.           case 4:
  238.              {
  239.                  led1=1;
  240.                  led2=0;
  241.                  led3=0;
  242.                  break;
  243.                  }
  244.           case 5:
  245.              {
  246.                  led1=0;
  247.                  led2=0;
  248.                  led3=1;
  249.                  break;
  250.                  }
  251.           case 6:
  252.              {
  253.                  led1=0;
  254.                  led2=1;
  255.                  led3=0;
  256.                  break;
  257.                  }
  258.         }
  259.   }

  260. void led_rem(void)
  261. {

  262. }
  263. /*************************************/

  264. /**************中断设置及执行*****************/

  265. void InitTimer0(void)                                         //100us
  266. {
  267.     TMOD |= 0x02;
  268.     TH0 = 0x00;
  269.     TL0 = 0x38;
  270.     EA = 1;
  271.     ET0 = 1;
  272.     TR0 = 1;
  273. }
  274.    
  275. void Timer0Interrupt(void) interrupt 1
  276. {
  277.          //add your code here!
  278.         //disp();
  279.         t++;
  280.   if(t==30)
  281.          {
  282.           t=0;
  283.           TN++;
  284.           if(TN==5) TN=1;
  285.           dis();
  286.          }
  287.   if(t<15)
  288.     {
  289.           voice_ctr();
  290.         }
  291.    //dis();
  292. }
  293. /************************************************/
  294. void InitTimer1(void)
  295. {
  296.     TMOD |= 0x10;
  297.     TH1 = 0x0B1;
  298.     TL1 = 0x0E0;
  299.     EA = 1;
  300.     ET1 = 1;
  301.     TR1 = 1;
  302. }

  303. void Timer1Interrupt(void) interrupt 3
  304. {
  305.     TH1 = 0x0B1;
  306.     TL1 = 0x0E0;
  307. /*********add your code here!*****************/
  308.    //dis();
  309.   key_fun();
  310. }

  311. /*****************按键功能函数************************************/
  312. void key1_fun(void)                            //按键1功能--模式选择
  313. {
  314.    if(!key1)
  315.           {
  316.             delayus(1000);
  317.                  if(!key1)
  318.                   {
  319.                    while(!key1);
  320.                     MOD_NUM++;
  321.                 if(MOD_NUM==6) MOD_NUM=0;
  322.                   }
  323.                   num=0;
  324.           }
  325. }

  326. void key2_fun(void)                           //按键2功能--加
  327. {
  328.          if(!key2)
  329.           {
  330.             delayus(1000);
  331.                  if(!key2)
  332.                   {
  333.                    while(!key2);
  334.                   //if(MOD_NUM==0)
  335.                          {
  336.                           if(MOD_T_ADDR[MOD_NUM]==99)  MOD_T_ADDR[MOD_NUM]=0;
  337.                           else MOD_T_ADDR[MOD_NUM]+=1;
  338.                          }
  339.                   }
  340.           }
  341.     MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));        
  342. }

  343. void key3_fun(void)                                       //按键3功能--减
  344. {
  345.          if(!key3)
  346.           {
  347.             delayus(1000);
  348.                  if(!key3)
  349.                   {
  350.                    while(!key3);
  351.                    if(MOD_T_ADDR[MOD_NUM]==0)  MOD_T_ADDR[MOD_NUM]=99;
  352.                    else MOD_T_ADDR[MOD_NUM]-=1;
  353.                   }
  354.           }
  355.      MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));           
  356. }
  357. void key4_fun(void)                                 //存储键:模式,闪烁快慢存储
  358. {
  359.          if(!key4)
  360.           {
  361.             delayus(1000);
  362.                  if(!key4)
  363.                   {
  364.                    while(!key4);
  365.                     MOD_NUM_REM=MOD_NUM;
  366.                         MOD_T_ADD_REM=MOD_T_ADDR[MOD_NUM];
  367.                   }
  368.           }
  369. }

  370. void key_fun(void)
  371. {                                                                                                
  372.   // if(!key1||!key2||!key3||!key4)         key_flag=1;
  373.    //if(key_flag)
  374.           key1_fun();
  375.           key2_fun();
  376.           key3_fun();        
  377.           key4_fun();
  378.          
  379. }
  380. //-------------------------------------------------//
  381. void voice_ctr(void)
  382. {
  383.          if(!voice)
  384.          {
  385.            //delayus(10);
  386.            while(!voice);
  387.            num++;
  388.            if(num==7) num=0;
  389.          }
  390. }
  391. /**************led花样闪烁*****************/
  392. void led_work(void)
  393.    {
  394.                                                      
  395.     if(MOD_NUM==0)            { led_mod0(); }
  396.         else if(MOD_NUM==1)        { led_mod1(); }
  397.         else if(MOD_NUM==2) { led_mod2(); }
  398.         else if(MOD_NUM==3) { led_mod3(); }
  399.         else if(MOD_NUM==4) { led_mod4(); }
  400.         else
  401.              {
  402.                  led1=1;
  403.              led2=1;
  404.                  led3=1;
  405.                  }
  406.    }
  407. /*****************************显示函数:模式和闪烁快慢显示***************************/
  408. void dis(void)
  409. {
  410.   /*P0=led_tab[MOD_NUM/10]; seg1           delayus(50);
  411.   P0=led_tab[MOD_NUM%10]; seg2           delayus(50);
  412.   P0=led_tab[MOD_T_ADD/10]; seg3               delayus(50);
  413.   P0=led_tab[MOD_T_ADD%10]; seg4               delayus(50);
  414.   */                                                                                          
  415.               if(TN==1)
  416.                     {
  417.                          led_disp(1,led_mod[MOD_NUM*2]);
  418.                          //delayus(5);
  419.                          }
  420.                   else if(TN==2)
  421.                         {
  422.                         led_disp(2,led_mod[MOD_NUM*2+1]);
  423.                         //delay_nms(5);
  424.                 //        delayus(5);
  425.                         }
  426.                   else if(TN==3)
  427.                     {
  428.                         led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);
  429.                         //delay_nms(5);
  430.                 //        delayus(5);
  431.                         }
  432.                   else
  433.                     {
  434.                         led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);
  435.                         //delay_nms(5);
  436.                 //        delayus(5);
  437.                         }

  438.        /*   if(TN==0)
  439.                     { led_disp(0,led_mod[MOD_NUM*2]);        }
  440.                   else if(TN==1)
  441.                         { led_disp(1,led_mod[MOD_NUM*2+1]);        }
  442.                   else if(TN==2)
  443.                     {led_disp(2,led_tab[MOD_T_ADD/10]);}
  444.                   else
  445.                     {led_disp(3,led_tab[MOD_T_ADD%10]);}
  446.                         */
  447.                         
  448.     /*if(MOD_NUM==0)
  449.              {
  450.                   if(TN==0)
  451.                     { led_disp(0,led_mod[0]);        }
  452.                   else if(TN==1)
  453.                         { led_disp(1,led_mod[1]);        }
  454.                   else if(TN==2)
  455.                     {led_disp(2,led_tab[MOD_T_ADD0/10]);}
  456.                   else
  457.                     {led_disp(3,led_tab[MOD_T_ADD0%10]);}
  458.                  }
  459.           else if(MOD_NUM==1)
  460.              {
  461.                   if(TN==0)
  462.                     { led_disp(0,led_mod[2]);        }
  463.                   else if(TN==1)
  464.                         { led_disp(1,led_mod[3]);        }
  465.                   else if(TN==2)
  466.                     {led_disp(2,led_tab[MOD_T_ADD1/10]);}
  467.                   else
  468.                     {led_disp(3,led_tab[MOD_T_ADD1%10]);}
  469.                  }
  470.         else if(MOD_NUM==2)
  471.              {
  472.                   if(TN==0)
  473.                     { led_disp(0,led_mod[4]);        }
  474.                   else if(TN==1)
  475.                         { led_disp(1,led_mod[5]);        }
  476.                   else if(TN==2)
  477.                     {led_disp(2,led_tab[MOD_T_ADD2/10]);}
  478.                   else
  479.                     {led_disp(3,led_tab[MOD_T_ADD2%10]);}
  480.                  }
  481.         else if(MOD_NUM==3)
  482.              {
  483.                   if(TN==0)
  484.                     { led_disp(0,led_mod[6]);        }
  485.                   else if(TN==1)
  486.                         { led_disp(1,led_mod[7]);        }
  487.                   else if(TN==2)
  488.                     {led_disp(2,led_tab[MOD_T_ADD3/10]);}
  489.                   else
  490.                     {led_disp(3,led_tab[MOD_T_ADD3%10]);}
  491.                  }
  492.         else if(MOD_NUM==4)
  493.              {
  494.                   if(TN==0)
  495.                     { led_disp(0,led_mod[8]);        }
  496.                   else if(TN==1)
  497.                         { led_disp(1,led_mod[9]);        }
  498.                   else if(TN==2)
  499.                     {led_disp(2,led_tab[MOD_T_ADD4/10]);}
  500.                   else
  501.                     {led_disp(3,led_tab[MOD_T_ADD4%10]);}
  502.                  }
  503.         else
  504.              {
  505.                   if(TN==0)
  506.                     { led_disp(0,led_mod[10]);        }
  507.                   else if(TN==1)
  508.                         { led_disp(1,led_mod[11]);        }
  509.                   else if(TN==2)
  510.                     {led_disp(2,led_tab[MOD_T_ADD5/10]);}
  511.                   else
  512.                     {led_disp(3,led_tab[MOD_T_ADD5%10]);}
  513.                  }
  514.         */        
  515. }
  516. void dis1(void)
  517. {
  518.     /*
  519.         led_disp(1,led_tab[11]);
  520.         led_disp(2,led_tab[11]);
  521.         led_disp(3,led_tab[0]);
  522.         led_disp(4,led_tab[0]);         delay_led(500);
  523.         */
  524.   if(TN==1)
  525.    {
  526.     led_disp(1,led_mod[MOD_NUM*2]);                delay_led(35);
  527.         led_disp(2,led_mod[MOD_NUM*2+1]);        delay_led(35);
  528.         led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
  529.         led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
  530.    }
  531.   else if(TN==2)
  532.    {
  533.     led_disp(2,led_mod[MOD_NUM*2+1]);         delay_led(35);
  534.         led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);  delay_led(35);
  535.         led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);  delay_led(35);
  536.         led_disp(1,led_mod[MOD_NUM*2]);                                  delay_led(35);
  537.    }
  538.   else if(TN==3)
  539.    {
  540.     led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);  delay_led(35);
  541.         led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);  delay_led(35);
  542.         led_disp(1,led_mod[MOD_NUM*2]);                                   delay_led(35);
  543.         led_disp(2,led_mod[MOD_NUM*2+1]);                         delay_led(35);
  544.         }
  545.   else if(TN==4)
  546.    {
  547.     led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);        delay_led(35);
  548.         led_disp(1,led_mod[MOD_NUM*2]);                                        delay_led(35);
  549.         led_disp(2,led_mod[MOD_NUM*2+1]);                                delay_led(35);
  550.         led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);        delay_led(35);
  551.    }
  552. }
  553. void disp(void)
  554. {
  555.                    P0=led_tab[11]; P2=0x20;                // P0=0x0f;  //led_tab[11];
  556.                    delayus(14);
  557.                    //P2=0xff;
  558.                    //delayms(10);
  559.                   
  560.                    P0=led_tab[11]; P2=0x10;                 //P0=0x0f;  //led_tab[11];
  561.                    delayus(14);
  562.                    //P2=0x00;                  
  563.                    //P2=0xff;
  564.                    //delayms(10);
  565.                  
  566.                    P0=led_tab[0]; P2=0x08;         // P0=0x0a;  //led_tab[0];
  567.                    delayus(14);
  568.                    //P2=0x00;               
  569.                    //P2=0xff;
  570.                    //delayms(10);
  571.                   
  572.                     P0=led_tab[0]; P2=0x40;          //P0=0x0a;  //led_tab[0];
  573.                     delayus(14);        
  574.                         //P2=0x00;        
  575.                    //P2=0xff;
  576.                    //delayms(10);
  577. }        
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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