POP DPH
POP DPL
RET
读显示数据子程序:
PR5:PUSH DPL
PUSH DPH
MOV DPTR,CRADD2;设置读状态字地址
PR51:MOVX A,@DPTR;读状态字
JB ACC.7,PR51;判“忙”标志为“0”否,否再读
MOV DPTR,#ADD2;设置读显示数据地址
MOVX A,@DPTR;读数据
MOV DAT,A;存数据
POP DPH
POP DPL
RET
2. 间接控制方式接口电路及驱动程序
间接控制方式驱动程序清单如下。
A0 EQU P3.0;寄存器选择信号
R/W EQU P3.1;读/写选择信号
El EQU P3.2;使能信号E1
E2 EQU P3.3;使能信号E2、
写指令代码子程序:
PRO:CLR A0;A0=0
SETB R/W;R/W=1
PRO1:MOV P1,#0FFH;P1 口置“1”
SET EI;El=l
MOV A,P1;读状态字
CLR E1;E1=0
JB ACC.7,PRO1;判“忙”标志为“0”否,否再读
CLR R/W;R/W=0
MOV P1,COM;写指令代码
SETB El;E1=1
CLR El;E1=0
RET
写显示数据子程序:
PR1:CLR A0;A0=0
SETB R/B;R/W=1
PR11:MOV P1,#0FFH;P1 口置“1”
SETB E1;El=1
MOV A,P1;读状态字
CLR El;E1=0
JB ACC.7,PR11;判“忙”标志为“0”否,否再读
SETB A0;A0=l
CLR R/W;R/W=0
MOV P1,DAT;写数据
SETB E1;E1=1
CLR El;E1=0
RET
读显示数据子程序:
PR2:CLR A0;A0=0
SETB R/W;R/W =1
PR21:MOV P1,#0FFH;P1 口置“1”
SETB E1;E1=1
MOV A,P1;读状态字
CLR E1;E1=0
JB ACC.7,PR21;判“忙”标志为“0”否,否再读
SETB A0;A0=1
MOV P1,#0FFH;P1 口置“1”
SETB E1;E1=1
MOV DAT,P1;读数据
CLR E1;E1=0
RET
写指令代码子程序:
PR3:CLR A0;A0=0
SETB R/W;R/W=1
PR31:MOV P1,#0FFH;P1 口置“1”
SETB E2;E2=1
MOV A,P1;读状态字
CLR E2;E2=0
JB ACC.7,PR31;判“忙”标志为“0”否,否再读
CLR R/W;R/W=0
MOV P1,COM;写指令代码
SETB E2;E2=1
CLR E2;E2=0
RET
写显示数据子程序:
PR4:CLR A0;A0=0
SETB R/W;R/W=1
PR41:MOV P1,#0FFH;P1 口置“1”
SETB E2;E2=1
MOV A,P1;读状态字
CLR E2;E2=0
JB ACC.7,PR51;判“忙”标志为“0”否,否再读
SETB A0;A0=l
CLR R/W;R/W=0
MOV P1,DAT;写数据
SETS E2;E2=l、
CLR E2;E2=0
RET
读显示数据子程序:
PR5:CLR A0;A0=0
SETB R/W;R/W=1
PR51:MOV P1,#0FFH;P1 口置“1”
SETB E2;E2=1
MOV A,P1;读状态字
CLR E2;E2=0
JB ACC.7,PR41;判“忙”标志为“0”否,否再读
SETB A0;A0=l
MOV P1,#0FFH;P1 口置“0”
SETB E2;E2=l
MOV P1,DAT;读数据
CLR E2;E2=0
RET
3. 应用子程序
本程序使用89C51汇编语言,接口电路为上面提供的实用电路,使用的模块样机是HY12232C,提供的程序同样可以应用于其他模块,程序中提供参数PD1为不同型号模块所选择。
【例3.1】 初始化子程序
对模块的初始化实际上是对SED1520的初始化。程序如下:
INT:MOV COM,#0E2H;复位
LCALL PRO
LCALL PR3
MOV COM,#0A4H;关闭等待状态
LCALL PRO
LCALL PR3
MOV COM,#0A9H;设置1/32 占空比
LCALL PRO
LCALL PR3
MOV COM,#0A0H;正向排序设置
LCALL PRO
LCALL PR3
MOV COM,#0C0H;设置显示起始行为第一行
LCALL PRO
LCALL PR3
MOV COM,#0AFH;开显示设置
LCALL PRO
LCALL PR3
RET
【例3.2】 清显示RAM 区(清屏)子程序
CLEAR:MOV R4,#00H;页面地址暂存器设置
CLEAR1:MOV A,R4;取页地址值
ORL A,#0B8H;“或”页面地址设置代码
MOV COM,A;页面地址设置
LCALL PRO
LCALL PR3
MOV COM,#00H;列地址设置为“0”
LCALL PRO
LCALL PR3
MOV R3,#50H;一页清80 个字节
CLEAR2:MOV DAT,#00H;显示数据为“0”
LCALL PR1
LCALL PR4
DJNZ R3,CLEAR2;页内字节清零循环
INC R4;页地址暂存器加1
CJNE R4,#04H,CLEAR1;RAM 区清零循环
RET
3.3 键盘及其接口
键盘是一组开关(按键)的集合,操作者通过键盘输入数据或命令,实现简单的人机对话。键盘接口必须解决以下一些问题:确定是否有键按下,按了哪一个键;消除抖动问题;按键的处理等等。这些均可由硬件或软件来完成。
3.3.1 键盘结构和类型
目前常用的按键有三种:机械触点式按键、导电橡胶式按键和柔性按键(又称轻触键盘)。
机械触点式按键是利用金属的弹性使按键复位,具有手感明显、接触可靠的特点。导电橡胶按键则是利用橡胶的弹性来复位,通常采用压制方法把面板上所有的按键制成一块,体积小,装配方便。柔性按键是近年来得到迅速发展的一种新型按键,它可分为凸球型和平面型两大类。前者动作行程触感明显,富有立体感,但工艺复杂;后者动作行程极微,触感较弱,但工艺简单,寿命也长,它的最大特点是廉价、形美、防尘、防潮、耐蚀、装嵌简单,而且外形和面板的布局、色彩、键距都可以按照整机的要求来设计,在一定程度上体现了今后仪器仪表键盘的发展方向。
按照键码识别的方法分类,有编码式和非编码式两种键盘。前者每按一次键,键盘自动提供被按键的编码,同时产生一选通脉冲通知主机;后者是靠软件来完成按键识别的。
3.3.2 抖动和串键
键盘输入时,存在触点弹跳与同时按下多个键的问题,即抖动与串键。
3.3.2.1 抖动
从键按下到接触稳定要经过数毫秒的抖动,键松开时也有同样的问题,这会引起一次按键多次读数。解决键的抖动可使用硬件或软件方法。通常在键数较少时,可用R S触发器,或用最简单的RC滤波器来克服抖动。键数较多时,往往采用软件延时的方法,即当检出键闭合(或断开)后,执行一个数毫秒的延时子程序,让抖动消失后,再检验一下键的状态,这样可避免因抖动所造成的多次读数问题。
3.3.2.2 串键
检出串键情况,避免产生错码也是件重要的事,处理串键有三种技术:两键同时按下、n键同时按下和n键锁定技术。
“两键同时按下”技术是在两个键同时按下时产生保护作用。最简单的方法是当只有一个键按下时才读取键盘的输出,最后仍被按下的键是有效的正确按键。当用软件扫描键盘时常采用这种方法。另一种方法是当第一个按键未松开时,按第二个键不产生选通信号。
这种方法常借助硬件来实现。
“n键同时按下”技术或者不理会所有被按下键,直至只剩下一个键按下时为止;或者将按键的信息存入内部缓冲器中,这种方法成本较高。
“n键锁定”技术只处理一个键,任何其他按下又松开的键不产生任何码,通常是第一个被按下或最后一个松开的键产生码。这种方法最简单也最常用。
3.3.3 非编码式键盘接口电路
非编码式键盘目前大都采用行扫描法来识别按键。行扫描法是以步进扫描的方式,每次在键盘的一行发出扫描信号,同时检查列线输入信号。若发现某列输入信号与扫描信号一致,则位于该列和扫描行交点的键被按下。4行4列键盘接口电路,共有16个键,4条行线接到输出口,4条列线接至输入口。两端口的数据端和控制端分别与单片机的数据线和控制线相连。
采用这种方法时,一般先用全“0”[也可用全“1”]测试是否有键按下。如果有,才在各输出线上依次送“0”,这可减少在没有按键时的扫描时间。假设K9键闭合,其余断开。程序在判出有键按下后,再逐行扫描,以确定所按键的号数。
8155的PA、PB口为输出口,PA 口除输出显示器的扫描控制信号外,又是键盘的行扫描口。8155的PC口为键输入口。7407和75452分别为同相和反相驱动器。下面给出判别按键号的程序,该程序计算键号的方法是先确定列线号,再与键号寄存器内容相加得到按键号。这种方法程序较长,但易于理解。
89C51判键号程序:
KEY:MOVX DPTR,#7F00H;置8155 PA、PB 口为输出方式
MOV A,#03H;PC 口为输入方式
MOVX @DPTR,A
MOV R4,#00H;0→键号寄存器R4
MOV R2,#01H;扫描模式01H→R2
KEY1:MOV DPTR,#7F0lH、MOV A,R2
MOVX @DPTR,A;扫描模式→8155 PA 口
INC DPTR
INC DPTR
MOVX A,@DPTR;读8155 PC 口
JB ACC. 0,KEY2;0 列无键闭合,转判1 列
MOV A,#00H;0 列有键闭合0→A
AJMP KEY5
KEY2:JB ACC.1,KEY3;1 列无键闭合,转判2 列
MOV A,#01H;1 列有键闭合,1→A
AJMP KEY5
KEY3:JB ACC.2,KEY4;2 列无键闭合,转判3 列
MOV A,#02H;2 列有键闭合2→A
AJMP KEY5
KEY4:JB ACC.3,NEXT;3 列无键闭合,转判下一行
MOV A,#03H;3 列有键闭合,3→A
KEY5:ADD A,R4;列线号+(R4)→R4
MOV R4,A
RET
NEXT:MOV A,R4
ADD A,#04H;键号寄存器加4
MOV R4,A
MOV A,R2
JB ACC.3,NEXTI;判是否已扫到最后1 行
RL A;扫描模式左移1 位
MOV R2,A
AJMP KEY1
NEXT1:MOV R4,#0FFH;置无键闭合标志
RET
3.3键盘及其接口
键盘是一组开关(按键)的集合,操作者通过键盘输入数据或命令,实现简单的人机对话。键盘接口必须解决以下一些问题:确定是否有键按下,按了哪一个键;消除抖动问题;按键的处理等等。这些均可由硬件或软件来完成。
3.3.1键盘结构和类型
目前常用的按键有三种:机械触点式按键、导电橡胶式按键和柔性按键(又称轻触键盘)。
机械触点式按键是利用金属的弹性使按键复位,具有手感明显、接触可靠的特点。导电橡胶按键则是利用橡胶的弹性来复位,通常采用压制方法把面板上所有的按键制成一块,体积小,装配方便。柔性按键是近年来得到迅速发展的一种新型按键,它可分为凸球型和平面型两大类。前者动作行程触感明显,富有立体感,但工艺复杂;后者动作行程极微,触感较弱,但工艺简单,寿命也长,它的最大特点是廉价、形美、防尘、防潮、耐蚀、装嵌简单,而且外形和面板的布局、色彩、键距都可以按照整机的要求来设计,在一定程度上体现了今后仪器仪表键盘的发展方向。
按照键码识别的方法分类,有编码式和非编码式两种键盘。前者每按一次键,键盘自动提供被按键的编码,同时产生一选通脉冲通知主机;后者是靠软件来完成按键识别的。
3.3.2抖动和串键
键盘输入时,存在触点弹跳与同时按下多个键的问题,即抖动与串键。
3.3.2.1抖动
从键按下到接触稳定要经过数毫秒的抖动,键松开时也有同样的问题,这会引起一次按键多次读数。解决键的抖动可使用硬件或软件方法。通常在键数较少时,可用RS触发器,或用最简单的RC滤波器来克服抖动。键数较多时,往往采用软件延时的方法,即当检出键闭合(或断开)后,执行一个数毫秒的延时子程序,让抖动消失后,再检验一下键的状态,这样可避免因抖动所造成的多次读数问题。
3.3.2.2串键
检出串键情况,避免产生错码也是件重要的事,处理串键有三种技术:两键同时按下、n键同时按下和n键锁定技术。
“两键同时按下”技术是在两个键同时按下时产生保护作用。最简单的方法是当只有一个键按下时才读取键盘的输出,最后仍被按下的键是有效的正确按键。当用软件扫描键盘时常采用这种方法。另一种方法是当第一个按键未松开时,按第二个键不产生选通信号。
这种方法常借助硬件来实现。
“n键同时按下”技术或者不理会所有被按下键,直至只剩下一个键按下时为止;或者将按键的信息存入内部缓冲器中,这种方法成本较高。