诚心向师傅请教几个问题:程序实现的功能是按键按一下led样式切换一个,功能是实现了但是有几个问题
如下:
1按键按下的时候切换时响应速度延时较大大概为一秒钟切换不知道知道这是怎么回事?
2按键一直按下的时候如果不加按键松开检测计数值k会一直 +1 导致led变化变成流水作业一直循环如果要加按键松开检测的话要加在哪里呢?
以下为实验程序欢迎各位师傅来赐教。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define YSHUSL 4
void delay(uint);
uchar a,b,c,d,e,f,g,k,i;
//*********************************************************************
sbit ANJXZ4=P3^3;
//*************************《按键函数》********************************
void key()
{
if(ANJXZ4==0)
{
delay(2);
if(ANJXZ4==0)
{
k++;
if(k>YSHUSL)
k=1;
}
}
}
//*******************************************************************************//
void main(void)
{
i=1;
k=1;
a=0x3f;//
b=0xfc;//
c=0x3c;//
d=0xe7;//
g=0xff;//
while(i)
{
switch(k)
{
case(1):
P2=a;
delay(500);
P2=g;
delay(500);
key();
if(ANJXZ4==0)break;
break;
//****************************************************************************//
case(2):
P2=b;
delay(500);
P2=0xff;
delay(500);
key();
if(ANJXZ4==0)break;
break;
//***************************************************************************//
case(3):
P2=c;
delay(500);
P2=0xff;
delay(500);
key();
if(ANJXZ4==0)break;
break;
//*******************************************************************************//
case(4):
P2=d;
delay(500);
P2=0xff;
delay(500);
key();
if(ANJXZ4==0)break;
break;
//***************************************************************************//
}
}
}
//********************************************************************//
//**************************《延时子程序》*********************************//
void delay(uint xms)
{
uint k,p;
for(k=xms;k>0;k--)
for(p=114;p>0;p--);
}
//********************************************************************//
|