本帖最后由 liaolinhui 于 2014-8-16 12:20 编辑
觉得你这程序很不合逻辑
#include <reg52.h>
#include <stdio.h>
sbit L4 = P1^4;
void DELAY();
void main()
{
unsigned char k;
unsigned char k_temp;
k = P1; //这里你让k=P1,
if (k == 0xFE)
{
DELAY();
k_temp = P1;//这里你又让k_temp=P1
if(k_temp == k)//所以这里你是想通过延时一段时间后判断按键是否松开,对吧,但是单片机执行指令是很快的,延时完了你没及时松开,程序就直接判断k_temo==k,所以执行L4=0,而如果你延时程序没延时完及时松开了,那么程序就判断k_temp不等于k,而执行L4=1,
{
//P2 = 0xFE;
L4 = 0;
}
else
{
L4 = 1;
}
}
}
void DELAY()
{
int i,j;
for (i = 0;i < 1000;i++)
{
for (j = 0;j < 10;j++);
}
} |