51单片机用三种方法实现流水灯
2021-10-29
一、数组流水灯
定义一组数组分别对应点亮LED1~7
然后利用for循环赋值给p2从而实现流水灯
#include #define uchar unsigned char #define uint unsigned int uchar code table[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数组 // 函数功能:毫秒延时 void delay(uint z) { uint x,y; for(x = 0; x < z; x++) for(y = 0; y < 113; y++); } void main() { uchar i; while(1) { for(i=0;i<8;i++) { P2 = table[i]; delay(300); } } } 二、移位函数流水灯 先定义p2为1111 1110 然后利用_crol_和_cror_函数进行移位 _crol_循环往左移一位,地位的补去高位,cror 循环往右移一位,高位的补去低位 #include #include #define uint unsigned int #define uchar unsigned char uchar temp; void delay(uint z) { uint x,y; for(x = z;x > 0;x--) for(y = 114;y > 0;y--); } void main() { temp = 0xfe; P2 = temp; delay(100); while(1) { temp = _crol_(temp, 1);//循环往左移一位,地位的补去高位 P2 = temp; //_cror_ 循环往右移一位,高位的补去低位 delay(100); } } 三、移位运算符流水灯 先定义p2为1111 1111 然后用for循环<<和>>进行移位 <<将p2的值左移1位(高位丢弃,低位补0),>>将p2的值右移1位(低位丢弃,高位补0) #include void delay(unsigned int xms);//延时函数声明 void main() { unsigned char i,j;//定义无符号字符型变量i和j(范围为0~255) while(1) //重复执行while循环体的程序 { i=0xff; //给i赋值1111 1111 P2=i; //给P2端口赋i的值 delay(500); //延时500ms for(j=0;j<8;j++)//循环8次 { i=i<<1; //将i的值左移1位(高位丢弃,低位补0) P2=i; //将i的值赋给P2端口 delay(500); //延时500ms } } } void delay(unsigned int xms) { unsigned int i,j; //定义无符号整形变量i(范围为0~65535) for(i=xms;i>0;i--) //执行xms次即延时x毫秒 for(j=115;j>0;j--); //延时1ms(给i赋1ms的延时值,循环体为空时执行i--指令115次为1ms) }
上一篇:让51单片机八段数码管亮起来
下一篇:51单片机的LED的位定义