| //花样流水灯,拉幕花样+左移位+右移位+循环左移+循环右移 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char uchar y,aa; void delay(uint i) //延时子函数 { uint m; uchar n; for(m=i;m>0;m--) for(n=110;n>0;n--); } void main() { while(1) { uchar k; for(k=0;k<2;k++) { P1=0xff; delay(1000); //拉幕花样 P1=0x7e; delay(1000); P1=0x3c; delay(1000); P1=0x18; delay(1000); P1=0x00; delay(1000); P1=0x00; delay(1000); P1=0x18; delay(1000); P1=0x3c; delay(1000); P1=0x7e; delay(1000); P1=0xff; delay(1000); P1=0; //灯闪烁1次 delay(1000); P1=0xff; delay(1000); } y=8; // y=8时,不需要里面的for循环就可以,流水灯为1次,改变y的值可以改变亮灯的位数。 while(y--) //这里如果不加while语句,灯会乱跳几下后,就去执行后面的程序了 { //如果需要多次流水灯,就需要for循环语句,改变K的值就可以改变次数 uchar k; for(k=0;k<2;k++) //流水循环次数 { P1 = P1 << 1; //按位左移 delay(1000); //延时 if(P1 == 0) //如果P1等于零, { /*则跳到下一步,P1全送高电平*/ P1 = 0xff; delay(1000); } } } y=8; while(y--) { uchar k; for(k=0;k<2;k++) //流水循环次数 { P1 = P1 >> 1; //按位右移 delay(1000); //延时 if(P1 == 0) //如果P1等于零, { /*则跳到下一步,P1全送高电平*/ P1 = 0xff; delay(1000); } } } aa=0xfe; y=8; while(y--) { P1 = aa; delay(1000); aa=_crol_(aa,1); //循环左移 } aa=0x7f; y=8; while(y--) { P1 = aa; delay(1000); aa=_cror_(aa,1); //循环右移 } } } |
L101302313 发表于 2016-10-2 15:33
以前学到过一点点全忘了,哈哈。
| 欢迎光临 迅维网 (https://www.chinafix.com/) | Powered by Discuz! X3.4 |