本实验将实现如下功能:
1,短按1次KEY0,LED0亮,LED1灭
2,短按2次KEY0,LED00灭,LED1亮
3,短按3次KEY0,LED0,LED1都灭
4,长按KEY0,LED0,LED1都亮。
代码很简单:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
//Mini STM32开发板范例代码2
//按键输入实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
int main(void)
{
u8 t;
u8 keytimer=0; //按下时间统计
u8 dbclick=0; //多次按标记
u8 lclick=0; //长按标记
u8 runt=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
t=KEY_Scan(1); //得到键值
if(t==1) //KEY0按下
{
keytimer++;
if(keytimer>40)lclick=1;
runt=0;
}else //此时按键已经松开了
{
if((lclick==0)&&(keytimer>3)) //短按,至少要80ms
{
dbclick++;
}
if(runt>30) //松开连续超过300ms了
{
if(dbclick==1)//单按
{
LED0=0;//LED0亮
LED1=1;
}
if(dbclick==2)//双按
{
LED1=0;//LED1亮
LED0=1;
}
if(dbclick==3)//三次按
{
LED1=1;//全灭
LED0=1;
}
dbclick=0;
}
keytimer=0; //按下时间清零
lclick=0; //长按标志清零
}
if(lclick) //长按处理
{
LED0=LED1=0; //两个LED都亮
}
runt++;
delay_ms(10);
}
}
|