新手入门
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2013-8-30
- 在线时间
- 0 小时
|
发表于 2013-10-23 15:15:25
|
显示全部楼层
你好,,回复【21楼】perseverance:
---------------------------------
大侠,你引用的这个程序行吗,,怎么我下了这个代码,Mini板的跑马灯没有现象啊,这是什么情况 啊,大侠
u8 KEY_Scan(void)
{
u8 key_return=0,key_temp=0; //返回的按键值,按键情况
static u8 key_state=0,key_time=0,key_last=0; //按键状态,按键按下的时间计数器,上次按键值
JTAG_Set(JTAG_SWD_DISABLE);
if(KEY0==0)key_temp = 1;
if(KEY1==0)key_temp = 2;
if(KEY2==1)key_temp = 3;
switch (key_state)
{
case 0: //状态0
if(key_temp!=0) //检测到有按键,转到状态1,相当于是消抖过程
{
key_state=1;
}
break;
case 1: //状态1,有按键按下
if(key_temp!=0) //再次检测到有按键,转到状态2
{
key_state=2;
key_time=0; //清零按键时间计数器
key_last=key_temp; //保存键值,以便在释放按键状态返回键值
}
else
{
key_state=0; //没有检测到按键,说明初始状态检测到是一个抖动,重新转到状态0
}
break;
case 2: //状态2,按键长按
if(key_temp==0) //检测到按键松开
{
key_state=0; //状态转到初始状态
key_return=(key_last|0x10); //输出"单击"的按键值
}
else
{
if(++key_time>=50) //按下时间>1s
{
key_state=3; //转到松开状态
key_time=0; //清零按键时间计数器
}
}
break;
case 3:
if(key_temp==0) //检测到按键松开
{
key_state=0; //状态转到初始状态
}
else
{
if(++key_time>=25) //按下时间>0.5s
{
key_time=0; //清零按键时间计数器
key_return=(key_last|0x20); // 输出"连击"的按键值
}
}
break;
}
JTAG_Set(SWD_ENABLE);
return key_return;
}
-----------------------------------------------------------------------------------
int main(void)
{
u8 t;
u8 len;
u16 times=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
t = KEY_Scan();
if(t==0x11)printf(" 按键1按下\n");
if(t==0x12)printf(" 按键2按下\n");
if(t==0x13)printf(" 按键3按下\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
} |
|