- #include<reg51.h>
- #include<intrins.h>
- #include<myio.h>
- #define uchar unsigned char
- #define uint unsigined int
- #define LED P0
- sbit BUZZ=P0^6;
- //延时
- void delay(int x)
- {
- uchar i,j;
- for(i=0;i<x;i++)
- for(j=0;j<120;j++);
- }
- //主程序
- void main()
- {
- P2=0xa0;
- BUZZ=1;
- P2=0x80;
- P0=0xfe;
- LED=0xfe; //最右边灯亮
- while(1)
- {
- do
- {
- delay(200);
- LED=(LED<<1)|0x01; //左移
- // P0=_crol_(P0,1) ;
- } while(LED!=0x7f); //当最左边灯亮时跳出循环
- do
- {
- delay(200);
- LED=(LED>>1)|0x80; //右移
- // P0=_cror_(P0,1) ;
- } while(LED!=0xfe);
- delay(100);
- alter(3);
- flash(3);
- right(3);
- left(3);
- }
- }
比较简单的一个C语言小程序,应用在51单片机上。
当left(3)执行到最后一步时LED=0x7f,即0111 1111
此时在执行while(1)循环的第一步:LED=(LED<<1)|0x01 ;LED的状态将变为LED=0xff 即1111 1111
以后便无法跳出第一个do while循环,所以会出现看似while(1)无法循环的假象。
注释掉的语句可作为循环移动的另一种方法。