找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的单片机广告流水灯课程设计 含c程序代码

[复制链接]
跳转到指定楼层
楼主
ID:205330 发表于 2017-5-27 11:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我三月份做的一个广告流水灯,用了两个星期的时间,在老师指导下完成,附件里包含用keil编写的c程序。流水灯的工作方式主要通过键盘实现。数字键0-9分别对应广告灯的10种状态。
  1. #include <REG51.H>
  2. #include <intrins.h>
  3. sbit dula=P2^6;
  4. sbit wela=P2^7;
  5. unsigned char code duan[]={
  6.         0x3F,/*0*/
  7.         0x06,/*1*/
  8.         0x5B,/*2*/
  9.         0x4F,/*3*/
  10.         0x66,/*4*/
  11.         0x6D,/*5*/
  12.         0x7D,/*6*/
  13.                   0x07,/*7*/
  14.                   0x7F,/*8*/
  15.                   0x6F,/*9*/

  16. };
  17. unsigned char code wei[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  18. unsigned char num,a,w=50,b=0,c,u=50,v,m,k,jj;

  19. unsigned char huan[]={0,1,2,3,4,5};

  20. unsigned int i,d,j,j1,qufan=0;
  21. bit  q=0;
  22. int sudu=1;
  23. delay(unsigned xms)
  24. {
  25.         unsigned int i,j;
  26.         for(i=xms;i>0;i--)
  27.         for(j=110;j>0;j--);
  28. }

  29. smgydbfa()
  30. {
  31.         P0=0XFF;dula=1;dula=0;wela=1;wela=0;

  32.         dula=1;
  33.         P0=duan[huan[num]];
  34.         dula=0;
  35.        
  36.         wela=1;               
  37.         P0=~(0x01<<num);//    1111 1110
  38.         wela=0;
  39.        
  40.         num++;
  41.         if(num>6)num=0;
  42. }


  43. anniu()
  44. {
  45.         P3=0XF0;
  46.         if(P3!=0XF0)
  47.           {  a++;  
  48.                 if(a>5)
  49.                 {        a=0;
  50.                          if((P3!=0X0F)&&(v==0))
  51.                          {        k=P3;
  52.                            P3=k|0X0F;
  53.                                 k=P3;v=1;c=1;
  54.                            switch(k)
  55.                                 {        case 0xEE:  u=0;w=0;break;
  56.                                         case 0xED:  u=1;w=1;break;
  57.                                         case 0xEB:  u=2;w=2;break;
  58.                                         case 0xE7:  u=3;w=3;break;
  59.                                         case 0xDE:  u=4;w=4;break;
  60.                                         case 0xDD:  u=5;w=5;break;
  61.                                         case 0xDB:  u=6;w=6;break;
  62.                                         case 0xD7:  u=7;w=7;break;
  63.                                         case 0xBE:  u=8;w=8;break;
  64.                                         case 0xBD:  u=9;w=9;break;
  65.                                         case 0xBB:  u=10;w=10;break;
  66.                                         case 0xB7:  u=11;w=11;break;
  67.                                         case 0x7E:  u=12;w=12;if(q==0) sudu--;break;
  68.                                         case 0x7D:  u=13;w=13;if(q==0) sudu++;break;
  69.                                         case 0x7B:  u=14;q=~q;break;
  70.                                         case 0x77:  u=15;break;
  71.                                  }
  72.                          }
  73.                  }
  74.            }       
  75.   else v=0;       
  76. }

  77. anniuchuli()
  78. {
  79. jj++;
  80. if(jj>=5+sudu)
  81. { jj=0;
  82.         switch(w)
  83.         {
  84.                 case 0://单个LED灯从左到右
  85.                                 P1=0xFF;

  86.                                 if(qufan==1)
  87.                                 {
  88.                                                 if(q==0)d++;
  89.                                                 P1=_crol_(0x01,d); //0000 0001 左移
  90.                                                 delay(500+sudu*10);
  91.                                                 if(d>=8) d=0;
  92.                                 }
  93.                                
  94.                                 else
  95.                                 {
  96.                        if(q==0)d++;
  97.                                                 P1=_crol_(0xFE,d); //1111 1110 左移
  98.                                                 delay(500+sudu*10);
  99.                                                 if(d>=8) d=0;
  100.                    
  101.                                 }
  102.                 break;

  103.                 case 1://两个LED灯从左到右
  104.                                 P1=0xFF;
  105.                                 if(qufan==1)
  106.                                 {    if(q==0)d++;
  107.                                           P1=_crol_(0x03,d); //0000 0011 左移
  108.                                           delay(500+sudu*10);
  109.                       if(d>=7) d=0;
  110.                    
  111.                                 }
  112.                                 else
  113.                                 {    if(q==0) d++;
  114.                                           P1=_crol_(0xFC,d); //1111 1100  11110011 左移
  115.                                           delay(500+sudu*10);
  116.                       if(d>=7) d=0;
  117.                    
  118.                                 }
  119.                 break;

  120.                 case 2://单个LED灯从右到左
  121.                                 P1=0xFF;
  122.                                
  123.                                 if(qufan==1)
  124.                                 {
  125.                                         if(q==0) d++;
  126.                                         P1=_cror_(0x80,d); //1000 0000 右移
  127.                                         delay(500+sudu*10);
  128.                                         if(d>=8) d=0;
  129.                                 }
  130.                                

  131.                                 else
  132.                                 {  if(q==0) d++;
  133.                                         P1=_cror_(0x7F,d); //0111 1111 右移
  134.                                         delay(500+sudu*10);
  135.                                         if(d>=8) d=0;
  136.                                
  137.                                 }
  138.                 break;

  139.                 case 3://两个LED灯从右到左
  140.                                 P1=0xFF;

  141.                                 if(qufan==1)
  142.                                 {  if(q==0) d++;
  143.                                         P1=_cror_(0xC0,d); //1100 0000 右移
  144.                                         delay(500+sudu*10);
  145.                                         if(d>=7) d=0;
  146.                                 }
  147.                                
  148.                                 else
  149.                                 {  if(q==0) d++;
  150.                                         P1=_cror_(0x3F,d); //0011 1111 右移
  151.                                         delay(500+sudu*10);
  152.                                         if(d>=7) d=0;
  153.                                
  154.                                 }
  155.                 break;

  156.                 case 4://中间向两边
  157.                                 P1=0xFF;
  158.                                 if(qufan==1)
  159.                                 {       
  160.                                         P1=~(0XE7); delay(500+sudu*10); //0001 1000  //P1=~0X18;P1=~0X24;
  161.                                         P1=~(0XDB); delay(500+sudu*10); //0010 0100
  162.                                         P1=~(0XBD); delay(500+sudu*10); //
  163.                                         P1=~(0X7E); delay(500+sudu*10);
  164.                                        
  165.                                 }
  166.                                 else{
  167.                                         P1=0XE7; delay(500+sudu*10); //1110 0111
  168.                                         P1=0XDB; delay(500+sudu*10); //1101 1011
  169.                                         P1=0XBD; delay(500+sudu*10); //1011 1101
  170.                                         P1=0X7E; delay(500+sudu*10);
  171.                                 }
  172.                 break;

  173.                 case 5://两边向中间
  174.                                 P1=0xFF;
  175.                                 if(qufan==1)
  176.                                 {
  177.                                         P1=~0X7E;delay(500+sudu*10);
  178.                                         P1=~0XBD;delay(500+sudu*10);
  179.                                         P1=~0XDB;delay(500+sudu*10);
  180.                                         P1=~0XE7;delay(500+sudu*10);
  181.                                 }
  182.                                

  183.                                 else
  184.                                 {
  185.                                         P1=0X7E;delay(500+sudu*10);
  186.                                         P1=0XBD;delay(500+sudu*10);
  187.                                         P1=0XDB;delay(500+sudu*10);
  188.                                         P1=0XE7;delay(500+sudu*10);
  189.                                 }
  190.                                
  191.                 break;

  192.                 case 6://从左到右依次点亮,全亮后熄灭全部LED灯
  193.                                 P1=0xff;
  194.                                 if(qufan==1)
  195.                                 {
  196.                                         P1=~0XFE;delay(500+sudu*10);
  197.                                         P1=~0XFC;delay(500+sudu*10);
  198.                                         P1=~0XF8;delay(500+sudu*10);
  199.                                         P1=~0XF0;delay(500+sudu*10);

  200.                                         P1=~0XE0;delay(500+sudu*10);
  201.                                         P1=~0XC0;delay(500+sudu*10);
  202.                                         P1=~0X80;delay(500+sudu*10);
  203.                                         P1=~0X00;delay(500+sudu*10);
  204.                                         P1=~0XFF;delay(500+sudu*10);
  205.                                 }
  206.                                 else
  207.                                 {
  208.                                         P1=0XFE;delay(500+sudu*10);
  209.                                         P1=0XFC;delay(500+sudu*10);
  210.                                         P1=0XF8;delay(500+sudu*10);
  211.                                         P1=0XF0;delay(500+sudu*10);

  212.                                         P1=0XE0;delay(500+sudu*10);
  213.                                         P1=0XC0;delay(500+sudu*10);
  214.                                         P1=0X80;delay(500+sudu*10);
  215.                                         P1=0X00;delay(500+sudu*10);
  216.                                         P1=0XFF;delay(500+sudu*10);
  217.                                 }
  218.                                
  219.                 break;
  220.                                                                
  221.                 case 7://从右到左依次点亮,全亮后熄灭全部LED灯
  222.                                 P1=0xff;
  223.                                 if(qufan==1)
  224.                                 {
  225.                                        
  226.                                         P1=~0X7F;delay(500+sudu*10);
  227.                                         P1=~0X3F;delay(500+sudu*10);
  228.                                         P1=~0X1F;delay(500+sudu*10);
  229.                                         P1=~0X0F;delay(500+sudu*10);
  230.                                         P1=~0X07;delay(500+sudu*10);
  231.                                         P1=~0X03;delay(500+sudu*10);
  232.                                         P1=~0X01;delay(500+sudu*10);
  233.                                         P1=~0X00;delay(500+sudu*10);
  234.                                         P1=~0XFF;delay(500+sudu*10);
  235.                                 }
  236.                                 else{
  237.                                         P1=0X7F;delay(500+sudu*10);
  238.                                         P1=0X3F;delay(500+sudu*10);
  239.                                         P1=0X1F;delay(500+sudu*10);
  240.                                         P1=0X0F;delay(500+sudu*10);
  241.                                         P1=0X07;delay(500+sudu*10);
  242.                                         P1=0X03;delay(500+sudu*10);
  243.                                         P1=0X01;delay(500+sudu*10);
  244.                                         P1=0X00;delay(500+sudu*10);
  245.                                         P1=0XFF;delay(500+sudu*10);}
  246.                 break;

  247.                 case 8://奇数灯及偶数灯交替点亮
  248.                                 P1=0xFF;
  249.                                 if(qufan==1)
  250.                                 {
  251.                                        
  252.                                         P1=~0XAA;delay(500+sudu*10);
  253.                                         P1=~0X55;delay(500+sudu*10);
  254.                                 }
  255.                                 else
  256.                                 {
  257.                                         P1=0XAA;delay(500+sudu*10);
  258.                                         P1=0X55;delay(500+sudu*10);
  259.                                
  260.                                 }
  261.                 break;

  262.                 case 9://左四位和右四位交替点亮
  263.                                 P1=0xFF;

  264.                                 if(qufan==1)
  265.                                 {
  266.                                         P1=~0X0F;delay(500+sudu*10);
  267.                                         P1=~0XF0;delay(500+sudu*10);
  268.                                 }
  269.                                 else
  270.                                 {
  271.                                         P1=0X0F;delay(500+sudu*10);
  272.                                         P1=0XF0;delay(500+sudu*10);
  273.                                 }
  274.                 break;
  275.                
  276.                 case 10:
  277.                 break;

  278.                 case 11://取反
  279.                                 if(qufan==1) qufan=0;
  280.                                 else qufan=1;
  281.                 break;

  282.                 case 12://加速
  283.                 break;

  284.                 case 13://减速?
  285.                 break;

  286.                 case 14://暂停
  287.                 break;

  288.            }
  289.   }
  290. }

  291. main()
  292. {
  293.         TMOD=0X01;        //0000 0001
  294.         TH0=0XF5;
  295.         TL0=0XAF;
  296.         EA=1;
  297.         ET0=1;
  298.         TR0=1;

  299.         for(d=0;d<8;d++)
  300.         {
  301.                 P1=0xff;
  302.                 P1=_crol_(0xfe,d);
  303.                 delay(250);
  304.         }
  305.         P1=0xff;

  306.         if(j1==1) {huan[0]=0;huan[1]=0;huan[2]=0;huan[3]=0;huan[4]=0;huan[5]=0;}
  307.        
  308.         while(1)
  309.         {
  310.                 anniuchuli();
  311.                 if(c>=1) b=w;
  312.                 huan[4]=b/10;
  313.                 huan[5]=b%10;
  314.         }       
  315. }


  316. time_0()interrupt 1
  317. {
  318.         TH0=0XF5;
  319.         TL0=0XAF;
  320.     //if(q==1)
  321.     //if(q==0)  
  322.         smgydbfa();
  323.         anniu();
  324.         j++;
  325.         if(j>500)
  326.         {j=0;j1=1;}       
  327. }

复制代码




广告流水灯.zip

46.45 KB, 下载次数: 18, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:471850 发表于 2019-2-4 11:58 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:553652 发表于 2019-6-16 13:02 | 只看该作者
请问有仿真电路板吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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