标签:第二站 结果 杯国赛 短按 蓝桥 中断 松手 Key 200ms
探究:
*长短按识别;
*RTC掉电运行;//*似乎没有外部32.768KHz的晶振、纽扣电池使得掉电运行,至于有没有超级电容,就不知道了。
*设置闹钟;
*Tim波形精准测定;
*value-1——value跳变瞬间的变化;
长短按识别:
说明:
1.不能使用delay,这样会占用cpu资源,使得其他外设工作变慢;
2.长短按有以下实现结果,
****一种是按下即显现短按的结果,如果迅速松手,则保持短按不变;
如果持续按下,松手后(或者不用松手)由短按跳转到长按的显示结果;
start->short->select one appropriate phenomenon to replace
****另一种是长短按的显示结果都不即时显现,比如设定长按为持续200ms及以上,那么200ms之后根据感应显示长、短按的结果
start->200ms'delay'->select one appropriate phenomenon to replace
****还有一种是短按即时显示短按的结果,但是长按,不会出现短按的显示结果,直接显示长按的显示(不管长按有没有松手让按键弹开)。但是这样的话,短按肯定是有延时的,也就是按下弹出的动作出现后,才会有短按的显示结果。
本次考虑第三种,也应该是最合乎常理的逻辑。
start->(eject or 200ms"delay")->select one appropriate phenomenon to replace
void Key_Proc(void) { if((uwTick - uwTick_Key)<100) return; uwTick_Key = uwTick; uint8_t Key_Val; uint8_t Key_Down; uint8_t Key_Up; Key_Val = Key_Scan(); Key_Down = Key_Val & (Key_Val ^ Key_Old); Key_Up = ~Key_Val & (Key_Val ^ Key_Old); Key_Times++; if((Key_Val==0)&&(Key_Old==0)) { Key_Times = 0; return; } Key_Old = Key_Val;//*Old是全局变量 //*请明白,Up和Down都只是一个脉冲信号 //*短按 if((Key_Times<=5)&&(Key_Up==1)) ucled = 0x01; if((Key_Times<=5)&&(Key_Up==2)) ucled = 0x04; //*长按,应该是500ms if((Key_Times>5)&&(Key_Old==1)) ucled = 0x02; if((Key_Times>5)&&(Key_Old==2)) ucled = 0x08; //*关灯 if(Key_Down==3) ucled = 0x00; }
效果符合第三种的预期,finished!
RTC中断:
- 闹钟中断:用来产生一个软件可编程的闹钟中断
- 秒中断:用来产生一个可编程的周期性中断信号(最长可达 1 秒)
- 溢出中断:检测内部可编程计数器溢出并回转为 0 的状态
标签:第二站,结果,杯国赛,短按,蓝桥,中断,松手,Key,200ms 来源: https://www.cnblogs.com/dowhatyoulove/p/16339689.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。