在6楼的两次回复合并修改了一下
sbit led=P1^7;
sbit key=P1^7;
unsigned char x=0;//临时变量,用于判断按键按下led的亮灭状态
while(1)
{
key=1;//由于端口复用,所以如果灯是熄灭状态时(即key=0),需要先将端口重新设置为输入,以判断按键是否按下
if(key==0)
{
if(x==0)
{
x=1;
}
else
{
x=0;
}
}
if(x==0)
{
led=0;
delay();//适当延时一下,保证视觉暂留并充当按键消抖
}
else
{
led=1;
delay();//适当延时一下,保证视觉暂留并充当按键消抖
}
}总结一下,这个复用的端口其实一直在循环判断,只是灯亮的时候是key=1(端口输入设置)到led=1的变换;灯灭是key=1到led=0的变换,但由于延时led=0占主要部分,key=1时间很短所以感觉不到 |