首先说这个用到的材料:STM32主板,5*4的矩阵键盘和12232液晶。具体的代码和硬件连接我就不详细说了,下面简单说一下思路。
按键的识别可以通过两种方式,扫描和中断,这里用的是扫描法识别按键。一般来说,矩阵键盘的扫描都是这样的,将某行(列)置0,然后读取某列(行)的值,若为0则代表该行该列的按键按下。延时10ms左右(防止按键的机械抖动),再将该行置0并读取该列的值 ,若还为0则代表该按键确实按下了。下面就该区分是长按还是短按了,接着,如果不松开按键,此后每隔10ms检测一下列的值,连续100次(长按时间1s)都为0 代表按键一直未松开,则可以断定为长按,若中间有一次不为0,则断定为短按。
如何长按一个按键,然后动态显示时间呢?液晶的画面是静态的,要想它呈现动态,那就得不断的刷新液晶显示内容,例如:显示时间的时候让秒刷新。由于键盘需要动态的扫描,按我们长按一个按键后,调用一次时间显示函数,如果想让时间秒刷新,那就得不断的调用时间显示函数,这样程序就会不断的死循环,这样是不行的。正确的做法是,在长按一个按键后设定一个标志位flag=1,然后设定一个中断函数,中断间隔小于等于1s,然后在中断函数中判断flag,if(flag==1),则调用时间显示函数,这样程序就不会死循环了。