唐 飞, 查长礼
(安庆师范学院 物理与电气工程学院,安徽 安庆 246133)
按键是用户与嵌入式系统进行交互的常用设备,因其简单实用、成本低,因而得到了广泛应用。嵌入式系统因体积所限,一般使用非编码按键,依靠程序识别按键的动作和按键编码。按键控制程序应能够管理按键按下、按键防抖、键值判别、按键弹起等任务,并识别单击、双击、长按、连发等按键模式。
当今的嵌入式系统体积越来越小,需要实现一键多“能”,因此,识别按键的单击、双击、长按的功能也越来越受到重视。
嵌入式系统工作时,用户使用按键的时间对于系统而言是随机的,因此,系统需要采用一定的策略对按键进行扫描,以识别按键的动作。常用按键扫描方法有以下几种[1]。
利用CPU的空闲时间不断对按键进行扫描,直到检测到按键动作,转去处理按键为止。此种方法简单易行,程序容易编写,但CPU效率低,CPU繁忙时,按键不能得到及时响应,实时性差。
按键按下时触发中断,CPU暂停当前执行程序,转向处理按键,处理完毕再返回主程序运行。此种方法CPU的利用率高,但占用了中断系统资源,中断系统发生冲突时不能及时响应按键动作。
借鉴了操作系统中时间片的思想,使用定时器每隔一定时间对包括按键在内的各个任务进行扫描,如按键动作,则处理按键,否则执行下一项任务。该方法CPU利用率高,各个任务划分时间片轮流执行,不会因为某个任务占用CPU时间过长造成其它任务没有响应。……