微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第13节:按住一个独立按键不松手的加速匀速触发

第13节:按住一个独立按键不松手的加速匀速触发

时间:11-22 来源:互联网 点击:

key_service();//按键服务的应用程序

led_run(); //led灯的应用程序

}

}

void led_run() //led灯的应用程序

{

if(uiSetNumber<500) //如果被设置的参数uiSetNumber小于500,LED灯则灭。否则亮。

{

led_dr=0; //灭

}

else

{

led_dr=1; //亮

}

}

void key_scan()//按键扫描函数 放在定时中断里

{

/* 注释一:

* 独立按键连续加速扫描的过程:

* 第一步:每次按下去触发一次单击按键,如果按下去到松手的时间不超过1秒,则不会进入连续加速触发模式。

* 第二步:如果按下去不松手的时间超过1秒,则进入连续加速触发模式。按键触发节奏不断加快,蜂鸣器鸣叫的节奏

* 也不断加快。直到它们都到达一个极限值,然后以此极限值间隔匀速触发。在刚开始加速的时候,按键触发与

* 蜂鸣器触发的步骤是一致的,等它们任意一个达到极限值的时候,急促的声音跟按键的触发不一致,并不是

* 蜂鸣器每叫一次,按键就触发一次。实际上加速到最后,按键触发的速度远远比蜂鸣器的触发速度快。

*/

if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位

{

ucKeyLock1=0; //按键自锁标志清零

uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。

uiKeyCtntyCnt1=0; //按键连续加速的时间间隔延时计数器清零

uiSynCtntyCnt1=0; //蜂鸣器连续加速的时间间隔延时计数器清零

uiCtntyTimeSet1=const_initial_set; //按键每次触发的时间间隔初始值,这数值不断变小,导致速度不断加快

uiCtntySynSet1=const_initial_set; //同步声音的时间间隔初始值,这数值不断变小,导致鸣叫的节奏不断加快

}

else if(ucKeyLock1==0)//有按键按下,且是第一次被按下

{

uiKeyTimeCnt1++; //累加定时中断次数

if(uiKeyTimeCnt1>const_key_time1)

{

uiKeyTimeCnt1=0;

ucKeyLock1=1; //自锁按键置位,避免一直触发

ucCtntyFlag1=0; //连续加速触发模式标志位 0代表单击 1代表连续加速触发

ucKeySec=1; //触发1号键

}

}

else if(uiKeyTimeCnt1

{

uiKeyTimeCnt1++;

}

else //按住累加到1秒后仍然不放手,这个时候进入有节奏的连续加速触发

{

uiKeyCtntyCnt1++; //按键连续触发延时计数器累加

//按住没松手,每隔一段uiCtntyTimeSet1时间按键就触发一次,而且uiCtntyTimeSet1不断减小,速度就越来越快

if(uiKeyCtntyCnt1>uiCtntyTimeSet1)

{

if(uiCtntyTimeSet1>const_min_level)

{

uiCtntyTimeSet1=uiCtntyTimeSet1-const_sub_dt; //uiCtntyTimeSet1不断减小,速度就越来越快

}

else

{

uiCtntyTimeSet1=const_last_min_set; //uiCtntyTimeSet1不断减小,到达一个极限值

}

uiKeyCtntyCnt1=0;

ucCtntyFlag1=1; //进入连续加速触发模式

ucKeySec=1; //触发1号键

}

uiSynCtntyCnt1++; //蜂鸣器连续触发延时计数器累加

//按住没松手,每隔一段uiCtntySynSet1时间蜂鸣器就触发一次,而且uiCtntySynSet1不断减小,鸣叫的节奏就越来越快

if(uiSynCtntyCnt1>uiCtntySynSet1)

{

uiCtntySynSet1=uiCtntySynSet1-const_sub_dt; //uiCtntySynSet1不断减小,鸣叫的节奏就越来越快

if(uiCtntySynSet1

{

uiCtntySynSet1=const_syn_min_level; //uiCtntySynSet1不断减小,达到一个极限值

}

uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。

uiSynCtntyCnt1=0;

}

}

if(key_sr2==1)

{

ucKeyLock2=0;

uiKeyTimeCnt2=0;

uiKeyCtntyCnt2=0;

uiSynCtntyCnt2=0;

uiCtntyTimeSet2=const_initial_set;

uiCtntySynSet2=const_initial_set;

}

else if(ucKeyLock2==0)

{

uiKeyTimeCnt2++;

if(uiKeyTimeCnt2>const_key_time2)

{

uiKeyTimeCnt2=0;

ucKeyLock2=1;

ucCtntyFlag2=0;

ucKeySec=2;

}

}

else if(uiKeyTimeCnt2

{

uiKeyTimeCnt2++;

}

else

{

uiKeyCtntyCnt2++;

if(uiKeyCtntyCnt2>uiCtntyTimeSet2)

{

if(uiCtntyTimeSet2>const_min_level)

{

uiCtntyTimeSet2=uiCtntyTimeSet2-const_sub_dt;

}

else

{

uiCtntyTimeSet2=const_last_min_set;

}

uiKeyCtntyCnt2=0;

ucCtntyFlag2=1;

ucKeySec=2;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top