/*----------------------------------------------- 名称:流水灯 日期:2016.7.28 修改:无 内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 延时子程序 ------------------------------------------------*/ void delay(unsigned int cnt) { while(--cnt); } /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { char flag = 0; //设置一个位变量 P1=0x7f; //给初始化值 换算成二进制是0111 1111 while(1) //当为1时 则无限循环 当为0时 则一次都不执行 { if (flag == 0) //判断是否为0 { delay(30000); //延时程序 P1 = P1 >> 1; //右移一位 该语句等效于 P1=P1>>1 P1 |= 0x80; // 1000 0000 if(P1==0xfe) //检测是否移到最左端?"=="表示检测符号2端的值是否相等 { flag = 1; } } else if (flag == 1) { delay(30000); //延时程序 P1 = P1 << 2; //左移两位 该语句等效于 P1=P1<<2 P1 |= 0x03; // 0000 0011 if(P1==0xbf) //检测是否移到最左端?"=="表示检测符号2端的值是否相等 { flag = 2; } } else { P1 = 0x00; // 灯将会全亮 delay(30000); //延时程序 P1 = 0x7f; // 0111 1111 flag = 0; } } }