按键控制LED的打开关闭
#include<STC15F2K60S2.H>
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)P00=0;//打开
if(P31==0)P00=1;//关闭
}
}
按键控制一次流水灯
#include<STc15F2K60S2.H>
unsigned char LED;
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)//按一次流水一次,且上次流水未结束时按下不起作用
{
for(LED=0;LED<8;LED++)
{
P0=~(0X01<<LED);
Delayms(1000);
}
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
按键控制循环流水灯
#include<STC15F2K60S2.H>
unsigned char LED;
unsigned char LED_RUN;
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)LED_RUN=1;//按下后变量为1且不再变化
if(LED_RUN==1)//利用此变量为1控制一直能够循环流水
{
for(LED=0;LED<8;LED++)
{
P0=~(0X01<<LED);
Delayms(1000);
}
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
按键控制LED位移
#include<STC15F2K60S2.H>
unsigned char LED=0;//初始为0
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)LED++;//只有当按下按键时会进行自增,松开时不变
P0=~(0X01<<LED);//第一盏灯最开始就亮,后当一直按下时每一秒流水一次,直到超出
Delayms(1000);
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
按键流水灯松手检测及消抖
#include<STC15F2K60S2.H>
unsigned char LED=0;
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)
{
Delayms(5);//消抖
if(P30==0)
{
P0=~(0X01<<LED);
LED++;
if(LED==8)LED=0;//循环回来
}
while(!P30);//注意此行放的位置,实践中出现了按键不灵敏,是因为把此行放在了第一个if程序段结束后
//此行表示没有松开手就不会继续往下运行
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
原程序为按下按键时作用,此程序为松开按键时起作用
#include<STC15F2K60S2.H>
unsigned char LED=0;
unsigned char LED_Flag=0;
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
if(P30==0)
{
Delayms(5);
if(P30==0)
{
LED_Flag=1;
}
while(!P30);
}
if(LED_Flag==1) //此时为已经松开
{
LED_Flag=0;
P0=~(0X01<<LED);
LED++;
if(LED==8)LED=0;
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
按下按键时,用LED_Flag值由0变1来表示已经按下,松开后判断LED_Flag是否为1,为1代表按下并已经松开,此时执行LED_Flag归0并整体实现P0移位赋值。
按键控制LED灯,利用子函数,使用四个按键
#include<STC15F2K60S2.H>
unsigned char LED=0;
unsigned char LED_Flag=0;
unsigned char LED_RUN=0;
void Delayms(int ms);
void KEY_Scan(void);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化程序
while(1)
{
KEY_Scan();
if(LED_Flag==1) //按键流水灯
{
LED_Flag=0;
P0=~(0X01<<LED);
LED++;
if(LED==8)LED=0;
}
else if(LED_RUN==1) //自动流水灯
{
P0=~(0X01<<LED);
LED++;
if(LED==8)LED=0;
Delayms(1000);
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
void KEY_Scan(void)
{
if(P30==0) //按键s7,作用是按一下流水灯走一下
{
Delayms(5);
if(P30==0)
{
LED_Flag=1;
}
while(!P30);
}
else if(P31==0) //按键s6,作用是开启自动流水灯
{
Delayms(5);
if(P31==0)
{
LED_RUN=1;
}
while(!P31);
}
else if(P32==0) //按键s5,作用是点亮第一盏LED灯
{
Delayms(5);
if(P32==0)
{
P00=0;
}
while(!P32);
}
else if(P33==0) //按键s4,作用是熄灭第一盏LED灯
{
Delayms(5);
if(P33==0)
{
P00=1;
}
while(!P33);
}
}
将判断是哪一个按键的程序单列出来,按下不同的按键分别执行不同的程序,主程序再判断函数执行后的内容,执行对应的程序。