找回密码
 立即注册

QQ登录

只需一步,快速开始

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

初次学习单片机新手自己做的一个流水灯 大家多多鼓励

[复制链接]
跳转到指定楼层
楼主
一个单片机最小系统  然后12个上拉电阻470欧和12个LED灯 接到单片机P0口跟P2口  初次学习单片机自己焊接了12个灯 和电阻 然后直接接到开发板上面    程序是自己写的  由于新手程序肯定是有很多漏洞跟不足 中间我嫌用16进制麻烦就直接定义了IO口直接0和1控制了  希望大家多多鼓励不喷哈  我会更加努力学习  然后自己做一些实物的东西调试来提高自己视频链接:

电路原理图如下:



圆圈灯图:


完整部分下载: 程序文件和制作部分.zip (624.68 KB, 下载次数: 6)




单片机程序部分:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int  
  4. #define uchar unsigned int  

  5. uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移
  6. uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移
  7. uchar code table2[]={0xef,0xdf,0xbf,0x7f};//P2口 LED2.4--2.7口
  8. uchar code table3[]={0x7f,0xbf,0xdf,0xef};//P2口 LED2.7--2.4口

  9. uchar temp,i,aa,bb,cc;
  10. sbit D0=P0^0;
  11. sbit D1=P0^1;
  12. sbit D2=P0^2;
  13. sbit D3=P0^3;
  14. sbit D4=P0^4;
  15. sbit D5=P0^5;
  16. sbit D6=P0^6;
  17. sbit D7=P0^7;
  18. sbit D8=P2^4;
  19. sbit D9=P2^5;
  20. sbit D10=P2^6;
  21. sbit D11=P2^7;
  22. void delay (uint z)
  23. {
  24.    uint x,y;
  25.       for(x=z;x>0;x--)
  26.           for(y=100;y>0;y--);
  27. }

  28. void disp()
  29. {

  30.        {D0=0;delay(100);}{D1=0;delay(100);}{D2=0;delay(100);}{D3=0;delay(100);}
  31.        {D4=0;delay(100);}{D5=0;delay(100);}{D6=0;delay(100);}{D7=0;delay(100);}  
  32.        {D8=0;delay(100);}{D9=0;delay(100);}{D10=0;delay(100);}{D11=0;delay(100);}

  33.        {D0=1;delay(100);}{D1=1;delay(100);}{D2=1;delay(100);}{D3=1;delay(100);}
  34.        {D4=1;delay(100);}{D5=1;delay(100);}{D6=1;delay(100);}{D7=1;delay(100);}  
  35.        {D8=1;delay(100);}{D9=1;delay(100);}{D10=1;delay(100);}{D11=1;delay(100);}

  36.        {D0=0;delay(50);}{D1=0;delay(50);}{D2=0;delay(50);}{D3=0;delay(50);}
  37.        {D4=0;delay(50);}{D5=0;delay(50);}{D6=0;delay(50);}{D7=0;delay(50);}  
  38.        {D8=0;delay(50);}{D9=0;delay(50);}{D10=0;delay(50);}{D11=0;delay(50);}

  39.        {D0=1;delay(50);}{D1=1;delay(50);}{D2=1;delay(50);}{D3=1;delay(50);}
  40.        {D4=1;delay(50);}{D5=1;delay(50);}{D6=1;delay(50);}{D7=1;delay(50);}  
  41.        {D8=1;delay(50);}{D9=1;delay(50);}{D10=1;delay(50);}{D11=1;delay(50);}

  42.        {D0=0;delay(25);}{D1=0;delay(25);}{D2=0;delay(25);}{D3=0;delay(25);}
  43.        {D4=0;delay(25);}{D5=0;delay(25);}{D6=0;delay(25);}{D7=0;delay(25);}  
  44.        {D8=0;delay(10);}{D9=0;delay(25);}{D10=0;delay(25);}{D11=0;delay(25);}

  45.        {D0=1;delay(25);}{D1=1;delay(25);}{D2=1;delay(25);}{D3=1;delay(25);}
  46.        {D4=1;delay(25);}{D5=1;delay(25);}{D6=1;delay(25);}{D7=1;delay(25);}  
  47.        {D8=1;delay(25);}{D9=1;delay(25);}{D10=1;delay(25);}{D11=1;delay(25);}


  48.        P0=0x00; P2=0x0f;
  49.          delay(5000);
  50.     //P0=0xff; P2=0xff;
  51.     //delay(3000);

  52.      for(i=0;i<10;i++)
  53.         {
  54.             P0=0x00; P2=0x0f; //打开P0口和P2.4到2.7口
  55.             delay(300);
  56.             P0=0xff; P2=0xff; //关掉P0口和P口
  57.             delay(300);
  58.         }
  59. }
  60. void disp0()                        
  61. {  

  62.      for(aa=0;aa<5;aa++)
  63.       {  
  64.         for(i=0;i<8;i++)
  65.           {
  66.             P0=table0[i];
  67.             delay(200);
  68.           }
  69.         P0=0xff;
  70.         for(i=0;i<4;i++)
  71.           {
  72.             P2=table2[i];               
  73.             delay(200);                        
  74.           }
  75.         P2=0xff;
  76.       }      
  77. }

  78. void disp1()

  79. {

  80.       for(bb=0;bb<5;bb++)
  81.        {   
  82.          for(i=0;i<4;i++)
  83.          {
  84.              P2=table3[i];
  85.              delay(200);         
  86.          }
  87.         P2=0xff;
  88.          for(i=0;i<8;i++)
  89.          {
  90.                 P0=table1[i];
  91.                 delay(200);         
  92.          }
  93.         P0=0xff;
  94.       }


  95. }
  96. void disp2()
  97. {
  98.     for(cc=0;cc<10;cc++)
  99.      {
  100.         P2=0xff;
  101.         for(temp=0;temp<8;temp++)
  102.         {
  103.                 P0=table0[temp];
  104.                 delay(25);         
  105.         }
  106.          P0=0xff;
  107.         for(temp=0;temp<4;temp++)
  108.         {
  109.                 P2=table2[temp];
  110.                 delay(25);         
  111.         }

  112.         for(temp=0;temp<4;temp++)
  113.         {
  114.              P2=table3[temp];
  115.              delay(25);         
  116.         }
  117.         P2=0xff;

  118.         for(temp=0;temp<8;temp++)
  119.         {
  120.                 P0=table1[temp];
  121.                 delay(25);         
  122.         }
  123.         P0=0xff;
  124.     }
  125.     P2=0xff;P0=0xff;
  126.     delay(3000);
  127. }


  128. void disp3()                        
  129. {  



  130.         for(i=0;i<1;i++)
  131.         {
  132.           D0=0;D6=0;        
  133.            delay(200);
  134.           D0=1;D6=1;
  135.            delay(100);              
  136.         }
  137.         for(i=0;i<1;i++)
  138.         {
  139.           D1=0;D7=0;        
  140.            delay(200);
  141.           D1=1;D7=1;
  142.            delay(100);              
  143.         }
  144.         for(i=0;i<1;i++)
  145.         {
  146.           D2=0;D8=0;        
  147.            delay(200);
  148.           D2=1;D8=1;
  149.            delay(100);              
  150.         }
  151.         for(i=0;i<1;i++)
  152.         {
  153.           D3=0;D9=0;        
  154.            delay(200);
  155.           D3=1;D9=1;
  156.            delay(100);              
  157.         }
  158.         for(i=0;i<1;i++)
  159.         {
  160.           D4=0;D10=0;        
  161.            delay(200);
  162.           D4=1;D10=1;
  163.            delay(100);              
  164.         }
  165.         for(i=0;i<1;i++)
  166.         {
  167.           D5=0;D11=0;        
  168.            delay(200);
  169.           D5=1;D11=1;
  170.            delay(100);              
  171.         }


  172.         for(i=0;i<1;i++)
  173.         {
  174.           D0=0;D1=0;        
  175.            delay(100);
  176.           D0=1;D1=1;
  177.            delay(200);              
  178.         }
  179.         for(i=0;i<1;i++)
  180.         {
  181.           D2=0;D3=0;        
  182.            delay(100);
  183.           D2=1;D3=1;
  184.            delay(200);              
  185.         }
  186.         for(i=0;i<1;i++)
  187.         {
  188.           D4=0;D5=0;        
  189.            delay(100);
  190.           D4=1;D5=1;
  191.            delay(200);              
  192.         }
  193.         for(i=0;i<1;i++)
  194.         {
  195.           D6=0;D7=0;        
  196.            delay(100);
  197.           D6=1;D7=1;
  198.            delay(200);              
  199.         }
  200.         for(i=0;i<1;i++)
  201.         {
  202.           D8=0;D9=0;        
  203.            delay(100);
  204.           D8=1;D9=1;
  205.            delay(200);              
  206.         }
  207.         for(i=0;i<1;i++)
  208.         {
  209.           D10=0;D11=0;        
  210.            delay(100);
  211.           D10=1;D11=1;
  212.            delay(200);              
  213.         }



  214. }
  215. void disp4()                        
  216. {  



  217.         for(i=0;i<1;i++)
  218.         {
  219.           D0=0;D6=0;D1=0;D7=0;        
  220.            delay(200);
  221.           D0=1;D6=1;D1=1;D7=1;
  222.            delay(100);              
  223.         }

  224.         for(i=0;i<1;i++)
  225.         {
  226.           D2=0;D8=0;D3=0;D9=0;        
  227.            delay(200);
  228.           D2=1;D8=1;D3=1;D9=1;
  229.            delay(100);              
  230.         }

  231.         for(i=0;i<1;i++)
  232.         {
  233.           D4=0;D10=0;D5=0;D11=0;        
  234.            delay(200);
  235.           D4=1;D10=1;D5=1;D11=1;
  236.            delay(100);              
  237.         }




  238. }
  239. void disp5()
  240. {
  241.       //P0=~P0;P2=~P2;
  242.       for(i=0;i<1;i++)
  243.         {
  244.             D0=0;      
  245.            delay(200);
  246.             D0=1;
  247.            delay(100);              
  248.         }
  249.       for(i=0;i<1;i++)
  250.         {
  251.             D1=0;D11=0;         
  252.            delay(200);
  253.             D1=1;D11=1;
  254.            delay(100);              
  255.         }
  256.       for(i=0;i<1;i++)
  257.         {
  258.             D2=0;D10=0;         
  259.            delay(200);
  260.             D2=1;D10=1;
  261.            delay(100);              
  262.         }
  263.       for(i=0;i<1;i++)
  264.         {
  265.             D3=0;D9=0;         
  266.            delay(200);
  267.             D3=1;D9=1;
  268.            delay(100);              
  269.         }
  270.       for(i=0;i<1;i++)
  271.         {
  272.             D4=0;D8=0;         
  273.            delay(200);
  274.             D4=1;D8=1;
  275.            delay(100);              
  276.         }
  277.       for(i=0;i<1;i++)
  278.         {
  279.             D5=0;D7=0;         
  280.            delay(200);
  281.             D5=1;D7=1;
  282.            delay(100);              
  283.         }
  284.       for(i=0;i<1;i++)
  285.         {
  286.             D6=0;         
  287.            delay(200);
  288.             D6=1;
  289.            //delay(100);              
  290.         }

  291. }

  292. void disp6()
  293. {
  294.       // P0=~P0;P2=~P2;
  295.       for(i=0;i<1;i++)
  296.         {
  297.             D6=0;        
  298.            delay(200);
  299.             D6=1;
  300.            delay(100);              
  301.         }
  302.       for(i=0;i<1;i++)
  303.         {
  304.             D5=0;D7=0;         
  305.            delay(200);
  306.             D5=1;D7=1;
  307.            delay(100);              
  308.         }
  309.       for(i=0;i<1;i++)
  310.         {
  311.             D4=0;D8=0;         
  312.            delay(200);
  313.             D4=1;D8=1;
  314.            delay(100);              
  315.         }
  316.       for(i=0;i<1;i++)
  317.         {
  318.             D3=0;D9=0;         
  319.            delay(200);
  320.             D3=1;D9=1;
  321.            delay(100);              
  322.         }
  323.       for(i=0;i<1;i++)
  324.         {
  325.             D2=0;D10=0;         
  326.            delay(200);
  327.             D2=1;D10=1;
  328.            delay(100);              
  329.         }
  330.       for(i=0;i<1;i++)
  331.         {
  332.             D1=0;D11=0;         
  333.            delay(200);
  334.             D1=1;D11=1;
  335.            delay(100);              
  336.         }
  337.       for(i=0;i<1;i++)
  338.         {
  339.             D0=0;        
  340.            delay(200);
  341.             D0=1;
  342.           // delay(100);              
  343.         }
  344. }
  345. void disp7()
  346. {
  347.        D3=0;D9=0;
  348.        delay(500);
  349.        D2=0;D10=0;D4=0;D8=0;         
  350.        delay(500);
  351.        D1=0;D5=0;D7=0;D11=0;         
  352.        delay(500);
  353.        D0=0;D6=0;
  354.        delay(500);
  355.        P0=0xff; P2=0xff;
  356.             delay(300);
  357.        D1=0;D2=0;D3=0;D4=0;D5=0;
  358.        delay(500);
  359.        D7=0;D8=0;D9=0;D10=0;D11=0;
  360.        delay(500);
  361.        D0=0;D6=0;
  362.        delay(500);

  363.        P0=0xff; P2=0xff;
  364.             delay(300);
  365. }
  366. void main()
  367. {
  368.    while(1)
  369.    {

  370.      disp();//流水然后熄灭三次 亮灯5秒 闪烁10次
  371.      disp0();//正向从D0开始流水灯5次
  372.      disp1();//反向从D11开始流水灯5次
  373.      disp2();//正反向从D0开始流水灯10次
  374.      disp3();//D0和D6 2个灯同时开始正方向开始流水
  375.      disp4();//D0,D1和D6,D7同时开始正方向开始流水
  376.      disp5();//D0亮灯后 2个灯一起横着向下流水
  377.      disp6();//D6亮灯后 2个灯一起横着向上流水
  378.      disp7();//D3,D9中间部位然后分4个灯一组向外扩散
  379.    }
  380. }
复制代码



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:232923 发表于 2018-8-14 18:39 | 只看该作者
程序和电路略冗杂。建议加入3-8译码器改进硬件电路,或者使用位操作里面的左移/右移改进代码
回复

使用道具 举报

板凳
ID:338171 发表于 2018-8-15 08:43 | 只看该作者
CChen 发表于 2018-8-14 18:39
程序和电路略冗杂。建议加入3-8译码器改进硬件电路,或者使用位操作里面的左移/右移改进代码

多谢前辈指点
回复

使用道具 举报

地板
ID:349617 发表于 2018-8-15 15:29 | 只看该作者
硬件部分可以改为扫描方式点亮,这样可以剩下很多IO口干其他事。软件也得到提升。
回复

使用道具 举报

5#
ID:273583 发表于 2018-8-16 05:06 | 只看该作者
作者这是 第一次第一个作品,程序不精练,但 这样写可以很深刻 理解单片机 控制原理 !
不说了,加10分!
再接再励!
回复

使用道具 举报

6#
ID:338171 发表于 2018-8-16 08:43 | 只看该作者
小李子铁头 发表于 2018-8-15 15:29
硬件部分可以改为扫描方式点亮,这样可以剩下很多IO口干其他事。软件也得到提升。

我改改试试  谢谢前辈
回复

使用道具 举报

7#
ID:386779 发表于 2018-8-16 10:02 | 只看该作者
不错不错,我也参考参考。
回复

使用道具 举报

8#
ID:334550 发表于 2018-8-17 14:23 | 只看该作者
你好 楼主 我也是初学者 我也在做流水灯,  但是没有拖尾效果 你这个有吗? 我看不到视频  还有我用的15W204S 单片机 它的IO口是断开的  可以用你这种方法吗?
sbit A1 = P1^1;
sbit A2 = P1^0;
sbit A3 = P3^7;
sbit A4 = P3^6;
sbit A5 = P3^3;
sbit A6 = P3^2;
sbit A7 = P3^1;
sbit A8 = P3^0;
sbit A9 = P1^3;  

谢谢了
回复

使用道具 举报

9#
ID:338171 发表于 2018-8-17 16:58 | 只看该作者
danpianji3501 发表于 2018-8-16 05:06
作者这是 第一次第一个作品,程序不精练,但 这样写可以很深刻 理解单片机 控制原理 !
不说了,加10分!  ...

多谢前辈鼓励  我正在慢慢的精简程序  认真学习
回复

使用道具 举报

10#
ID:338171 发表于 2018-8-17 17:01 | 只看该作者
bosschen 发表于 2018-8-17 14:23
你好 楼主 我也是初学者 我也在做流水灯,  但是没有拖尾效果 你这个有吗? 我看不到视频  还有我用的15W204 ...

你这个单片机我不熟悉  个人认为只要原理上相同 应该是可以借鉴这种方法的  你多调试程序看看效果  明白原理之后就好办了
回复

使用道具 举报

11#
ID:300629 发表于 2018-8-17 20:59 | 只看该作者
视频看不了,换两个浏览器都不行,缓冲不出来
回复

使用道具 举报

12#
ID:338171 发表于 2018-8-18 10:43 | 只看该作者
lsshuainiao 发表于 2018-8-17 20:59
视频看不了,换两个浏览器都不行,缓冲不出来

视频链接: https://v.youku.com/v_show/id_XMzc4MDIwMzEwNA==.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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