#include<reg52.h>
char a;
unsigned int b,c,flag;
sbit F1 = P2^6;
void main()
{
a = 0xff;
while(1)
{
b = 50000;
c = 50000;
a = a<<1;
P1 = a;
while(b--);
if(a == 0x00)
{
a = 0xfe;
flag = 1;
while(c--);
}
while( flag == 1)
{
a = 0x7f;
b = 1000;
c = 1000;
a >>= 1;
P1 = a;
while(b--);
if(a == 0x00)
{
P1 = 0xfe;
flag = 0;
while(c--);
}
}
}
}
这个是低电平点亮,为什么左移可以,右移不行啊,朋友帮我看看啊!!谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- #include<reg52.h>
- unsigned char a;
- unsigned int b,c,flag; //声明变量
- sbit F1 = P2^6;
- void main()
- {
- a = 0xff; //给a赋值
- while(1)
- {
- b = 50000;
- c = 50000;
- a = a<<1; //左移一位
- P1 = a; //把左移后面数赋值给P1;
- while(b--); //延时一段时间
- if(a == 0x00) //判断是循环完毕
- {
- a = 0xfe; //再重新赋值
- flag = 1; //标志位赋值1
- while(c--); //延时一段时间
- }
- while( flag == 1) //判断标志位是否为1
- {
- a = 0x7f; //赋值
- b = 1000;
- c = 1000;
- a >>= 1; //右移一位
- P1 = a; //赋值给P1
- while(b--);
- if(a == 0x00) //判断是否循环完毕
- {
- P1 = 0xfe; //P1口重新赋值
- flag = 0; //标志位置0
- while(c--); //延时一段时间
- }
- }
- }
- }
复制代码26行移位一次,所以现象一样 啊
当右移位到a=0x00时,
退出循环,然后左移位a还是等于0x00
继续进入右移循环
get a decent C book and read about type promotion.
一周热门 更多>