找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4718|回复: 4
收起左侧

16层彩色广州塔源程序

[复制链接]
ID:99600 发表于 2017-6-19 15:13 | 显示全部楼层 |阅读模式

原理图

原理图

单片机测试程序:

  1. #include<reg52.h>                         //头文件
  2. #define uint unsigned int         //宏定义
  3. #define uchar unsigned char         //宏定义
  4. #include<intrins.h>                         //循环函数的头文件
  5. uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//从低位往高位灭一个灯流水
  6. uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//从高位往低位灭一个灯流水
  7. uchar code table2[]={0xfe,0xfa,0xf8,0xf0,0xe0,0xa0,0x80,0x00};//从低位到高位逐步全部熄灭
  8. uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//从高位到低位逐步全部熄灭
  9. uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//从低位到高位逐步全部点亮
  10. uchar code table5[]={0x80,0xa0,0xe0,0xf0,0xf8,0xfa,0xfe,0xff};//从高位到低位逐步全部点亮
  11. uchar code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//从低位到高位,亮一个灯移动
  12. uchar code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//从高位到低位,亮一个灯移动

  13. uchar code table8[]={0xfc,0xfe,0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x80,0xc0,0xe0,0xf0,0xf1};
  14. uchar code table9[]={0x03,0x01,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x7f,0x3f,0x1f,0x0f,0x07};

  15. uchar code table10[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
  16. uchar code table11[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe};

  17. uchar code table12[]={0x1f,0x0f,0x07,0x03,0x01,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x7f,0x3f};
  18. uchar code table13[]={0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x80,0xc0};


  19. uchar i,b;


  20. sbit r1=P3^2; //红色上8层片选
  21. sbit r2=P3^3; //红色下8层片选
  22. sbit b1=P3^4; //绿色上8层片选
  23. sbit b2=P3^5; //绿色下8层片选
  24. sbit g1=P3^6; //蓝色上8层片选
  25. sbit g2=P3^7; //蓝色下8层片选

  26. void delay(uint z) //延时函数
  27. {
  28.         uint x,y;
  29.         for(x=z;x>0;x--)
  30.                 for(y=314;y>0;y--);
  31. }
  32. /******************************************/
  33. void liushui0()//两列红色逆时针转动
  34. {
  35.         r1=1;        //开红色使能
  36.         r2=1;        //开红色使能

  37.         P0=0xff;//
  38.         for(i=0;i<8;i++)
  39.         {
  40.                 P1=table6[i];
  41.                 P2=table6[i];
  42.                 delay(30);
  43.         }
  44.            P1=0x00;P2=0x00;
  45.         P0=0x00;
  46.         r1=0;  //关红色使能
  47.         r2=0;  //关红色使能
  48. }
  49. void rr()//红色亮一会儿
  50. {
  51.         r1=1;
  52.         r2=1;
  53.         P0=0xff;
  54.         P2=0xff;
  55.         P1=0xff;
  56.         delay(100);
  57.         P0=0x00;
  58.         r1=0;
  59.         r2=0;
  60.         P2=0x00;
  61.         P1=0x00;
  62. }
  63. /******************************************/
  64. void liushui1()//两列绿色逆时针转动
  65. {
  66.         g1=1;        //开绿色使能
  67.         g2=1;        //开绿色使能

  68.         P0=0xff;//
  69.         for(i=0;i<8;i++)
  70.         {
  71.                 P1=table6[i];
  72.                 P2=table6[i];
  73.                 delay(30);
  74.         }
  75.            P1=0x00;P2=0x00;
  76.         P0=0x00;
  77.         g1=0;  //关绿色使能
  78.         g2=0;  //关绿色使能
  79. }
  80. void gg()//绿色亮一会儿
  81. {
  82.         g1=1;
  83.         g2=1;
  84.         P0=0xff;
  85.         P2=0xff;
  86.         P1=0xff;
  87.         delay(100);
  88.         P0=0x00;
  89.         g1=0;
  90.         g2=0;
  91.         P2=0x00;
  92.         P1=0x00;
  93. }
  94. /******************************************/
  95. void liushui2()//两列蓝色逆时针转动
  96. {
  97.         b1=1;        //开蓝色使能
  98.         b2=1;        //开蓝色使能

  99.         P0=0xff;//
  100.         for(i=0;i<8;i++)
  101.         {
  102.                 P1=table6[i];
  103.                 P2=table6[i];
  104.                 delay(30);
  105.         }
  106.            P1=0x00;P2=0x00;
  107.         P0=0x00;
  108.         b1=0;  //关蓝色使能
  109.         b2=0;  //关蓝色使能
  110. }
  111. void bb()//蓝色亮一会儿
  112. {
  113.         b1=1;
  114.         b2=1;
  115.         P0=0xff;
  116.         P2=0xff;
  117.         P1=0xff;
  118.         delay(100);
  119.         P0=0x00;
  120.         b1=0;
  121.         b2=0;
  122.         P2=0x00;
  123.         P1=0x00;
  124. }
  125. void liushui3()//红色单层向上移动
  126. {
  127.         P1=0xff;P2=0xff;
  128.         b2=1;
  129.         for(i=0;i<8;i++)
  130.         {
  131.                 P0=table7[i];
  132.                 delay(30);
  133.         }
  134.         P0=0x00;
  135.         b2=0;
  136. /********* **********/
  137.         P1=0xff;P2=0xff;
  138.         b1=1;
  139.         for(i=0;i<8;i++)
  140.         {
  141.                 P0=table7[i];
  142.                 delay(30);
  143.         }
  144.         P0=0x00;
  145.         b1=0;
  146. }
  147. /***********************/
  148. void liushui4()//红、黄、绿、青、蓝、洋红、白、红,向上流动
  149. {
  150.         uchar a,b,c;//绿、红、蓝


  151.         a=0x8d;
  152.         b=0x38;
  153.         c=0xe1;
  154. /////////////

  155.         r1=1;P0=b;r1=0;
  156.         r2=1;P0=b;r2=0;

  157.         g1=1;P0=a;g1=0;
  158.         g2=1;P0=a;g2=0;

  159.         b1=1;P0=c;b1=0;
  160.         b2=1;P0=c;b2=0;

  161.         P1=0xff;P2=0xff;

  162.         for(i=0;i<8;i++)
  163.         {
  164.                 a=_cror_(a,1);//循环左移
  165.                 b=_cror_(b,1);//循环左移
  166.                 c=_cror_(c,1);//循环左移
  167.                 delay(80);//延时
  168.         r1=1;P0=b;r1=0;
  169.         r2=1;P0=b;r2=0;

  170.         g1=1;P0=a;g1=0;
  171.         g2=1;P0=a;g2=0;

  172.         b1=1;P0=c;b1=0;
  173.         b2=1;P0=c;b2=0;

  174.         }
  175.         P3=0xff;P0=0x00;P3=0x00;
  176.         P1=0x00;P2=0x00;

  177. }

  178. /*************************************************/
  179. void liushui5()//红、黄、绿、青、蓝、洋红、白、红,向下流动
  180. {
  181.         uchar a,b,c;//绿、红、蓝


  182.         a=0x8d;
  183.         b=0x38;
  184.         c=0xe1;
  185. /////////////

  186.         r1=1;P0=b;r1=0;
  187.         r2=1;P0=b;r2=0;

  188.         g1=1;P0=a;g1=0;
  189.         g2=1;P0=a;g2=0;

  190.         b1=1;P0=c;b1=0;
  191.         b2=1;P0=c;b2=0;

  192.         P1=0xff;P2=0xff;

  193.         for(i=0;i<8;i++)
  194.         {
  195.                 a=_crol_(a,1);//循环左移
  196.                 b=_crol_(b,1);//循环左移
  197.                 c=_crol_(c,1);//循环左移
  198.                 delay(80);//延时
  199.         r1=1;P0=b;r1=0;
  200.         r2=1;P0=b;r2=0;

  201.         g1=1;P0=a;g1=0;
  202.         g2=1;P0=a;g2=0;

  203.         b1=1;P0=c;b1=0;
  204.         b2=1;P0=c;b2=0;

  205.         }
  206.         P3=0xff;P0=0x00;P3=0x00;
  207.         P1=0x00;P2=0x00;

  208. }
  209. void liushui6()//白色单层向上
  210. {
  211.         uchar a,b,c;//绿、红、蓝


  212.         a=0x80;
  213.         b=0x80;
  214.         c=0x80;
  215. /////////////

  216.         r2=1;P0=b;r2=0;
  217.         g2=1;P0=a;g2=0;
  218.         b2=1;P0=c;b2=0;

  219.         P1=0xff;P2=0xff;

  220.         for(i=0;i<8;i++)
  221.         {
  222.                 a=_cror_(a,1);//循环左移
  223.                 b=_cror_(b,1);//循环左移
  224.                 c=_cror_(c,1);//循环左移
  225.                 delay(25);//延时

  226.         r2=1;P0=b;r2=0;
  227.         g2=1;P0=a;g2=0;
  228.         b2=1;P0=c;b2=0;

  229.         }
  230.         P3=0xff;P0=0x00;P3=0x00;
  231.         P1=0x00;P2=0x00;
  232. /*****************************************/
  233.         r1=1;P0=b;r1=0;
  234.         g1=1;P0=a;g1=0;
  235.         b1=1;P0=c;b1=0;

  236.         P1=0xff;P2=0xff;

  237.         for(i=0;i<8;i++)
  238.         {
  239.                 a=_cror_(a,1);//循环左移
  240.                 b=_cror_(b,1);//循环左移
  241.                 c=_cror_(c,1);//循环左移
  242.                 delay(25);//延时

  243.         r1=1;P0=b;r1=0;
  244.         g1=1;P0=a;g1=0;
  245.         b1=1;P0=c;b1=0;

  246.         }
  247.         P3=0xff;P0=0x00;P3=0x00;
  248.         P1=0x00;P2=0x00;
  249. }
  250. /****************************************************/
  251. void liushui7()//白色单层向下
  252. {
  253.         uchar a,b,c;//绿、红、蓝


  254.         a=0x01;
  255.         b=0x01;
  256.         c=0x01;
  257. /////////////


  258.         r1=1;P0=b;r1=0;
  259.         g1=1;P0=a;g1=0;
  260.         b1=1;P0=c;b1=0;

  261.         P1=0xff;P2=0xff;

  262.         for(i=0;i<8;i++)
  263.         {
  264.                 a=_crol_(a,1);//循环左移
  265.                 b=_crol_(b,1);//循环左移
  266.                 c=_crol_(c,1);//循环左移
  267.                 delay(25);//延时

  268.         r1=1;P0=b;r1=0;
  269.         g1=1;P0=a;g1=0;
  270.         b1=1;P0=c;b1=0;

  271.         }
  272.         P3=0xff;P0=0x00;P3=0x00;
  273.         P1=0x00;P2=0x00;
  274. /*****************************************/        
  275.         r2=1;P0=b;r2=0;
  276.         g2=1;P0=a;g2=0;
  277.         b2=1;P0=c;b2=0;

  278.         P1=0xff;P2=0xff;

  279.         for(i=0;i<8;i++)
  280.         {
  281.                 a=_crol_(a,1);//循环左移
  282.                 b=_crol_(b,1);//循环左移
  283.                 c=_crol_(c,1);//循环左移
  284.                 delay(25);//延时

  285.         r2=1;P0=b;r2=0;
  286.         g2=1;P0=a;g2=0;
  287.         b2=1;P0=c;b2=0;

  288.         }
  289.         P3=0xff;P0=0x00;P3=0x00;
  290.         P1=0x00;P2=0x00;
  291. }
  292. /********************************************************************/
  293. void liushui8()//6色向上流动
  294. {
  295.         P1=0x00;P2=0x00;
  296.         P1=0xff;P2=0xff;
  297.         for(i=0;i<16;i++)
  298.         {
  299.                 r2=1;P0=table8[i];r2=0;
  300.                 r1=1;P0=table9[i];r1=0;
  301.         P1=0x00;P2=0x00;
  302.         P1=0xff;P2=0xff;
  303.                 /******/
  304.                 g2=1;P0=table10[i];g2=0;
  305.                 g1=1;P0=table11[i];g1=0;

  306.         P1=0x00;P2=0x00;
  307.         P1=0xff;P2=0xff;

  308.                 b2=1;P0=table12[i];b2=0;
  309.                 b1=1;P0=table13[i];b1=0;
  310.                 delay(25);
  311.         }

  312.         P3=0xff;P0=0x00;P3=0x00;
  313. }
  314. /***********************************************************************/
  315. void liushui9()//6色向下流动
  316. {
  317.         P1=0x00;P2=0x00;
  318.         P1=0xff;P2=0xff;
  319.         for(i=16;i>0;i--)
  320.         {
  321.                 r2=1;P0=table8[i];r2=0;
  322.                 r1=1;P0=table9[i];r1=0;
  323.         P1=0x00;P2=0x00;
  324.         P1=0xff;P2=0xff;
  325.                 /******/
  326.                 g2=1;P0=table10[i];g2=0;
  327.                 g1=1;P0=table11[i];g1=0;

  328.         P1=0x00;P2=0x00;
  329.         P1=0xff;P2=0xff;

  330.                 b2=1;P0=table12[i];b2=0;
  331.                 b1=1;P0=table13[i];b1=0;
  332.                 delay(25);
  333.         }

  334.         P3=0xff;P0=0x00;P3=0x00;
  335. }
  336. /********************************************************************************
  337. *********************************************************************************
  338. *********************************************************************************/
  339. void main()
  340. {
  341.         r1=1;P0=0x80;r1=0;
  342.         r2=1;P0=0x80;r2=0;

  343.         g1=1;P0=0x00;g1=0;
  344.         g2=1;P0=0x00;g2=0;

  345.         b1=1;P0=0x00;b1=0;
  346.         b2=1;P0=0x00;b2=0;
  347.         P1=0x00;
  348.         P2=0x00;
  349. /**************************************/

  350. while(1)
  351.          {
  352. /*        */
  353.           liushui0();//两列红色逆时针转动
  354.           liushui1();//两列绿色逆时针转动
  355.           liushui2();//两列蓝色逆时针转动
  356.           liushui3();//红色单层向上移动
  357.          
  358. //          gg();//绿色亮一会儿
  359. //          rr();//红色亮一会儿
  360. //          bb();//蓝色亮一会儿
  361. //
  362. //          liushui4();//红、黄、绿、青、蓝、洋红、白、红,向上流动
  363. //          liushui4();//红、黄、绿、青、蓝、洋红、白、红,向上流动
  364. //          liushui4();//红、黄、绿、青、蓝、洋红、白、红,向上流动
  365. //
  366. //          liushui5();//红、黄、绿、青、蓝、洋红、白、红,向下流动
  367. //          liushui5();//红、黄、绿、青、蓝、洋红、白、红,向下流动
  368. //          liushui5();//红、黄、绿、青、蓝、洋红、白、红,向下流动
  369. //
  370. //
  371. //          liushui6();//白色单层向上
  372. //          liushui7();//白色单层向下
  373. //
  374. //
  375. //          liushui8();//6色向上流动
  376. //          liushui8();//6色向上流动
  377. //          liushui8();//6色向上流动
  378. //          liushui9();//6色向下流动
  379. //          liushui9();//6色向下流动
  380. //          liushui9();//6色向下流动
  381. /******************************************/

  382.         }
  383.          
  384. }

复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:212722 发表于 2017-6-19 20:54 | 显示全部楼层
哇,好厉害好厉害。
回复

使用道具 举报

ID:238760 发表于 2017-12-7 10:32 | 显示全部楼层
谢谢楼主的分享。
回复

使用道具 举报

ID:258542 发表于 2017-12-17 15:22 | 显示全部楼层
厉害 厉害  仿制一个
回复

使用道具 举报

ID:171273 发表于 2018-5-19 14:57 | 显示全部楼层
不错,写的很详细,赞一个。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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