首先需要明白怎么去通过按键去控制led灯的亮灭
通过获取key(按键)返回的高低电平即 0 1 来控制led灯
这个返回值肯定需要调用函数去实现
u8 scan_key()
{
//怎么实现
//
//当外界有信号输入 判断下外界那个端口输入,然后返回一个数值;
//读取key的值
//
static u8 key_up=1;//值得注意的是这个部分
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
key_up=0;//值得注意的是这个部分
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(WK_UP==1)return 3; //值得注意的是这个部分
}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;//值得注意的是这个部分
return 0;//值得注意的是这个部分
}
该函数就是用来获取返回值,上面代码中有几个值得注意的地方,这里设置key_up=1;当程序运行进入
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
key_up=0;//值得注意的是这个部分
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(WK_UP==1)return 3; //值得注意的是这个部分
}
假如没有这key_up=1;--->>key_up=0;这个过程,你会发现你的led不顺从你的操作按键,因为当函数执行时即
没有key_up=1;这个条件
if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
{
delay_ms(10);
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(WK_UP==1)return 3; //值得注意的是这个部分
}
单片机处理指令非常的快这时会频繁的调用这个函数,即返回值可能一直是你按键的返回值,想要改变则需要再一次进入这个函数主体的时候,会出现不满足进入if语句的过程即
key_up=1;--->>key_up=0
将该语句添加进去,但是此时还会出现问题,当按一次按键后再次操作时无法操作按键,这时应该注意到一个点static,此时key_up==0的,无法完整的执行完这个函数,此时
else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;//值得注意的是这个部分
return 0;/
这个就是关键的语句,即什么按键都没有触发的时候,执行该语句,重点什么按键都没有触发的时候,这时key_up==1;