110 likes | 239 Views
计算机硬件技术基础( Ⅰ ) 硬件实验第四次. 0. 4. 8. C. +5V. E. R0. J9-1. 1. 5. 9. D. D. R1. J9-2. 2. 6. A. E. B. R2. J9-3. 3. 7. B. F. 7. R3. J9-4. 7. B. D. E. 8255 输入口(列). J8-4. J8-3. J8-2. J8-1. 8255 输出口(行). L3. L2. L1. L0. 键盘接口实验. 4×4 键盘单元电路原理图. 0. 4. 8. C. +5V.
E N D
计算机硬件技术基础(Ⅰ) 硬件实验第四次
0 4 8 C +5V E R0 J9-1 1 5 9 D D R1 J9-2 2 6 A E B R2 J9-3 3 7 B F 7 R3 J9-4 7 B D E 8255输入口(列) J8-4 J8-3 J8-2 J8-1 8255输出口(行) L3 L2 L1 L0 键盘接口实验 4×4键盘单元电路原理图
0 4 8 C +5V E R0 J9-1 1 5 9 D D R1 J9-2 2 6 A E B R2 J9-3 3 7 B F 7 R3 J9-4 7 B D E 8255输入口(列) J8-4 J8-3 J8-2 J8-1 8255输出口(行) L3 L2 L1 L0 键特征值=列值+行值
LED2 的 位选信号 例:键盘接口电路图如下图所示,将所按下的键代号8、9、A、B显示在LED6上。A口:段控;B口:PB5位控,PB1行控;C口:列控(PC0~PC3) 8255 8 0 列 PC0 9 1 列 PC1 A 2 列 LED 的 段选信号 PA0~7 PC2 B 3 列 PC3 PB1 1 行 +5V LED6 的 位选信号 PB5 键盘的键识别:列计数法和列值比较法(对同一行上的键) 基本思想: 适用于判键的个数比较少且这些键在同一行线上的情况。不需逐行扫描来形成键特征值,再查键值表,从而得到键代号。而是直接通过对键所在行判断该行有无键按下,通过列计数得到键代号或直接比较键的列值。
某行线置0(送扫描码) 某行线置0(送扫描码) 读入列线状态 读入列线状态 N N 有键按下? 有键按下? Y Y 延时20ms,去抖动 延时20ms,去抖动 键释放 键释放 N N Y Y 延时20ms,去抖动 延时20ms,去抖动 查找列值的 0 位,是0? 比较某列的列值,是? Y N N Y 键代号计数器加1 取下一列列值 根据键代号进行键处理 根据列值,转相应键处理 列值比较法键识别流程图 列计数法 键识别流程图
4×4键盘键识别列计数法、列值比较法 (设8255的B、C口为行、列控制口) DATA SEGMENT TBL DW R0,R1,R2,R3 ;按某行的0~3列键跳转地址表 DATA ENDS ; CODE SEGMENT ASSUME CS:CODE,DS:DATA ST: MOV AX,DATA MOV DS,AX MOV DX,20BH ;8255控制口 MOV AL,89H ;A,B口输出; C口输入 OUT DX,AL ;8255初始化 LP1: MOV AL,0FXH ;X=E、D、B、7(0~3行) MOV DX,209H ;B口:行控制口 OUT DX,AL ;所在行线清0
MOV DX,20AH ;C口:列控制口 RD: IN AL,DX ;读列线 AND AL,0FH ;取低4位 CMP AL,0FH ;全1? JE RD ;该行未按键,继续读列线 MOV SI,0 ;跳转表偏移量初值 LP2: SHR AL,1 ;列值右移一位 JNC BRC ;是0,对应键按下 ADD SI,2 ;跳转表偏移量+2 JMP LP2 ;继续查找按键 BRC: JMP TBL[SI] ;跳转到相应分支 MOV AH,AL ;保存列值 CALL DE20MS ;按下键延时去抖动(20 mS左右) RLS: IN AL,DX AND AL,0FH CMP AL,0FH JNE RLS ;该按键未释放,继续读列线 MOV AL,AH CALL DL20MS ;释放键延时去抖动(20 mS左右)
R0: … … ;按n行0列键处理代码 R1: … … ;按n行1列键处理代码 R2: … … ;按n行2列键处理代码 R3: … … ;按n行3列键处理代码 ; 分枝处理后或JMP LP1(继续判键)或结束程序 如判1行的键8、9、A、B: 则扫描码FXH=FDH 按8、9、A、B键分别执行分枝R0,R1,R2,R3 如果此行中某键不用,则直接在该分枝程序段中用一条指令JMP LP1即可,如9键不用: R1: JMP LP1 当某行有键按下时,可直接判列值,这时跳转表也可以不要了,设判A和B键: CMP AL,0BH ;A键列值(2列) JE R2 ;是,转按A键处理 CMP AL,07H ; B键列值(3列) JE R3 ;是,转按B键处理 JMP LP1 ;同一行其他键(8和9)转继续判键
实验内容(P165) • 按A键在8段显示器的LED6上显示字符F;按B键在微机屏幕上显示笑脸符(ASCII=2)。 • 按标准键盘回车键退出程序 • 可用BIOS中断和DOS中断实现: • LP: … LP: … • MOV AH,1 MOV AH,6 • INT 16H MOV DL,0FFH • JZ LP INT 21H • CMP AL,0DH JZ LP • JNE LP CMP AL,0DH • EXIT: … JNE LP • EXIT: … • 按8或9键退出程序 • 8、9键与A、B键同在第1行,参与判键,当列序号为0、1(列计数法)或列值为E、D(列值比较法)时程序结束。
4×4键盘与8段LED显示综合应用时特别要注意键盘的行控和8段LED显示器的位控是同一输出口,某行扫描(此时要求输出为0)与某位显示(此时要求输出为1)是矛盾的,编程时要注意协调,避免某位LED显示后又马上对该行进行扫描,而造成看不见该位的显示(往往在8段LED欲显示的字符后再加一段延时,在延时期间可按需要显示,延时完后若某行再作键识别行扫描时则对应的8段LED 则不显示)。如判8、9、A、B键,因同在第1行,其行扫描码为FDH(11111101B),FDH作为8段LED位控信号,LED2是不会显示的