新手求助帖 想实现中断控制流水灯 从中间的两个灯开始同时左右移动

2019-07-15 09:16发布

  1. #include<AT89X52.h>
  2. #include<intrins.h>
  3. unsigned char count,i;
  4. unsigned char code TABLE[]={0xe7,0xdb,0xbd,0x7e} ;
  5. void main()
  6. {   
  7.     count=0;
  8.     TMOD=0x01;
  9.     TL0=0X00;
  10.     TH0=0X4C;
  11.     TR0=1;
  12.     EA=1;
  13.     ET0=1;

  14.     while(1)
  15.     {
  16.          for(i=0;i<4;i++)   
  17.         {
  18.             P1=TABLE[i];
  19.         }  
  20.          
  21.                           
  22.     }
  23. }
  24. void  t0interrupt(void) interrupt 1
  25. {
  26.             TL0=0X00;
  27.             TH0=0X4C;
  28.             count++;
  29.             if(count==20)
  30.             {   
  31.                 i=0;
  32.                 count=0;
  33.             }
  34.         
  35.                                                                               
  36. }
复制代码
  1. <img src="http://bbs.elecfans.com/forum.php?mod=image&aid=541492&size=300x300&key=591ba85311f98049&nocache=yes&type=fixnone" aid="attachimg_541492" alt="" border="0">大概就是想实现这个功能
复制代码

QQ图片20171125213956.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
余一痴
1楼-- · 2019-07-15 15:10
人中狼
2楼-- · 2019-07-15 18:56
 精彩回答 2  元偷偷看……
余一痴
3楼-- · 2019-07-15 20:59
人中狼 发表于 2017-11-26 16:20
定时器中断里要设一全局变量的标志,当定时到的时候这个标志有效。
在主程序的while里不用for,用if,同时设一个计算电灯序号的全局变量,if是判断定时器的标志是否有效,当定时器标志有效时,就可以执行P1=TABLE;其中的i就是电灯序号的全局变量,之后要判断这个变量是否超过了上限,这里是4个 ...

能给我  写一下吗   新手不大明白   先谢谢了
wulinwl
4楼-- · 2019-07-15 23:13
这很简单,不要用for循环。代码如下:
#include<AT89X52.h>
#include<intrins.h>
unsigned char count,i=0,j=0;
unsigned char code TABLE[]={0xe7,0xdb,0xbd,0x7e};
void main()
{   
        count=0;
        TMOD=0x01;
        TL0=0X00;
        TH0=0X4C;
        TR0=1;
        EA=1;
        ET0=1;       
        while(1)
        {
                if(i==1)
                {
                        i=0;
                        switch(j)
                        {
                                case 0: P1=TABLE[0];j=1; break;
                                case 1: P1=TABLE[1];j=2; break;
                                case 2: P1=TABLE[2];j=3; break;
                                case 3: P1=TABLE[3];j=0; break;
                        }
                }
//                for(i=0;i<4;i++)   
//                {
//                        P1=TABLE[i];
//                }         
        }
}
void  t0interrupt(void) interrupt 1
{
        TL0=0X00;
        TH0=0X4C;
        count++;
        if(count==20)
        {   
                i=1;
                count=0;
        }
}

一周热门 更多>