//用的是STM32F103C6 KEIL
//这个是正确的4键控制LED0~3(LED1~4) 能够得出结果
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3 ==0))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)
{
return 1;
}
else if(KEY1==0)
{
return 2;
}
else if(KEY2==0)
{
return 3;
}
else if(KEY3 ==0)
{
return 4;
}
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3 ==1)key_up=1;
return 0;// 无按键按下
}
//这是自己编写的4键控制LED0~7 其中KEY0是转换位 KEY1~3的输入组合对应 八个灯 下载后无法达到要求
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
u8 ide=0,key_toggle;
key_toggle=KEY0;
while(key_toggle)
{
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3 ==0))
{
delay_ms(10);//去抖动
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3 ==0))
{
if(KEY3==0)
{
ide=ide | 0x04; key_up=0;
}
else if(KEY2==0)
{
ide=ide | 0x02;key_up=0;
}
else if(KEY1==0)
{
ide=ide | 0x01;key_up=0;
}
}
}
else
{ key_up=1; }
}
return ide;
}
int main(void)
{
u8 t;
SystemInit(); //系统时钟设置
delay_init(72); //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
t=KEY_Scan();//得到键值
if(t)
{
switch(t)
{
case 1:
LED0=0;
break;
case 2:
LED1=0;
break;
case 3:
LED2=0;
break;
case 4:
LED3=0;
break;
case 5:
LED4=0;
break;
case 6:
LED5=0;
break;
case 7:
LED6=0;
break;
case 8:
LED7=0;
break;
}
}else delay_ms(10);
}
}
|