通过代码实现:
k1按键按下,8盏灯点亮;
k2按键按下,8盏灯熄灭/;
k3按键按下,流水灯从左到右不停点亮;
k4按键按下,流水灯从右到左不停点亮;
独立按键原理图
LED模块原理图
代码部分实现:
#include "reg51.h"
#include<intrins.h>
sbit k1=P3^1; //定义P31口是k1
sbit k2=P3^0; //定义P30口是k2
sbit k3=P3^2;//定义P32口是k3
sbit k4=P3^3;//定义P33口是k4
void delayms(int ms)//延时函数
{
int i,j;
for(j=0;j<ms;j++)
for(i=0;i<300;i++);
}
void lsd1()//流水灯从左向右不停的亮
{
while(k1==1&&k2==1&&k4==1)
{
P2=_crol_(P2,1);
delayms(100); //延时100ms
}
}
void lsd2()//流水灯从右向左不停的亮
{
while(k1==1&&k2==1&&k3==1)
{P2=_crol_(P2,1);
delayms(100); //延时100ms
}
}
void key()
{
if(k1==0) //检测按键K1是否按下
{
delayms(10); //消除抖动10ms
if(k1==0) //再次判断按键是否按下
P2=0x00;
while(!k1); //检测按键是否松开
delayms(10);
}
//按下k2 led灭
if(k2==0) //检测按键K2是否按下
{
delayms(10); //消除抖动10ms
if(k2==0) //再次判断按键是否按下
P2=0xff;
while(!k2); //检测按键是否松开
delayms(10);
}
if(k3==0) //检测按键K3是否按下
{
delayms(10); //消除抖动10ms
if(k3==0) //再次判断按键是否按下
P2=0xfe;//1111 1110
lsd1();//调用函数 流水灯从左向右不停的亮
while(!k3); //检测按键是否松开
delayms(10);
}
if(k4==0) //检测按键K4是否按下
{
delayms(10); //消除抖动10ms
if(k4==0) //再次判断按键是否按下
P2=0xfe;//1111 1110
lsd2();//调用函数 流水灯从右向左不停的亮
while(!k4); //检测按键是否松开
delayms(10);
}
}
void main()
{
while(1)
{
key();
}
}