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編輯過]
|