P1口的为什么不能实现从右到左再从左往右的往复闪烁

2019-07-16 04:07发布

#include <REG51.H>
#include <intrins.h>
char num,key;
void main()
{
char QS;
TMOD=0X01;   //选择定时/计数器以方式1工作(16位)
TH0=15536/256;  //装初值定时器中断一次为50ms
TL0=15536%256;
EA=1;    //开启总中断允许
ET0=1;    //开启定时器0终端允许
TR0=1;    //开启定时/计数器
QS=0Xfe;   //给P0口赋初值1111 1110
while(1)
{
  P1=QS;
  switch(key)
   {

    case 0:
   
     if(num>=10)
      {
       num=0;
       QS=_crol_(QS,1);//循环左移
       if(QS==0x7f)    //QS=0111 1111
       key=1;   
      }
      break;
   
  
    case 1:
   
     if(num>=10)
      {                                                                                                      
       num=0;
       QS=_cror_(QS,1); //循环右移
       if(P1==0xfe)  //QS=1111 1110
       key=0;
      }
      break;
     
   }
}   
}
void zhongduan() interrupt 1
{
TH0=15536/256;
TL0=15536%256;
num++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。