int yunsuan2(unsigned int i) //低位补1函数 { unsigned int j=0x00; for(;i>1;i--) {
j=j>>1+0x80;〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗
} return i=j; } /******************************************************/ int yunsuan1(unsigned int i) //高位补1函数 { unsigned int j=0x00; for(;i>1;i--) { j=j<<1+0x01;〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗
} return i=j;
}
void main(void) { unsigned int j=0; unsigned int i; while(1) {
P0=0xff;
for(j=1;j<=4;j++) { i=j; P0=(P0<<(j)+yunsuan1(i));//P0左移j个位,低位补1〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗 Delay(500); P0=(P0>>(j)+yunsuan2(i));//p0右移j个位,高位补1〖位运算符的优先级比+,-低,这样很容易看出错误的地方了〗
Delay(500); } }
}
程序的目的是要依次得到(0代表亮灯)
1111 1110
0111 1111
1111 1101
1011 1111
1111 1011
1101 1111
1111 0111
1110 1111
但下载到单片机里后出现灯亮的顺序是这样的
1111 1110
0111 1111
1111 1100
0011 1111
1111 1000
0001 1111
1111 0000
0000 1111
为什么会这样!!??
原来是运算符的优先级搞错了。
给一起学习的同学做个反面榜样吧。
[此贴子已经被作者于2009-11-5 18:44:52编辑过]
|