我这是用指针做了一个流水灯 用的定时器进行延时1S 可是没调试成功

2019-07-14 21:18发布

#include<reg52.h>
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
void shiftleft(unsigned char *p);         
void main()
{
unsigned int  i=0;
unsigned char buf=0x01;
  TMOD = 0X01;
  TH0 = 0XFC;
  TL0 = 0X67;
  TR0 = 1;

  ENLED = 0;
  ADDR3 = 1;
  ADDR0 = 0;
  ADDR1 = 1;
  ADDR2 = 1;


  while(1)
  {
      P0=~buf;
         for(i=0;i<40000;i++);
          

         while(1)
        {
            if(TF0 ==1)
                {
                   TF0 = 0;
                   TH0 = 0XFC;
                   TL0 = 0X67;
                   i++;
                   if(i==1000)
                   {
                       i=0;
                   }
                   break;
                  shiftleft(&buf);
                 
                }
        }
    if(buf == 0)
         {                                  
            buf= 0x01;
         }
         
           
  }

}
void shiftleft(unsigned char *p)
         {
         *p = *p <<1;

         }  

                      


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
Ghost#
2019-07-15 21:17
柠檬守护 发表于 2016-1-22 11:14
OK, 用for延时写出来是OK的,那说明,你的控制代码和实现led流水的部分是OK的; 其实看你的中断程序觉得有些混乱,接下来,去分析下,正确的中断延时该怎么去写; 楼主,不急,基础这个东西就是满满积累的,这个部分,一点点的去查自己的问题,然后修正,会收获更多,我就不举例子了,只给楼主参考的一些方向,期待楼主 ...

我刚开始接触这个  有点不太明白  还望大神指导                 
while(1)弄好了
        {
      P0=~buf;     
          if(TF0 ==1)
          {
                 TF0 = 0;
                 TH0 = 0XFC;
                 TL0 = 0X67;
                 i++;
                 if(i==1000)
                 {
                    i=0;
                        shiftleft(&buf);
                 }         
          }
         if(buf == 0)
         {                                  
            buf= 0x01;
         }
        }
         
}


void shiftleft(unsigned char *p)
         {
         *p = (*p) <<1;

         }  

                      

一周热门 更多>