利用按键实现LED灯亮灭状态切换的基础实验
#include <REGX52.H>
sbit LED1=P2^4; //位定义LED以及按键
sbit LED2=P2^5;
sbit LED3=P2^6;
sbit LED4=P2^7;
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
static void DelayNms(int nms); //延时函数
static void DelayNms(int nms)
{
static unsigned int i,j;
for(i=0;i<nms;i++)
for(j=0;j<123;j++);
}
void main()
{
LED1=0; //初始化所有LED灯为灭
LED2=0;
LED3=0;
LED4=0;
while(1)
{
if(0==KEY1)
{
DelayNms(50); //消抖
if(0==KEY1)
{
LED1=~LED1; //同时翻转LED1以及LED4的亮灭状态
LED4=~LED4;
while(0==KEY1); //等待按键被弹起
}
}
if(0==KEY2)
{
DelayNms(50); //消抖
if(0==KEY2)
{
LED2=~LED2;
while(0==KEY2); //等待按键被弹起
}
}
if(0==KEY3)
{
DelayNms(50); //消抖
if(0==KEY3)
{
LED3=~LED3;
while(0==KEY3); //等待按键被弹起
}
}
}
}
利用按键切换流水灯样式
#include <REGX52.H>
sbit LED1=P2^4;
sbit LED2=P2^5;
sbit LED3=P2^6;
sbit LED4=P2^7;
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
void DelayNms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms!=0)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
unsigned short mode = 0; //此变量用于记录按下了哪个按键,便于切换到对应的流水灯样式
while(1)
{
if(KEY1==0)
{
DelayNms(50);
while(KEY1==0);
DelayNms(50);
mode=1; //按下KEY1 mode1变为1 表示流水灯样式1
}
if(KEY2==0)
{
DelayNms(50);
while(KEY2==0);
DelayNms(50);
mode=2; //按下KEY2 mode2变为2 表示流水灯样式2
}
if(KEY3==0)
{
DelayNms(50);
while(KEY3==0);
DelayNms(50);
mode=3; //按下KEY3 mode3变为3 表示流水灯样式3
}
switch(mode) //利用switch对mode进行选择
{
case 0:
break;
case 1:
LED1=0;
DelayNms(50);
LED1=1;
LED2=0;
DelayNms(50);
LED2=1;
LED3=0;
DelayNms(50);
LED3=1;
LED4=0;
DelayNms(50);
LED4=1;
break;
case 2:
LED1=0;
DelayNms(50);
LED2=0;
DelayNms(50);
LED3=0;
DelayNms(50);
LED4=0;
DelayNms(50);
LED1=1;
DelayNms(50);
LED2=1;
DelayNms(50);
LED3=1;
DelayNms(50);
LED4=1;
DelayNms(50);
break;
case 3:
LED1=0;
DelayNms(50);
LED2=0;
DelayNms(50);
LED3=0;
DelayNms(50);
LED4=0;
DelayNms(50);
LED4=1;
DelayNms(50);
LED3=1;
DelayNms(50);
LED2=1;
DelayNms(50);
LED1=1;
DelayNms(50);
break;
default:
break;
}
}
}