程序的主流程如图1所示。
图1 程序的主流程
程序主要分为两个部分:一个部分不停地监测是否有按键按下,另一个部分查看哪一个键按下。
在初始状态下,4个列输出端口输出低电平,即RD0~RD3输出低电平,然后持续监测4个行输入端口RD4~RD7的状态是不是高电平。
如果没有按键按下,则RD4~RD7的状态是高电平;如果有按键按下,则被按下的键对应的行输入端口的电平就会被拉低,RD4~RD7会有低电平出现,对4个行输入端口RD4~RD7的电平的监测即为对按键的监测。
在4个行输入端口RD4~RD7上出现低电平时,就转到查询程序SEE。键盘扫描子程序流程如图2所示,按键查询子程序流程如图3所示。
图2 键盘扫描子程序流程
图3 按键查询子程序流程
查询程序SEE分以下5个步骤。
· 在4个列输出端口RD0~RD3上输出,判断哪一个端口输入低电平。
· 在4个列输出端口RD0~RD3上输出0111,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,则可以确定哪个键按下,跳出查询程序:否则进入下一项。
· 在4个列输出端口RD0~RD3上输出1011,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,并跳出查询程序;否则进入下一项。
· 在4个列输出端口RD0~RD3上输出1101,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,跳出查询程序;否则进入下一顼。
· 在4个列输出端口RD0~RD3上输出1110,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,跳出查询程序;否则进入下一项。
程序清单如下。
(1)主程序。
完成初始化,对4×4的键盘输入进行扫描,然后将其输入通过端口D的低4位输出,显示时先闪两下再输出。
(2)键盘扫描子程序。
TEST为出口参数,若有键按下则子程序返回时TEST=0FFH,若没有键按下,则子程序返回时TEST=0。
(3)按键查询子程序。
当有按键按下时,运行该程序。VALUE中存放被按下的按键的键值,S0~515的键值为0~15。
(4)延时自程序。
COUNT1存放外部循环次数,COUNT2存放内部循环次数。