找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3590|回复: 0
收起左侧

单片机心形流水灯 pcb,仿真,代码

[复制链接]
ID:517059 发表于 2019-4-20 13:34 | 显示全部楼层 |阅读模式
附件包含心形流水灯原理图,pcb,仿真,代码。感兴趣的小伙伴可以看下

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.png

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. uchar flag=200;
  4. ///////////////////////////////////////////////////////////////////////
  5. uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移  向下
  6. uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移  向上
  7. uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移         向下
  8. uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移  向上
  9. uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移  向下
  10. uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};
  11. ////////////////////////////////////////////////////////////////////
  12. uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
  13. uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
  14. uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};
  15. uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};
  16. uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff};
  17. uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  18. uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  19. ////////////////////////////////////////////////////////////////
  20. void shansuo();
  21. void xl();
  22. ///////////////////////////////////////////////////////////////
  23. void delay(void)   
  24. {
  25.    unsigned char m,n;
  26.          for(m=0;m<flag;m++)
  27.           for(n=0;n<250;n++)          
  28.            ;
  29. }
  30. ///////////////////////////////////
  31. void hy1(void)  //点亮状态逆时针旋转90度(一个一个灭)
  32. {
  33.   unsigned char i;
  34.   for(i=0;i<8;i++)
  35.     {
  36.                 P0=Tab11[i];P1=Tab22[i];
  37.            P2=Tab11[i];P3=Tab22[i];
  38.                 delay();
  39.          }
  40.   for(i=0;i<8;i++)
  41.     {
  42.                 P0=Tab44[i];P1=Tab55[i];
  43.            P2=Tab44[i];P3=Tab55[i];
  44.                 delay();
  45.          }
  46. }
  47. ///////////////////////////////////////////
  48. void hy2(void)  //暗中逆时针转360。(一个一个点亮)
  49. {
  50.   unsigned char i;
  51. for(flag=250;flag>0;flag=flag-50)
  52.   {
  53.         P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  54.         for(i=0;i<8;i++)
  55.     {
  56.                 P0=Tab11[i];
  57.                 delay();
  58.          }
  59.   for(i=0;i<8;i++)
  60.     {
  61.            P2=Tab11[i];
  62.                 delay();
  63.          }
  64.   for(i=0;i<8;i++)
  65.     {
  66.                 P3=Tab22[i];
  67.                 delay();
  68.          }
  69.   for(i=0;i<8;i++)
  70.     {
  71.            P1=Tab22[i];
  72.                 delay();
  73.          }
  74.         }
  75. flag=250;
  76. }
  77. ////////////////////////////////////////////////
  78. void hy3(void)  //点亮中逆时针转360°(一个一个灭)
  79. {
  80.   unsigned char i;
  81.                 flag=50;
  82.                 P0=0x00;P1=0x00;P2=0x00;P3=0x00;
  83.   for(i=0;i<8;i++)
  84.     {
  85.                 P0=Tab44[i];
  86.                 delay();
  87.          }
  88.   for(i=0;i<8;i++)
  89.     {
  90.            P2=Tab44[i];
  91.                 delay();
  92.          }
  93.   for(i=0;i<8;i++)
  94.     {
  95.                 P3=Tab33[i];
  96.                 delay();
  97.          }
  98.   for(i=0;i<8;i++)
  99.     {
  100.            P1=Tab33[i];
  101.                 delay();
  102.          }
  103.     flag=150;
  104. }
  105. ///////////////////////////////////////////////////
  106. void hy4(void)  //点亮状态顺时针旋转90度(一个一个灭)
  107. {
  108.   unsigned char i;
  109.   for(i=0;i<8;i++)
  110.     {
  111.                 P1=Tab11[i];P0=Tab22[i];
  112.            P3=Tab11[i];P2=Tab22[i];
  113.                 delay();
  114.          }
  115.   for(i=0;i<9;i++)
  116.     {
  117.                 P1=Tab6[i];P0=Tab5[i];
  118.            P3=Tab6[i];P2=Tab5[i];
  119.                 delay();
  120.          }
  121. }
  122. /////////////////////////////////////////
  123. void hy2_1(void)  //暗中逆时针转90度。(一个一个点亮)
  124. {
  125.   unsigned char i;
  126.                 flag=200;
  127.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  128.   for(i=0;i<9;i++)
  129.     {
  130.                 P0=Tab11[i];
  131.                 delay();
  132.          }
  133.                 flag=110;
  134.   for(i=0;i<9;i++)
  135.     {
  136.            P2=Tab11[i];
  137.                 delay();
  138.          }
  139.                 flag=80;
  140.   for(i=0;i<9;i++)
  141.     {
  142.                 P3=Tab22[i];
  143.                 delay();
  144.          }
  145.                 flag=80;
  146.   for(i=0;i<9;i++)
  147.     {
  148.            P1=Tab22[i];
  149.                 delay();
  150.          }
  151. }
  152. ////////////////////////////////////////////////
  153. void hy2_2(void)  //暗中逆时针转180度。(一个一个点亮)
  154. {
  155.   unsigned char i;
  156.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  157.   for(i=0;i<8;i++)
  158.     {
  159.                 P0=Tab11[i];
  160.                 delay();
  161.          }
  162.   for(i=0;i<8;i++)
  163.     {
  164.            P2=Tab11[i];
  165.                 delay();
  166.          }
  167.                 P0=0xff;P2=0xff;
  168.   for(i=0;i<8;i++)
  169.     {
  170.                 P3=Tab22[i];
  171.                 delay();
  172.          }
  173.   for(i=0;i<8;i++)
  174.     {
  175.            P1=Tab22[i];
  176.                 delay();
  177.          }
  178.                 P1=0xff;P3=0xff;
  179. }
  180. ///////////////////////////////////////////////////
  181. void hy2_3(void)  //暗中向下180。(一个一个点亮)
  182. {
  183.   unsigned char i;
  184.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  185.   for(i=0;i<8;i++)
  186.     {
  187.                 P0=Tab11[i];
  188.            P1=Tab11[i];
  189.                 delay();
  190.          }
  191.   for(i=0;i<8;i++)
  192.     {
  193.            P2=Tab11[i];
  194.                 P3=Tab11[i];
  195.                 delay();
  196.          }
  197. ///////////////////////
  198.     flag=100;
  199.   for(i=0;i<8;i++)
  200.     {
  201.                 P2=Tab33[i];
  202.            P3=Tab33[i];
  203.                 delay();
  204.          }
  205.   for(i=0;i<8;i++)
  206.     {
  207.            P0=Tab33[i];
  208.                 P1=Tab33[i];
  209.                 delay();
  210.     flag=200;
  211.          }
  212. }
  213. ///////////////////////////////////////////////////
  214. void hy2_4(void)  //暗中逆时针转360。(一个一个点亮)
  215. {
  216.   unsigned char i;
  217.                 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
  218.   for(i=0;i<8;i++)
  219.     {
  220.                 P0=Tab11[i];
  221.                 P3=Tab22[i];
  222.                 delay();
  223.          }
  224.   for(i=0;i<8;i++)
  225.     {
  226.            P2=Tab11[i];
  227.                 P1=Tab22[i];
  228.                 delay();
  229.          }
  230. ///////////////////////
  231.     flag=100;
  232. for(i=0;i<8;i++)
  233.     {
  234.                 P0=Tab44[i];
  235.                 P3=Tab5[i];
  236.                 delay();
  237.          }
  238.   for(i=0;i<8;i++)
  239.     {
  240.            P2=Tab44[i];
  241.                 P1=Tab5[i];
  242.                 delay();
  243.          }
  244.     flag=200;
  245. }

  246. ///////////////////////////////////

  247. void hy5(void)  //先向下伸展,然后向上伸展逐渐点亮
  248. {
  249.   unsigned char i;
  250.   for(i=0;i<8;i++)
  251.     {
  252.                 P0=Tab8[i];
  253.                 P1=Tab8[i];
  254.                 delay();
  255.          }
  256.         P0=0xff;
  257.         P1=0xff;
  258.   for(i=0;i<8;i++)
  259.     {
  260.                 P2=Tab8[i];
  261.                 P3=Tab8[i];
  262.                 delay();
  263.          }
  264.         P2=0xff;
  265.         P3=0xff;
  266.   for(i=0;i<8;i++)
  267.     {
  268.                 P2=Tab7[i];
  269.                 P3=Tab7[i];
  270.                 delay();
  271.          }
  272.         P2=0xff;
  273.         P3=0xff;
  274.   for(i=0;i<8;i++)
  275.     {
  276.                 P0=Tab7[i];
  277.                 P1=Tab7[i];
  278.                 delay();
  279.          }
  280.         P0=0xff;
  281.         P1=0xff;
  282. }
  283. /////////////////////////////
  284. void jr(void)//聚拢
  285. {
  286.   unsigned char i;
  287.   for(i=0;i<9;i++)  //8位控制码
  288.     {
  289.            P0=Tab1[i];P1=Tab1[i];
  290.            P2=Tab2[i];P3=Tab2[i];           
  291.                 delay();
  292.          }  
  293.   for(i=0;i<9;i++)
  294.     {
  295.            P0=Tab2[i];P1=Tab2[i];
  296.              P2=Tab1[i];P3=Tab1[i];
  297.                 delay();
  298.          }           
  299. ///////////////////////////
  300.   for(i=0;i<9;i++)  
  301.     {
  302.            P0=Tab1[i];P1=Tab1[i];
  303.            P2=Tab2[i];P3=Tab2[i];           
  304.                 delay();
  305.          }
  306.   for(i=0;i<9;i++)
  307.     {
  308.            P0=Tab2[i];P1=Tab2[i];
  309.              P2=Tab1[i];P3=Tab1[i];
  310.                 delay();
  311.          }
  312.         xl(); //星星眨眼
  313.         xl(); //星星眨眼
  314. ///////////////////////////
  315.   for(i=0;i<9;i++)
  316.     {
  317.            P0=Tab3[i]; P1=Tab3[i];
  318.            P2=Tab4[i]; P3=Tab4[i];
  319.                 delay();
  320.          }
  321.   for(i=0;i<9;i++)
  322.     {
  323.            P0=Tab4[i];P1=Tab4[i];
  324.              P2=Tab3[i];P3=Tab4[i];
  325.                 delay();
  326.          }
  327. ////////////////////////////////
  328.   for(i=0;i<9;i++)
  329.     {
  330.            P0=Tab1[i];P1=Tab1[i];
  331.            P2=Tab2[i]; P3=Tab2[i];           
  332.                 delay();
  333.          }
  334.           
  335.   for(i=0;i<9;i++)  
  336.     {
  337.            P0=Tab4[i];P1=Tab4[i];
  338.              P2=Tab3[i];P3=Tab3[i];
  339.                 delay();           
  340.          }
  341. /////////////////////////////
  342.   for(i=0;i<9;i++)
  343.     {
  344.            P0=Tab3[i]; P1=Tab3[i];
  345.              P2=Tab4[i];P3=Tab4[i];
  346.                 delay();
  347.          }
  348.   for(i=0;i<9;i++)
  349.     {
  350.            P0=Tab2[i];P1=Tab2[i];
  351.              P2=Tab1[i];P3=Tab1[i];
  352.                 delay();
  353.          }
  354. }
  355. ////////////////////////////////////
  356. void azzy(void)  //暗中向下
  357. {
  358.   unsigned char i;
  359.         flag=200;
  360.   for(i=0;i<8;i++)
  361.     {
  362.                 P2=0xff;P3=0xff;
  363.            P1=Tab1[i];P0=Tab1[i];
  364.                 delay();           
  365.           }
  366.   for(i=0;i<9;i++)
  367.     {
  368.                 P1=0xff;P0=0xff;
  369.            P2=Tab1[i];P3=Tab1[i];
  370.                 delay();
  371.           }
  372. }
  373. /////////////////////////////////
  374. void azyy(void)  //暗中you移
  375. {
  376.   unsigned char i;
  377.   for(i=0;i<8;i++)
  378.     {
  379.                 P0=0xff;P1=0xff;
  380.            P2=Tab2[i];P3=Tab2[i];
  381.                 delay();
  382.           }
  383.   for(i=0;i<9;i++)
  384.     {
  385.            P0=Tab2[i];P1=Tab2[i];
  386.                 delay();
  387.           }
  388. }
  389. //////////////////////////////////
  390. void led_flow1(void)  
  391. {
  392.   unsigned char i;
  393.   for(i=0;i<9;i++)
  394.     {
  395.                 P2=0;P3=0;
  396.            P1=Tab3[i];P0=Tab3[i];
  397.                 delay();           
  398.           }
  399.   for(i=0;i<9;i++)  
  400.     {
  401.            P2=Tab3[i];P3=Tab3[i];
  402.                 delay();
  403.           }
  404. }
  405. ///////////////////////////////////
  406. void lzyy(void)  //亮中右移
  407. {
  408.   unsigned char i;
  409.   for(i=0;i<9;i++)  
  410.     {
  411.                 P0=0x00;P1=0x00;
  412.            P2=Tab4[i];P3=Tab4[i];
  413.                 delay();           
  414.           }
  415.   for(i=0;i<9;i++)  
  416.     {
  417.            P0=Tab4[i];P1=Tab4[i];
  418.                 delay();
  419.           }
  420. }
  421. //////////////////////////////////
  422. void shansuo(void)//全部灯闪烁
  423.         {
  424. uchar i;
  425. for(i=0;i<3;i++)
  426. {
  427. P0=0xff;        P1=0xff;        P2=0xff;        P3=0xff;
  428. delay();        delay();
  429. P0=0x00;        P1=0x00;        P2=0x00;        P3=0x00;
  430. delay();        delay();
  431. }
  432.         }

  433. void xl(void)//相邻俩个变换
  434. {
  435. uchar i;
  436. for(i=0;i<3;i++)
  437. {
  438. P0=0xAA;P1=0xAA;P2=0xAA;P3=0xAA;
  439. delay();delay();
  440. P0=0x55;P1=0x55;P2=0x55;P3=0x55;
  441. delay();delay();
  442. }
  443. }
  444. //////////////////////////////
  445. void sxb(void)//上下半
  446. {
  447.   unsigned char i;
  448. P0=0xff;P1=0xff;
  449. P2=0x00;P3=0x00;
  450. delay();delay();delay();delay();
  451.   for(i=0;i<8;i++)
  452.     {
  453.                 P0=Tab11[i];
  454.            P1=Tab11[i];
  455.                 delay();
  456.          }
  457.   for(i=0;i<8;i++)
  458.     {
  459.                 P0=Tab11[i];
  460.            P1=Tab11[i];
  461.                 delay();
  462.          }
  463.   for(i=0;i<8;i++)
  464.     {
  465.                 P0=Tab11[i];
  466.            P1=Tab11[i];
  467.                 delay();
  468.          }
  469. for(i=0;i<3;i++)
  470. {
  471. P0=0x00;P1=0x00;
  472. delay();delay();
  473. P0=0xff;P1=0xff;
  474. delay();delay();
  475. }
  476. }
  477. //////////////////////////////
  478. void jc(void)//
  479. {
  480. uchar i;
  481.   for(i=0;i<3;i++)
  482. {
  483. P0=0x00;
  484. P3=0x00;
  485. P1=0xff;
  486. P2=0xff;
  487. delay();delay();delay();delay();
  488. P1=0x00;
  489. P2=0x00;
  490. P0=0xff;
  491. P3=0xff;
  492. delay();delay();delay();delay();
  493. }
  494. }
  495. /////////////////////////////////
  496. void azzy_1(void)  //暗中向下
  497. {
  498.   unsigned char i,i1;
  499. for(flag=80;flag>0;flag=flag-10)
  500.   {
  501.   for(i=0;i<8;i++)
  502.     {
  503.                 P2=0xff;P3=0xff;
  504.            P1=Tab1[i];P0=Tab1[i];
  505.                 delay();           
  506.           }
  507.   for(i=0;i<9;i++)
  508.     {
  509.                 P1=0xff;P0=0xff;
  510.            P2=Tab1[i];P3=Tab1[i];
  511.                 delay();
  512.           }
  513.         }
  514.         flag=10;
  515.   for(i1=0;i1<30;i1++)
  516.   {
  517.   for(i=0;i<8;i++)
  518.     {
  519.                 P2=0xff;P3=0xff;
  520.            P1=Tab1[i];P0=Tab1[i];
  521.                 delay();           
  522.           }
  523.   for(i=0;i<9;i++)
  524.     {
  525.                 P1=0xff;P0=0xff;
  526.            P2=Tab1[i];P3=Tab1[i];
  527.                 delay();
  528.           }
  529.         }
  530.                 flag=200;
  531.   }
  532. /////////////////////////////
  533. void js(void)//结束
  534. {
  535. uchar i;
  536. hy2_3();
  537. for(i=0;i<3;i++)
  538. {
  539. P0=0xff;P2=0xff;
  540. delay();delay();
  541. P0=0x00;P2=0x00;
  542. delay();delay();
  543. }
  544. ///////////////////
  545. for(i=0;i<3;i++)
  546. {
  547. P1=0xff;P3=0xff;
  548. delay();delay();
  549. P1=0x00;P3=0x00;
  550. delay();delay();
  551. }
  552. //////////////////
  553. for(i=0;i<3;i++)
  554. {
  555. P1=0x00;P3=0x00;
  556. P0=0x00;P2=0x00;
  557. delay();delay();
  558. P1=0xff;P3=0xff;
  559. P0=0xff;P2=0xff;
  560. delay();delay();
  561. }
  562. }
  563. /////////////////////////////
  564. void main(void)
  565. {
  566.         while (1)
  567.         {
  568. azzy_1();
  569. //////////////////////////////////////////////
  570.         hy2(); //暗中逆时针转360°(一个一个点亮)
  571.         hy3(); //点亮中逆时针转360°(一个一个灭)
  572.         hy2_1();//暗中逆时针转90度。(一个一个点亮)
  573.         hy2_2();//暗中逆时针转180度。(一个一个点亮)
  574.         hy2_3();//暗中向下180。(一个一个点亮)
  575.         hy3();
  576.    hy2_4();
  577. ///////////////////////////////////////////////
  578.         hy1(); //暗中状态逆时针旋转90度(一个一个亮)
  579.         jc();//交叉四叶草
  580.         hy1();
  581.         hy4(); //点亮状态顺时针旋转90度(一个一个灭?
  582.         jc();
  583.         hy4();
  584. //////////////////////////////////////////////
  585.         hy5();//先向下伸展,然后向上伸展逐渐点亮
  586.         jr();
  587. /////////////////////////////////////////////////
  588.         azzy();//暗中向下边伸展
  589.         azyy();//暗中向上伸展
  590. //////////////////////////////////////////////////
  591.         xl(); //相邻变换(星星眨眼)
  592.         shansuo();//全部灯闪烁(一亮一灭)
  593. /////////////////////////////////////////////////////
  594.         led_flow1();//亮中向下
  595.         lzyy();    //亮中向上
  596.         led_flow1();//亮中向下
  597.         azyy();          //暗中向上
  598.         shansuo();
  599. ///////////////////////////////////////
  600.         sxb();//上下半
  601.         azzy();//暗中向下
  602.         lzyy();//亮中向上
  603.         azzy();//暗中向下
  604.         lzyy();//亮中向上
  605. ///////////////////////////////////////
  606.         shansuo();//闪烁
  607.         azyy();//暗中向上
  608.         lzyy();//亮中向上
  609.         azyy();//暗中向上
  610.         lzyy();//亮中向上
  611.         shansuo();
  612.         js();//结束
  613.         }
  614. }   
复制代码

所有资料51hei提供下载:
心形流水灯.zip (749.75 KB, 下载次数: 44)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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