第5m255单片机的接口总应用 1)查询工作方式 键盘中有无键按下是由列线送入全扫描字,读入行线状态来判 别的。其方法是:PA口输出00H,即所有列线置成低电平,然后 将行线电平状态读入累加器A中。如果有键按下,总会有一根行线 电平被拉至低电平,从而使行输入状态不全为"1"。 键盘中哪一个键按下是由列线逐列置低电平后,检査行输入 状态,称为逐列扫描。其方法是:从PA0开始,依次输出"0",置 对应的列线为低电平,然后从PC口读入行线状态,如果全为"1", 则所按下之键不在此列;如果不全为"1",则所按下的键必在此列, 而且是与0电平行线相交的交点上的那个键。 为求取键码,在逐列扫描时,可用计数器记录下当前扫描列 的列号,然后用行线值为“0的行首键码加列号的办法计算
第5章 MCS–51单片机的接口与应用 1) 查询工作方式 键盘中有无键按下是由列线送入全扫描字,读入行线状态来判 别的。其方法是:PA口输出00H,即所有列线置成低电平,然后 将行线电平状态读入累加器A中。如果有键按下,总会有一根行线 电平被拉至低电平,从而使行输入状态不全为"1"。 键盘中哪一个键按下是由列线逐列置低电平后,检查行输入 状态,称为逐列扫描。其方法是:从PA0开始,依次输出"0",置 对应的列线为低电平,然后从PC口读入行线状态,如果全为"1", 则所按下之键不在此列;如果不全为"1",则所按下的键必在此列, 而且是与0电平行线相交的交点上的那个键。 为求取键码,在逐列扫描时,可用计数器记录下当前扫描列 的列号,然后用行线值为"0"的行首键码加列号的办法计算
第5量mC5单片机的接、三 有键按下否Y 调用6ms延时子程 调用12ms延时子程 N有键按下否 判断闭合键,键码入栈保 闭合键释放否 键码→A 返回 一园 57键盘扫描子程序流程框图
第5章 MCS–51单片机的接口与应用 有键按下否 调用6 ms延时子程 序 开 始 调用12 ms延时子程 序 有键按下否 判断闭合键,键码入栈保 存 闭合键释放否 键码 → A 返 回 Y Y Y N N N 图5.7 键盘扫描子程序流程框图
第5m255单片机的接口总应用 键盘扫描子程序如下: KEY1: ACALL KSI ;调用判断有无键按下子程序 NZ LKI 有键按下时,(A)≠0转消抖延时 AJMP KEYI ;无键按下返回 LKI: ACALL TM12S;调12ms延时子程序 ACALL KSI ;查有无键按下,若有则真有键按下 INZ LK2 ;键(A≠0逐列扫描 AJMP KEYI ;不是真有键按下,返回 LK2;MOⅤR2,#0FE;初始列扫描字(列)送入R2 MOV R4,#OOH ;初始列(0列)号送入R4
第5章 MCS–51单片机的接口与应用 键盘扫描子程序如下: KEY1:ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下时,(A)≠ 0转消抖延时 AJMP KEY1 ;无键按下返回 LK1:ACALL TM12S ;调12 ms延时子程序 ACALL KS1 ;查有无键按下,若有则真有键按下 JNZ LK2 ;键(A)≠ 0逐列扫描 AJMP KEY1 ;不是真有键按下,返回 LK2;MOV R2,#0FEH ;初始列扫描字(0列)送入R2 MOV R4,#00H ;初始列(0列)号送入R4
第5量m2557单片机的接口与友用 LK4: MOV DPTR,#7F0H;DPTR指向8155PA口 MOV A, R2 ;列扫描字送至8155PA口 MOVX ODPTR,A NC DPTR ;DPTR指向8155PC口 INC DPTR MOVX A, aDPTR ;从8155PC口读入行状态 JB ACC.O, LONE ;查第0行无键按下,转查第1行 MOA,#00H;第0行有键按下,行首键码#00H→A AJMP LKP ;转求键码 LONE: JB ACC.1, LTWO ;查第1行无键按下,转査第2彳 MOV A,#08H 第1行有键按下,行首键码#08H→A AJMP LKP ;转求键码
第5章 MCS–51单片机的接口与应用 LK4:MOV DPTR,#7F01H ;DPTR指向8155PA口 MOV A,R2 ;列扫描字送至8155PA口 MOVX @DPTR,A INC DPTR ;DPTR指向8155PC口 INC DPTR MOVX A,@DPTR ;从8155 PC口读入行状态 JB ACC.0,LONE ;查第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,行首键码#00H→A AJMP LKP ;转求键码 LONE:JB ACC.1,LTWO ;查第1行无键按下,转查第2行 MOV A,#08H ;第1行有键按下,行首键码#08H→A AJMP LKP ;转求键码
第5章M55单片机的接口与友用 TWO: JB ACC2,LTHR;査第2行无键按下,转査第3 MOV A,#10H ;第2行有键按下,行首键码#10H→A AJMP LKP 转求键码 LTHR: JB ACO.3,NEXT;查第3行无键按下,转该查下一列 MOV A, #18H ;第3行有键按下,行首键码#18H→A LKP: ADD A, R4 ;求键码,键码-行首键码+列号 PUSH ACC ;键码进栈保护 LK3: ACALL KSI ;等待键释放 nZ LK3 ;键未释放,等待 POP ACC ;键释放,键码→A RET ;键扫描结束,出口状态(A)=键码
第5章 MCS–51单片机的接口与应用 LTWO:JB ACC.2,LTHR ;查第2行无键按下,转查第3行 MOV A,#10H ;第2行有键按下,行首键码#10H→A AJMP LKP ;转求键码 LTHR:JB ACC.3,NEXT ;查第3行无键按下,转该查下一列 MOV A,#18H ;第3行有键按下,行首键码#18H→A LKP:ADD A,R4 ;求键码,键码=行首键码+列号 PUSH ACC ;键码进栈保护 LK3:ACALL KS1 ;等待键释放 JNZ LK3 ;键未释放,等待 POP ACC ;键释放,键码→A RET ;键扫描结束,出口状态(A)=键码