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++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ltp217
1楼-- · 2019-07-16 07:37
第一次循环之后key的值为1了,进行第二次循环时进入case 1中了
jiangxiaowenzsz
2楼-- · 2019-07-16 08:31
 精彩回答 2  元偷偷看……
jiangxiaowenzsz
3楼-- · 2019-07-16 14:27
没必要写这么复杂,用数组就可以了
CCCBBBIII
4楼-- · 2019-07-16 19:53
程序有很多错误嘛
不落夕阳
5楼-- · 2019-07-17 01:22
忘记加延时了!!
lstcspring
6楼-- · 2019-07-17 02:03
这儿有个现成的参考一下
花样流水灯程序
http://bbs.elecfans.com/forum.ph ... 1&fromuid=89414

一周热门 更多>