找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机心形流水灯 程序加仿真

[复制链接]
跳转到指定楼层
楼主




所有资料下载:
心形流水灯.rar (202.5 KB, 下载次数: 15)


部分源程序:

  1. #include "led.h"
  2. #include <reg52.h>

  3. void delay(uint xms)
  4. {
  5.         uint x,y;
  6.         for(x=xms;x>0;x--)
  7.                 for(y=112;y>0;y--);
  8. }

  9. void POUT(ulong i)
  10. {
  11.         uchar temp;
  12.         P0=i&0x000000ff;
  13.        
  14.         temp=(uchar)((i&0x0000ff00)>>8);
  15.         temp=((temp&0x10)>>1) | ((temp&0x08)<<1) | ((temp&0x20)>>3) | ((temp&0x04)<<3) | ((temp&0x40)>>5) | ((temp&0x02)<<5) | ((temp&0x80)>>7) | ((temp&0x01)<<7);
  16.         P2=temp;
  17.        
  18.         temp=(uchar)((i&0x00ff0000)>>16);
  19.         temp=((temp&0x10)>>1) | ((temp&0x08)<<1) | ((temp&0x20)>>3) | ((temp&0x04)<<3) | ((temp&0x40)>>5) | ((temp&0x02)<<5) | ((temp&0x80)>>7) | ((temp&0x01)<<7);
  20.         P3=temp;
  21.        
  22.         temp=(uchar)((i&0xff000000)>>24);
  23.         temp=((temp&0x10)>>1) | ((temp&0x08)<<1) | ((temp&0x20)>>3) | ((temp&0x04)<<3) | ((temp&0x40)>>5) | ((temp&0x02)<<5) | ((temp&0x80)>>7) | ((temp&0x01)<<7);
  24.         P1=temp;
  25. }

  26. void LED1()//持续亮一段时间后,亮灭三次。
  27. {
  28.         uchar i;
  29.         POUT(0X00000000);
  30.         delay(5000);
  31.         POUT(0Xffffffff);
  32.         for(i=0;i<3;i++)
  33.         {
  34.                 POUT(0X00000000);
  35.                 delay(500);
  36.                 POUT(0Xffffffff);
  37.                 delay(500);
  38.         }
  39. }

  40. void LED2()//一颗灯跑马循环
  41. {
  42.         ulong temp=1;
  43.         uchar i,j;
  44.         POUT(0Xffffffff);
  45.         for(j=0;j<3;j++)
  46.         {
  47.                 temp=1;
  48.                 for(i=0;i<32;i++)
  49.                 {
  50.                         POUT(~temp);
  51.                         delay(300-j*100);
  52.                         temp<<=1;
  53.                 }
  54.         }
  55.         POUT(0Xffffffff);
  56.         for(j=0;j<3;j++)
  57.         {
  58.                 temp=1;
  59.                 POUT(0Xffffffff);
  60.                 for(i=0;i<32;i++)
  61.                 {
  62.                         POUT(~temp);
  63.                         delay(350-i*10);
  64.                         temp<<=1;
  65.                 }
  66.         }
  67.         POUT(0Xffffffff);
  68. }

  69. void LED3()//顺时针逐次亮、逐次灭
  70. {
  71.         uchar i,j;
  72.         ulong temp=1;
  73.         for(j=0;j<3;j++)
  74.         {
  75.                 for(i=0;i<32;i++)
  76.                 {
  77.                         POUT(~temp);
  78.                         delay(500-j*200);
  79.                         temp=(temp<<1)|1;
  80.                 }
  81.                 temp=1;
  82.                 for(i=0;i<32;i++)
  83.                 {
  84.                         POUT(temp);
  85.                         delay(500-j*200);
  86.                         temp=(temp<<1)|1;
  87.                 }
  88.         }
  89. }

  90. void LED4()//逆时针逐次亮、逐次灭
  91. {
  92.         uchar i,j;
  93.         ulong temp=0X10000000;
  94.         for(j=0;j<3;j++)
  95.         {
  96.                 for(i=0;i<32;i++)
  97.                 {
  98.                         POUT(~temp);
  99.                         delay(500-j*200);
  100.                         temp=(temp>>1)|0X10000000;
  101.                 }
  102.                 temp=0X10000000;
  103.                 for(i=0;i<32;i++)
  104.                 {
  105.                         POUT(temp);
  106.                         delay(500-j*200);
  107.                         temp=(temp>>1)|0X10000000;
  108.                 }
  109.         }
  110. }

  111. void LED5()//顺时针逐次亮、暂停一段时间、再逐次灭。逆时针重复
  112. {
  113.         uchar i;
  114.         ulong temp=1;
  115.         for(i=0;i<32;i++)
  116.         {
  117.                 POUT(~temp);
  118.                 delay(300);
  119.                 temp=(temp<<1)|1;
  120.         }
  121.         delay(2000);
  122.        
  123.         temp=1;
  124.        
  125.         for(i=0;i<32;i++)
  126.         {
  127.                 POUT(temp);
  128.                 delay(300);
  129.                 temp=(temp>>1)|0X10000000;
  130.         }
  131.        
  132.         temp=0x10000000;
  133.        
  134.         for(i=0;i<32;i++)
  135.         {
  136.                 POUT(~temp);
  137.                 delay(300);
  138.                 temp=(temp>>1)|0X10000000;
  139.         }
  140.        
  141.         delay(2000);
  142.         temp=0X10000000;
  143.        
  144.         for(i=0;i<32;i++)
  145.         {
  146.                 POUT(temp);
  147.                 delay(400);
  148.                 temp=(temp>>1)|0X10000000;
  149.         }
  150. }

  151. void LED6()//四组四颗灯顺时针循环点亮
  152. {
  153.         ulong temp;
  154.         uchar i,j;
  155.         for(j=0;j<8;j++)
  156.         {
  157.                 temp=0xf0f0f0f0;
  158.                 for(i=0;i<4;i++)
  159.                 {
  160.                         POUT(temp);
  161.                         delay(500-30*j);
  162.                         temp=temp<<1|0x01010101;
  163.                 }
  164.                 for(i=0;i<4;i++)
  165.                 {
  166.                         POUT(temp);
  167.                         delay(500-30*j);
  168.                         temp<<=1;
  169.                 }
  170.         }
  171. }

  172. void LED7()//四组四颗灯顺时针循环点亮
  173. {
  174.         ulong temp;
  175.         uchar i,j;
  176.         for(j=0;j<8;j++)
  177.         {
  178.                 temp=0x0f0f0f0f;
  179.                 for(i=0;i<4;i++)
  180.                 {
  181.                         POUT(temp);
  182.                         delay(500-40*j);
  183.                         temp=temp>>1|0x80808080;
  184.                 }
  185.                 for(i=0;i<4;i++)
  186.                 {
  187.                         POUT(temp);
  188.                         delay(500-40*j);
  189.                         temp>>=1;
  190.                 }
  191.         }
  192. }

  193. void LED8()
  194. {       
  195.         uchar i,j;
  196.         ulong temp=0x80000001,temp2;
  197.        
  198.         for(j=0;j<3;j++)
  199.         {
  200.                 temp2=temp;
  201.                 for(i=0;i<16;i++)
  202.                 {
  203.                         POUT(~temp2);
  204.                         delay(200);
  205.                         temp2=temp>>(i+1)|temp<<(i+1);
  206.                 }
  207.         }
  208.         temp=0x7ffffffe;
  209.         for(j=0;j<3;j++)
  210.         {
  211.                 temp2=temp;
  212.                 for(i=0;i<16;i++)
  213.                 {
  214.                         POUT(temp2);
  215.                         delay(200);
  216.                         temp2=temp>>(i+1)&temp<<(i+1);
  217.                 }
  218.         }
  219.         temp=0x00018000;
  220.         for(j=0;j<3;j++)
  221.         {
  222.                 for(i=0;i<16;i++)
  223.                 {
  224.                         POUT(temp);
  225.                         delay(200);
  226.        
  227.                         temp=temp>>1 | temp<<1;
  228.                 }
  229.         }
  230. }

  231. void LED9()
  232. {
  233.         uchar i;
  234.         for(i=0;i<16;i++)
  235.         {
  236.                 POUT(0XAAAAAAAA);
  237.                 delay(150);
  238.                 POUT(0X55555555);
  239.                 delay(150);
  240.         }
  241. }

  242. void LED10()
  243. {
  244.         ulong temp=0xfefefefe;
  245.         uchar i;
  246.         for(i=0;i<8;i++)
  247.         {
  248.                 POUT(temp);
  249.                 delay(500);
  250.                 temp=temp<<1&0xfefefeff;
  251.         }

  252.         temp=0x7f7f7f7f;
  253.         for(i=0;i<8;i++)
  254.         {
  255.                 POUT(~temp);
  256.                 delay(500);
  257.                 temp=temp>>1&0x7f7f7f7f;
  258.         }


  259.         temp=0x7f7f7f7f;
  260.         for(i=0;i<8;i++)
  261.         {
  262.                 POUT(temp);
  263.                 delay(500);
  264.                 temp=temp>>1&0x7f7f7f7f;
  265.         }

  266.         temp=0xfefefefe;
  267.         for(i=0;i<8;i++)
  268.         {
  269.                 POUT(~temp);
  270.                 delay(500);
  271.                 temp=temp<<1&0xfefefeff;
  272.         }

  273. }

  274. void LED11()
  275. {
  276.         uchar i;
  277.         for(i=0;i<20;i++)
  278.         {
  279.                 POUT(0X00000000);
  280.                 delay(100);
  281.                 POUT(0Xffffffff);
  282.                 delay(100);
  283.         }
  284.        
  285.         for(i=0;i<20;i++)
  286.         {
  287.                 POUT(0Xffff0000);
  288.                 delay(150);
  289.                 POUT(0X0000ffff);
  290.                 delay(150);
  291.         }       


  292. }

  293. main()
  294. {
  295.         while(1)
  296.         {
  297.                 LED1();
  298.                 LED2();
  299.                 LED3();
  300.                 LED4();
  301.                 LED5();
  302.                 LED6();
  303.                 LED7();
  304.                 LED8();
  305.                 LED9();
  306.                 LED10();
  307.                 LED11();
  308.         }
  309. }




复制代码


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

使用道具 举报

沙发
ID:1 发表于 2017-1-6 23:25 | 只看该作者
51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:215274 发表于 2017-6-28 09:21 | 只看该作者
你的这个不是很全呀,还是希望能全面一点
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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