更新一个单个按键控制多种流水灯状态的教程,希望能帮助到大家~
所需元器件如下:
STC89C52RC芯片 *1
10K电阻 *2
100Ω电阻 *8
10uF 电解电容 *1
22pF 瓷片电容 *2
12MHz晶振 *1
按键 *2
LED灯 *8
代码如下:
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define LED P1
sbit KEY=P3^0;
unsigned char code led_1[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义第一种流水灯状态
unsigned char code led_2[8]=
{0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//定义第二种流水灯状态
unsigned char code led_3[5]=
{0x7e,0xbd,0xdb,0xe7,0xff};//定义第三种流水灯状态
unsigned char code led_4[5]=
{0xe7,0xc3,0x81,0x00,0xff};//定义第四种流水灯状态
unsigned int j,z; //定义两个无符号整型变量
void delay(uint x) //延时
{
uchar i;
while(x--)
{
for(i=0;i<100;i++);
}
}
void main()
{
j=1; //初始化为开机第一种流水灯状态
while(1)
{
if(KEY==0)
{
delay(10);
if(KEY==0)
{
j++;
delay(10);
if(j>4)
j=1;
}
}
switch(j)
{
case 1: //第一种流水灯状态
for(z=0;z<8;z++)
{
LED=led_1[z];
delay(150);
if(KEY==0)
{
delay(10);
if(KEY==0)
{
j++;
delay(10);
if(j>4)
j=1;
}
}
}
break;
case 2: //第二种流水灯状态
for(z=0;z<8;z++)
{
LED=led_2[z];
delay(150);
if(KEY==0)
{
delay(10);
if(KEY==0)
{
j++;
delay(10);
if(j>4)
j=1;
}
}
}
break;
case 3: //第三种流水灯状态
for(z=0;z<5;z++)
{
LED=led_3[z];
delay(150);
if(KEY==0)
{
delay(10);
if(KEY==0)
{
j++;
delay(10);
if(j>4)
j=1;
}
}
}
break;
case 4: //第四种流水灯状态
for(z=0;z<5;z++)
{
LED=led_4[z];
delay(150);
if(KEY==0)
{
delay(10);
if(KEY==0)
{
j++;
delay(10);
if(j>4)
j=1;
}
}
}
break;
}
}
}
仿真电路图如下: