单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:5251|回复:2
打印上一主题下一主题

51单片机心形LED流水灯制作(包括原理图、程序PCB图和proteus仿真)

[复制链接]
沙发
ID:1发表于 2016-10-16 13:06|只看该作者
源程序:
  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. }  
复制代码

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

Powered by 单片机教程网