找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12C5A60S2单片机广州塔展示效果源程序

[复制链接]
跳转到指定楼层
楼主
ID:200306 发表于 2017-5-13 15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC12C5A60S2是STC系列单片机里应用比较广泛的一款,在自动控制领域里享有很高的价值,以其易用性和多功能性受到了广大电子设计爱好者的好评。本次设计主要是利用STC12C5A60S2单片机、该系统采用增强型8051单片机STC12C5A60S2为主控制器,利用单片机控制点阵的原理,控制广州塔展示效果,还通过单片机内置的ADC对音频信号进行采样,然后控制广州塔亮的层数达到根据音乐跳舞的效果。该方案具有电路结构简洁,开发、生产成本低的优点。

单片机源程序如下:
  1. #include <stc12c5a60s2.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define LongToBin(n) (((n>>21)&0x80)|((n>>18)&0x40)|((n>>15)&0x20)|((n>>12)&0x10)|((n>>9)&0x08)|((n>>6)&0x04)|((n>>3)&0x02)|((n)&0x01))
  5. #define BIN(n) LongToBin(0x##n##)

  6. sbit H1=P2^0;   
  7. sbit H2=P2^1;   
  8. sbit L1=P2^2;  
  9. sbit L2=P2^3;

  10. sbit anjian=P3^2;

  11. uint yanshi;
  12. char moshi=0;
  13. char flag=0;

  14. void delay_1ms(uint q)
  15. {
  16.         uint i,j;
  17.         for(i=0;i<q;i++)
  18.                 for(j=0;j<120;j++);
  19. }
  20. void dh1()
  21. {
  22.         char i;
  23.         yanshi=400;
  24.         P0=0XFF;
  25.         L1=L2=1;
  26.         L1=L2=0;
  27.         for(i=0;i<12;i++)
  28.         {
  29.                 P0=0X01;
  30.                 H1=1;
  31.                 H1=0;
  32.                 H2=1;
  33.                 H2=0;
  34.                 delay_1ms(yanshi);

  35.                 P0=0X02;
  36.                 H1=1;
  37.                 H1=0;
  38.                 H2=1;
  39.                 H2=0;
  40.                 delay_1ms(yanshi);
  41.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  42.                 P0=0X04;
  43.                 H1=1;
  44.                 H1=0;
  45.                 H2=1;
  46.                 H2=0;
  47.                 delay_1ms(yanshi);

  48.                 P0=0X08;
  49.                 H1=1;
  50.                 H1=0;
  51.                 H2=1;
  52.                 H2=0;
  53.                 delay_1ms(yanshi);
  54.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  55.                 P0=0X10;
  56.                 H1=1;
  57.                 H1=0;
  58.                 H2=1;
  59.                 H2=0;
  60.                 delay_1ms(yanshi);

  61.                 P0=0X20;
  62.                 H1=1;
  63.                 H1=0;
  64.                 H2=1;
  65.                 H2=0;
  66.                 delay_1ms(yanshi);
  67.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  68.                 P0=0X40;
  69.                 H1=1;
  70.                 H1=0;
  71.                 H2=1;
  72.                 H2=0;
  73.                 delay_1ms(yanshi);

  74.                 P0=0X80;
  75.                 H1=1;
  76.                 H1=0;
  77.                 H2=1;
  78.                 H2=0;
  79.                 delay_1ms(yanshi);       
  80.         }
  81. }
  82. void dh2()
  83. {
  84.         char i,j;
  85.         yanshi=500;
  86.         P0=0XFF;
  87.         H1=H2=1;
  88.         H1=H2=0;
  89.         for(i=0;i<1;i++)
  90.         {
  91.                 P0=0X00;
  92.                 L1=1;
  93.                 L1=0;

  94.                 P0=0X01;
  95.                 L2=1;
  96.                 L2=0;
  97.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  98.                 delay_1ms(yanshi);
  99.                 for(j=0;j<7;j++)
  100.                 {
  101.                         P0=P0<<1;
  102.                         L2=1;
  103.                         L2=0;
  104.                         delay_1ms(yanshi);
  105.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  106.                 }

  107.                 P0=0X00;
  108.                 L2=1;
  109.                 L2=0;

  110.                 P0=0X01;
  111.                 L1=1;
  112.                 L1=0;
  113.                 delay_1ms(yanshi);
  114.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  115.                 for(j=0;j<7;j++)
  116.                 {
  117.                         P0=P0<<1;
  118.                         L1=1;
  119.                         L1=0;
  120.                         delay_1ms(yanshi);
  121.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  122.                 }

  123.                 P0=0X80;
  124.                 L1=1;
  125.                 L1=0;
  126.                 delay_1ms(yanshi);
  127.                 for(j=0;j<7;j++)
  128.                 {
  129.                         P0=P0>>1;
  130.                         L1=1;
  131.                         L1=0;
  132.                         delay_1ms(yanshi);
  133.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  134.                 }

  135.                 P0=0X00;
  136.                 L1=1;
  137.                 L1=0;
  138.                
  139.                 P0=0X80;
  140.                 L2=1;
  141.                 L2=0;
  142.                 delay_1ms(yanshi);
  143.                 for(j=0;j<7;j++)
  144.                 {
  145.                         P0=P0>>1;
  146.                         L2=1;
  147.                         L2=0;
  148.                         delay_1ms(yanshi);
  149.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  150.                 }                                       
  151.         }
  152. }
  153. void dh3()
  154. {
  155.         char i,j;
  156.         yanshi=400;
  157.         P0=0XFF;
  158.         H1=H2=1;
  159.         H1=H2=0;

  160.         for(i=0;i<2;i++)
  161.         {
  162.                 P0=0X01;
  163.                 L2=1;
  164.                 L2=0;
  165.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  166.                 delay_1ms(yanshi);
  167.                 for(j=0;j<7;j++)
  168.                 {
  169.                         P0=(P0<<1)|0x01;
  170.                         L2=1;
  171.                         L2=0;
  172.                         delay_1ms(yanshi);
  173.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  174.                 }

  175.                 P0=0X01;
  176.                 L1=1;
  177.                 L1=0;
  178.                 delay_1ms(yanshi);
  179.                 for(j=0;j<7;j++)
  180.                 {
  181.                         P0=(P0<<1)|0x01;
  182.                         L1=1;
  183.                         L1=0;
  184.                         delay_1ms(yanshi);
  185.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  186.                 }
  187.                 delay_1ms(5000);

  188.                 P0=0X7F;
  189.                 for(j=0;j<7;j++)
  190.                 {
  191.                         P0=P0>>1;
  192.                         L1=1;
  193.                         L1=0;
  194.                         delay_1ms(yanshi);
  195.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  196.                 }
  197.        
  198.                 P0=0X7F;
  199.                 L2=1;
  200.                 L2=0;
  201.                 delay_1ms(yanshi);
  202.                 for(j=0;j<7;j++)
  203.                 {
  204.                         P0=P0>>1;
  205.                         L2=1;
  206.                         L2=0;
  207.                         delay_1ms(yanshi);
  208.                         if(anjian==0){while(anjian==0);moshi=1;break;}       
  209.                 }               
  210.         }
  211. }
  212. void dh4()
  213. {
  214.         char i;

  215.         P0=0X81;
  216.         L1=1;
  217.         L1=0;
  218.         P0=0X02;
  219.         L2=1;
  220.         L2=0;
  221.         for(i=0;i<5;i++)
  222.         {
  223.                 P0=0X33;
  224.                 H1=1;
  225.                 H1=0;
  226.                 H2=1;
  227.                 H2=0;
  228.                 delay_1ms(600);

  229.                 P0=0X66;
  230.                 H1=1;
  231.                 H1=0;
  232.                 H2=1;
  233.                 H2=0;
  234.                 delay_1ms(600);
  235.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  236.                 P0=0XCC;
  237.                 H1=1;
  238.                 H1=0;
  239.                 H2=1;
  240.                 H2=0;
  241.                 delay_1ms(600);

  242.                 P0=0X99;
  243.                 H1=1;
  244.                 H1=0;
  245.                 H2=1;
  246.                 H2=0;
  247.                 delay_1ms(600);
  248.         }       
  249. }
  250. char s1,s2;
  251. void dh5()
  252. {
  253.         char i,j;
  254.         yanshi=500;
  255.         P0=0XFF;
  256.         H1=H2=1;
  257.         H1=H2=0;

  258.         for(i=0;i<5;i++)
  259.         {
  260.                 s1=0x01;
  261.                 s2=0x80;

  262.                 P0=s1;
  263.                 L1=1;
  264.                 L1=0;

  265.                 P0=s2;
  266.                 L2=1;
  267.                 L2=0;
  268.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  269.                 delay_1ms(yanshi);               
  270.                 for(j=0;j<7;j++)
  271.                 {
  272.                         s2=(s2>>1)&0x7F;
  273.                         P0=s2;
  274.                         L2=1;
  275.                         L2=0;

  276.                         s1=s1<<1;
  277.                         P0=s1;
  278.                         L1=1;
  279.                         L1=0;

  280.                         delay_1ms(yanshi);
  281.                         if(anjian==0){while(anjian==0);moshi=1;break;}                       
  282.                 }                                                                                       
  283.         }
  284. }
  285. void dh6()
  286. {
  287.         char i,j;
  288.         yanshi=500;
  289.         P0=0XFF;
  290.         H1=H2=1;
  291.         H1=H2=0;

  292.         for(i=0;i<5;i++)
  293.         {
  294.                 P0=0x00;
  295.                 L2=1;
  296.                 L2=0;
  297.                 P0=0x80;
  298.                 L1=1;
  299.                 L1=0;
  300.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  301.                 delay_1ms(yanshi);               
  302.                 for(j=0;j<7;j++)
  303.                 {
  304.                         P0=(P0>>1)|0x80;
  305.                         L1=1;
  306.                         L1=0;
  307.                         delay_1ms(yanshi);
  308.                         if(anjian==0){while(anjian==0);moshi=1;break;}                       
  309.                 }
  310.                
  311.                 P0=0x80;
  312.                 L2=1;
  313.                 L2=0;

  314.                 delay_1ms(yanshi);               
  315.                 for(j=0;j<7;j++)
  316.                 {
  317.                         P0=(P0>>1)|0x80;
  318.                         L2=1;
  319.                         L2=0;
  320.                         delay_1ms(yanshi);
  321.                         if(anjian==0){while(anjian==0);moshi=1;break;}                       
  322.                 }                                                                                       
  323.         }
  324. }
  325. void dh7()
  326. {
  327.         char i;

  328.         P0=0XFF;
  329.         L1=1;
  330.         L1=0;
  331.         P0=0XFF;
  332.         L2=1;
  333.         L2=0;
  334.         for(i=0;i<5;i++)
  335.         {
  336.                 P0=0X11;
  337.                 H1=1;
  338.                 H1=0;
  339.                 H2=1;
  340.                 H2=0;
  341.                 delay_1ms(700);

  342.                 P0=0X22;
  343.                 H1=1;
  344.                 H1=0;
  345.                 H2=1;
  346.                 H2=0;
  347.                 delay_1ms(700);
  348.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  349.                 P0=0X44;
  350.                 H1=1;
  351.                 H1=0;
  352.                 H2=1;
  353.                 H2=0;
  354.                 delay_1ms(700);

  355.                 P0=0X88;
  356.                 H1=1;
  357.                 H1=0;
  358.                 H2=1;
  359.                 H2=0;
  360.                 delay_1ms(700);
  361.         }       
  362. }
  363. void dh8()
  364. {
  365.         char i;

  366.         P0=0XFF;
  367.         L1=1;
  368.         L1=0;
  369.         P0=0XFF;
  370.         L2=1;
  371.         L2=0;
  372.         for(i=0;i<5;i++)
  373.         {
  374.                 P0=0X33;
  375.                 H1=1;
  376.                 H1=0;
  377.                 H2=1;
  378.                 H2=0;
  379.                 delay_1ms(600);

  380.                 P0=0X66;
  381.                 H1=1;
  382.                 H1=0;
  383.                 H2=1;
  384.                 H2=0;
  385.                 delay_1ms(600);
  386.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  387.                 P0=0XCC;
  388.                 H1=1;
  389.                 H1=0;
  390.                 H2=1;
  391.                 H2=0;
  392.                 delay_1ms(600);

  393.                 P0=0X99;
  394.                 H1=1;
  395.                 H1=0;
  396.                 H2=1;
  397.                 H2=0;
  398.                 delay_1ms(600);
  399.         }       
  400. }
  401. void dh9()
  402. {
  403.         char i;

  404.         P0=0XFF;
  405.         L1=1;
  406.         L1=0;
  407.         P0=0XFF;
  408.         L2=1;
  409.         L2=0;
  410.         for(i=0;i<10;i++)
  411.         {
  412.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  413.                 P0=0X55;
  414.                 H1=1;
  415.                 H1=0;
  416.                 H2=1;
  417.                 H2=0;
  418.                 delay_1ms(600);

  419.                 P0=0XAA;
  420.                 H1=1;
  421.                 H1=0;
  422.                 H2=1;
  423.                 H2=0;
  424.                 delay_1ms(600);
  425.         }       
  426. }
  427. void dh10()
  428. {
  429.         char i,j;
  430.         yanshi=500;
  431.         P0=0X01;
  432.         H1=H2=1;
  433.         H1=H2=0;

  434.         for(i=0;i<5;i++)
  435.         {
  436.                 P0=0x00;
  437.                 L2=1;
  438.                 L2=0;
  439.                 P0=0x80;
  440.                 L1=1;
  441.                 L1=0;
  442.                 if(anjian==0){while(anjian==0);moshi=1;break;}       
  443.                 delay_1ms(yanshi);               
  444.                 for(j=0;j<7;j++)
  445.                 {
  446.                         P0=(P0>>1)|0x80;
  447.                         L1=1;
  448.                         L1=0;
  449.                         delay_1ms(yanshi);
  450.                         if(anjian==0){while(anjian==0);moshi=1;break;}               
  451.                 }
  452.                
  453.                 P0=0x80;
  454.                 L2=1;
  455.                 L2=0;

  456.                 delay_1ms(yanshi);               
  457.                 for(j=0;j<7;j++)
  458.                 {
  459.                         P0=(P0>>1)|0x80;
  460.                         L2=1;
  461.                         L2=0;
  462.                         delay_1ms(yanshi);
  463.                         if(anjian==0){while(anjian==0);moshi=1;break;}                       
  464.                 }                                                                                       
  465.         }
  466. }

  467. uchar STC_ADC()                   //!!根据数据手册写一个ad读取函数
  468. {                                                                                                 
  469.      uchar i;
  470.      ADC_RES   = 0;
  471.      ADC_RESL  = 0;
  472.          ADC_CONTR = BIN(10001000);
  473.          i=3;
  474.      while(i--);
  475.      while (1)                     
  476.      {
  477.          if (ADC_CONTR & BIN(10000))      
  478.               {
  479.                              break;
  480.                     }
  481.      }
  482.      ADC_CONTR = BIN(10000000);
  483.            return( ADC_RESL<<2) ;
  484. }
  485. uchar date;
  486. void init()
  487. {
  488.     TMOD= 0x10;                                  
  489.     TL1 = (65536-50000)/256;        //设置定时初值
  490.     TH1 = (65536-50000)%256;        //设置定时初值
  491.     ET1 = 1;
  492.     TR1 = 1;
  493.     EA = 0;
  494. }
  495. char h=0,v=0;
  496. void pp()
  497. {
  498.         if(date<=15 && date>0)
  499.         {       
  500.                 h=1;
  501.                 if(v<h)v=h;
  502.                 if(flag==0)
  503.                 {
  504.                         P0=0X01;
  505.                         L2=1;
  506.                         L2=0;
  507.                         delay_1ms(2);
  508.                         P0=0X00;
  509.                         L1=1;
  510.                         L1=0;
  511.                 }
  512.                 if(flag==1)
  513.                 {
  514.                         P0=0X01;
  515.                         L2=1;
  516.                         L2=0;
  517.                         delay_1ms(2);
  518.                         P0=0X00;
  519.                         L1=1;
  520.                         L1=0;               
  521.                 }               
  522.         }

  523.         if(date<=30 && date>15)
  524.         {       
  525.                 h=2;
  526.                 if(v<h)v=h;       
  527.                 if(flag==0)
  528.                 {
  529.                         P0=0X03;
  530.                         L2=1;
  531.                         L2=0;
  532.                         delay_1ms(2);
  533.                         P0=0X00;
  534.                         L1=1;
  535.                         L1=0;
  536.                 }
  537.                 if(flag==1)
  538.                 {
  539.                         P0=0X02;
  540.                         L2=1;
  541.                         L2=0;
  542.                         delay_1ms(2);
  543.                         P0=0X00;
  544.                         L1=1;
  545.                         L1=0;               
  546.                 }
  547.         }
  548.        
  549.         if(date<=45 && date>30)
  550.         {
  551.                 h=3;
  552.                 if(v<h)v=h;
  553.                 if(flag==0)
  554.                 {
  555.                         P0=0X07;
  556.                         L2=1;
  557.                         L2=0;
  558.                         delay_1ms(2);
  559.                         P0=0X00;
  560.                         L1=1;
  561.                         L1=0;
  562.                 }
  563.                 if(flag==1)
  564.                 {
  565.                         P0=0X04;
  566.                         L2=1;
  567.                         L2=0;
  568.                         delay_1ms(2);
  569.                         P0=0X00;
  570.                         L1=1;
  571.                         L1=0;               
  572.                 }
  573.         }
  574.         if(date<=60 && date>45)
  575.         {
  576.                 h=4;
  577.                 if(v<h)v=h;       
  578.                 if(flag==0)
  579.                 {
  580.                         P0=0X0F;
  581.                         L2=1;
  582.                         L2=0;
  583.                         delay_1ms(2);
  584.                         P0=0X00;
  585.                         L1=1;
  586.                         L1=0;
  587.                 }
  588.                 if(flag==1)
  589.                 {
  590.                         P0=0X08;
  591.                         L2=1;
  592.                         L2=0;
  593.                         delay_1ms(2);
  594.                         P0=0X00;
  595.                         L1=1;
  596.                         L1=0;               
  597.                 }       
  598.         }
  599.         if(date<=75 && date>60)
  600.         {
  601.                 h=5;
  602.                 if(v<h)v=h;       
  603.                 if(flag==0)
  604.                 {
  605.                         P0=0X1F;
  606.                         L2=1;
  607.                         L2=0;
  608.                         delay_1ms(2);
  609.                         P0=0X00;
  610.                         L1=1;
  611.                         L1=0;
  612.                 }
  613.                 if(flag==1)
  614.                 {
  615.                         P0=0X10;
  616.                         L2=1;
  617.                         L2=0;
  618.                         delay_1ms(2);
  619.                         P0=0X00;
  620.                         L1=1;
  621.                         L1=0;               
  622.                 }       
  623.         }
  624.         if(date<=90 && date>75)
  625.         {
  626.                 h=6;
  627.                 if(v<h)v=h;       
  628.                 if(flag==0)
  629.                 {
  630.                         P0=0X3F;
  631.                         L2=1;
  632.                         L2=0;
  633.                         delay_1ms(2);
  634.                         P0=0X00;
  635.                         L1=1;
  636.                         L1=0;
  637.                 }
  638.                 if(flag==1)
  639.                 {
  640.                         P0=0X20;
  641.                         L2=1;
  642.                         L2=0;
  643.                         delay_1ms(2);
  644.                         P0=0X00;
  645.                         L1=1;
  646.                         L1=0;               
  647.                 }               
  648.         }
  649.         if(date<=105 && date>90)
  650.         {
  651.                 h=7;
  652.                 if(v<h)v=h;       
  653.                 if(flag==0)
  654.                 {
  655.                         P0=0X7F;
  656.                         L2=1;
  657.                         L2=0;
  658.                         delay_1ms(2);
  659.                         P0=0X00;
  660.                         L1=1;
  661.                         L1=0;
  662.                 }
  663.                 if(flag==1)
  664.                 {
  665.                         P0=0X40;
  666.                         L2=1;
  667.                         L2=0;
  668.                         delay_1ms(2);
  669.                         P0=0X00;
  670.                         L1=1;
  671.                         L1=0;               
  672.                 }
  673.         }
  674.         if(date<=130 && date>105)
  675.         {
  676.                 h=8;
  677.                 if(v<h)v=h;       
  678.                 if(flag==0)
  679.                 {
  680.                         P0=0XFF;
  681.                         L2=1;
  682.                         L2=0;
  683.                         delay_1ms(2);       
  684.                         P0=0X00;
  685.                         L1=1;
  686.                         L1=0;
  687.                 }
  688.                 if(flag==1)
  689.                 {
  690.                         P0=0X80;
  691.                         L2=1;
  692.                         L2=0;
  693.                         delay_1ms(2);
  694.                         P0=0X00;
  695.                         L1=1;
  696.                         L1=0;               
  697.                 }
  698.         }
  699.         if(date<=145 && date>130)
  700.         {
  701.                 h=9;
  702.                 if(v<h)v=h;
  703.                 if(flag==0)
  704.                 {
  705.                         P0=0XFF;
  706.                         L2=1;
  707.                         L2=0;
  708.                         delay_1ms(2);
  709.                         P0=0X01;
  710.                         L1=1;
  711.                         L1=0;
  712.                 }
  713.                 if(flag==1)
  714.                 {
  715.                         P0=0X00;
  716.                         L2=1;
  717.                         L2=0;
  718.                         delay_1ms(2);
  719.                         P0=0X01;
  720.                         L1=1;
  721.                         L1=0;               
  722.                 }               
  723.         }
  724.         if(date<=160 && date>145)
  725.         {
  726.                 h=10;
  727.                 if(v<h)v=h;       
  728.                 if(flag==0)
  729.                 {
  730.                         P0=0XFF;
  731.                         L2=1;
  732.                         L2=0;
  733.                         delay_1ms(2);
  734.                         P0=0X03;
  735.                         L1=1;
  736.                         L1=0;
  737.                 }
  738.                 if(flag==1)

  739. ……………………

  740. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
综合效果程序.rar (45.64 KB, 下载次数: 65)


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

使用道具 举报

沙发
ID:269439 发表于 2018-2-4 22:12 | 只看该作者
有原理图没
回复

使用道具 举报

板凳
ID:587153 发表于 2019-7-19 22:38 | 只看该作者
谢谢楼主对我们支持
回复

使用道具 举报

地板
ID:587153 发表于 2019-7-21 08:41 来自手机 | 只看该作者
谢谢楼主支持
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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