用51单片机用一个按键控制八个灯,使其有四种不同形态的流水灯模式,另一个按键控制过程的暂停和开始
时间: 2023-05-15 19:06:31 浏览: 99
可以使用以下代码实现:
#include <reg51.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
void delay(unsigned int t)
{
unsigned int i, j;
for(i=0; i<t; i++)
for(j=0; j<125; j++);
}
void main()
{
unsigned char mode = 0;
unsigned char pause = 0;
while(1)
{
if(KEY1 == 0)
{
delay(10);
if(KEY1 == 0)
{
mode++;
if(mode > 3)
mode = 0;
while(KEY1 == 0);
}
}
if(KEY2 == 0)
{
delay(10);
if(KEY2 == 0)
{
pause = !pause;
while(KEY2 == 0);
}
}
switch(mode)
{
case 0:
if(!pause)
{
LED1 = 1; delay(100);
LED1 = 0; LED2 = 1; delay(100);
LED2 = 0; LED3 = 1; delay(100);
LED3 = 0; LED4 = 1; delay(100);
LED4 = 0; LED5 = 1; delay(100);
LED5 = 0; LED6 = 1; delay(100);
LED6 = 0; LED7 = 1; delay(100);
LED7 = 0; LED8 = 1; delay(100);
LED8 = 0;
}
break;
case 1:
if(!pause)
{
LED1 = 1; LED2 = 1; delay(100);
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 1; delay(100);
LED3 = 0; LED4 = 0; LED5 = 1; LED6 = 1; delay(100);
LED5 = 0; LED6 = 0; LED7 = 1; LED8 = 1; delay(100);
LED7 = 0; LED8 = 0;
}
break;
case 2:
if(!pause)
{
LED1 = 1; LED8 = 1; delay(100);
LED1 = 0; LED2 = 1; LED7 = 1; LED8 = 0; delay(100);
LED2 = 0; LED3 = 1; LED6 = 1; LED7 = 0; delay(100);
LED3 = 0; LED4 = 1; LED5 = 1; LED6 = 0; delay(100);
LED4 = 0; LED5 = 0;
}
break;
case 3:
if(!pause)
{
LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1; delay(100);
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; LED5 = 1; LED6 = 1; LED7 = 1; LED8 = 1; delay(100);
LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
}
break;
}
}
}
这段代码使用了一个无限循环,不断检测按键状态,并根据按键状态改变流水灯模式和暂停状态。四种不同的流水灯模式分别是:依次点亮、相邻两个点亮、两端点亮、四个同时点亮。按键控制过程的暂停和开始。