流水灯程序(位运算):
- #include <REGX51.H>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char i;
- unsigned char temp;
- void Delayms(unsigned int ms)
- {
- unsigned int i,j;
- for(i=0;i<ms;i++)
- for(j=0;j<120;j++);
- }
- void main(void)
- {
- while(1)
- {
- temp = 0x01; //0x01=0000 0001
- for(i=1;i<8;i++)
- {
- P2=~temp; //P2=1111 1110 对temp取反,保证每次循环只亮一个灯
- temp=temp<<1; //按位左移,高位丢弃,低位补0
- Delayms(200);
- }
- for(i=1;i<8;i++)
- {
- P2=~temp;
- temp=temp>>1; //按位右移,高位补0,低位丢弃
- Delayms(200);
- }
- }
- }
复制代码
流水灯代码(库函数):
- #include <REGX51.H>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- void Delayms(uint ms)
- {
- uchar t;
- while(ms--)
- {
- for(t=0;t<120;t++);
- }
- }
- void main()
- {
- uchar i,j;
- P2 = 0xfe;
- while(1)
- {
- for(i=0;i<7;i++)
- {
- P2 = _crol_(P2,1); //P1端口向左循环移动一位
- Delayms(300);
- }
- for(j=0;j<7;j++)
- {
- P2 = _cror_(P2,1); //P1端口向右循环移动一位
- Delayms(300);
- }
- }
- }
复制代码
流水灯(字符型数组):
- #include <REGX51.H>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code Pattern_P2[] =
- {
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
- };
- void Delayms(uint ms)
- {
- uchar t;
- while(ms--)
- {
- for(t=0;t<120;t++);
- }
- }
- int main()
- {
- uchar i;
- while(1)
- {
- for(i=0;i<8;i++)
- {
- P2=Pattern_P2[i];
- Delayms(200);
- }
- for(i=8;i--;i>0)
- {
- P2=Pattern_P2[i];
- Delayms(200);
- }
- }
- }
复制代码
|