找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的八位花样流水灯程序及原理图

[复制链接]
跳转到指定楼层
楼主
通过外中断,两个按键可实现流水灯加速减速控制,从左到右,从右到左,从中间到两端,从两端到中间等。大家可以参考下


单片机源程序如下:
  1. #include<reg51.h>

  2. #define uchar unsigned char

  3. #define uint unsigned int

  4. uchar j,k;

  5. void delay(int ms)

  6. {     uchar i;

  7. while(ms--)

  8. for(i=0;i<123;i++);

  9. }

  10. uchar codetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

  11.      0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

  12.      0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

  13.      0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,

  14.       0xff,0xe7,0xc3,0x81,0x00,0x7e,0x3c,0x18,

  15.       0x00,};

  16. void EXINTinit()

  17. {

  18. EA=1;EX0=1;EX1=1;IT0=1;IT1=1;

  19. }

  20. void main()

  21. {

  22.       EXINTinit();  P0=0xfe;

  23.       while(1)

  24. {

  25.     switch(k)

  26.   {

  27.                  case 0:

  28.    {

  29.          for(j=0;j<16;j++)

  30.          {

  31.               if(k!=0)  break;

  32.               P0=tab[j];

  33.               delay(300);

  34.               }

  35.               for(j=0;j<16;j++)

  36.          {

  37.               if(k!=0)

  38.               break;

  39.               P0=tab[j+16];

  40.               delay(300);

  41.                     }

  42.              for(j=0;j<9;j++)

  43.          {

  44.              if(k!=0)

  45.                 break;

  46.               P0=tab[j+32];

  47.              delay(300);

  48.                         }

  49.               for(j=0;j<16;j++)

  50.          {

  51.              if(k!=0)

  52.                break;

  53.                     P0=0x00;

  54.              delay(300);

  55.                         }

  56.               for(j=8;j>0;j--)

  57.               {

  58.                      if(k!=0)

  59.                      break;

  60.                      P0=0x55;

  61.                      delay(300);

  62.                      P0=0xaa;

  63.                      delay(300);

  64.                      }

  65.                }break;

  66.               

  67.           case 1:

  68.    {

  69.    for(j=0;j<16;j++)

  70.          {

  71.        if(k!=1)

  72.        break;

  73.        P0=tab[j];

  74.        delay(100);

  75.               }

  76.               for(j=0;j<16;j++)

  77.          {

  78.        if(k!=1)

  79.        break;

  80.        P0=tab[j+16];

  81.        delay(100);

  82.                }

  83.              for(j=0;j<9;j++)

  84.          {

  85.         if(k!=1)

  86.           break;

  87.         P0=tab[j+32];

  88.         delay(100);

  89.                  }

  90.               for(j=0;j<16;j++)

  91.          {

  92.         if(k!=1)

  93.           break;

  94.                P0=0x00;

  95.         delay(100);

  96.                  }

  97.               for(j=8;j>0;j--)

  98.               {

  99.                      if(k!=1)

  100.                      break;

  101.                      P0=0x55;

  102.                      delay(300);

  103.                      P0=0xaa;

  104.                      delay(100);

  105.                      }     

  106.           };break;

  107.           case 2:

  108.    {

  109.          for(j=0;j<16;j++)

  110.          {

  111.               if(k!=2)

  112.               break;

  113.               P0=tab[j];

  114.               delay(600);

  115.               }

  116.               for(j=0;j<16;j++)

  117.          {

  118.               if(k!=2)

  119.               break;

  120.               P0=tab[j+16];

  121.               delay(600);

  122.                     }

  123.              for(j=0;j<9;j++)

  124.          {

  125.              if(k!=2)

  126.                 break;

  127.               P0=tab[j+32];

  128.              delay(600);

  129.                         }

  130.               for(j=0;j<16;j++)

  131.          {

  132.              if(k!=2)

  133.                break;

  134.                     P0=0x00;

  135.              delay(600);

  136.                         }

  137.               for(j=8;j>0;j--)

  138.               {

  139.                      if(k!=2)

  140.                      break;

  141.                      P0=0x55;

  142.                      delay(600);

  143.                      P0=0xaa;

  144.                      delay(600);

  145.                      }

  146.           };break;

  147.      default: break;

  148.   }

  149. }

  150. }

  151.        voidEX0INT() interrupt 0

  152.        {

  153.              k=1;

  154.        }

  155.        voidEX1INT() interrupt 2

  156.        {     k=2;
  157.        }   
复制代码


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

使用道具 举报

沙发
ID:666705 发表于 2019-12-28 01:13 | 只看该作者
应该是52单片机吧?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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