蓝桥杯国赛——第二站长短按
探究:
*长短按识别;
*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 的状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!