#include <REGX52.H> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit sk_2 = P3^2; sbit sk_3 = P3^3; sbit sk_4 = P3^4; sbit sk_5 = P3^5; void delay1(int n) { int i,j; for(i=1;i<=n;i++) for(j=0;j<100;j++); } void delay(uint x ){ uint a,b; for(a=x;a>0;a--) for(b=114;b>0;b--); } void ls1(void){ while(1){ uint d=0xAA; P1 =~ d; delay(300); P1 = ~0x55; delay(300); if(sk_2==1) break; } } void ls2(void){ uchar e=0xfe; while(1){ P1=~e; e = _crol_(e,1); delay(350); if(e==0x7f){ while(1){ P1=~e; e=_cror_(e,1); delay(350); if(e==0xfe) break; } } if(sk_3==1){ break; } } } void ls3(void){ void delay1(int n); while(1) { P1=0x00; delay1(100); P1=0xFF; delay1(100); if(sk_4==1) break; } } void ls4(void){ uint i=0; uint f[10] ={0xff,0xe7,0xdb,0xbd,0x7e,0x7e,0x3c,0x18,0x00}; while(1){ for(i=0;i<=9;i++){ P1=~f[i]; delay(300); if(sk_5==1) break; } if(sk_5==1) break; } } void main(){ uchar c=0xFE; while(1){ P1 = ~c; c = _crol_(c,1); delay(200); if(sk_2==0){ ls1(); } if(sk_3==0){ ls2(); } if(sk_4==0){ ls3(); } if(sk_5==0){ ls4(); } } }分析这段流水灯代码
时间: 2023-12-05 20:04:48 浏览: 137
juchibo.rar_51 单片机 锯齿波 程序_site:www.pudn.com_单片机 锯齿波_锯齿波_锯齿波单片机
这段代码实现了一个多功能的流水灯,具有四种不同的模式,可以通过外部按键来控制模式的切换。
首先定义了一些宏和变量,其中sbit用来定义单片机的IO口,delay函数用来实现延时功能,ls1、ls2、ls3、ls4函数分别实现了四种不同的流水灯模式。
在主函数中,程序进入一个无限循环,不断地执行以下操作:
1. 控制灯的流水效果,通过左移运算符和循环语句实现。
2. 检测外部按键,如果按键被按下,则切换到对应的模式,分别调用ls1、ls2、ls3、ls4函数实现不同的功能。
例如,ls1函数实现了一个交替闪烁的流水灯效果,ls2函数实现了一个从左向右移动的流水灯效果,ls3函数实现了一个快速闪烁的效果,ls4函数实现了一个从0到9循环显示的效果。
整个程序的结构比较清晰,通过不同的函数实现不同的功能,并且通过外部按键来进行模式的切换,具有较高的可扩展性和灵活性。
阅读全文