但抗干扰较双积分式差。
8.12 设计一个电路并画出软件流程以实现A/D转换,软件流程中要体现逐次逼近法思想。 答:1.电路见书344页图8.15所示。
2.软件流程图见上页右图所示:
8.13 什么叫采样保持电路的采样状态和保持状态?用示意图说明 。
答:① 采样状态:输出随输入而变化,增益为1。书351页图8.20的状态控制开关闭合。
② 保持状态:输出保持为某个值。图8.20的状态控制开关断开,电容保持充电时的最终电压值,使A2输出不变。
8.14 在实时控制和实时数据处理系统中,当需要同时测量和控制多路信息时,常用什么方法解决? 答:① 首先使用公共的A/D、D/A转换器;
② 然后用独立的的多路转换模拟开关来轮流切换各回路和A/D、D/A之间的通路。 ③ 或者选择内部本身带有多路转换模拟开关的A/D、D/A转换器。
第 9 章 键盘和LED显示器
9.1
利用行扫描法来识别闭合键的工作原理是什么?为什么在识别一个键前,先快速检查键盘中是否有键按下?快速识别有无闭合键的方法是什么?
答:1.从第0行开始扫描,看是否是该行的键闭合,直至最后一行扫描结束。(每扫一行输入列值,检查此行是否有键闭合,若有
键闭合则转去识别该键;若无键闭合,则扫描下一行??) 2.为了提高程序运行的速度,在无键按下时无需进行行扫描。
3.先使所有各行同时为低电位,再检查是否有列线也处于低电位。若有某列线处于低电位,则说明必有键按下,否则无键按下。
9.2 设计一个用行扫描法识别闭合键的扫描程序,设键盘上有4×5个键,并行口A接四根行线,并行口B接五根列线,两个端口的地址分别为PORTA、PORTB。 答:START: MOV
AL,00H
;判断是否有键按下的程序
MOV OUT
45
DX,PORTA DX,AL
;往4根行线输出低电平
MOV IN
DX,PORTB AL,DX
;读取列值
AND AL,1FH CMP JZ
;列值只有低5位有效
;是否有列线处于0电位
;无闭合键,循环等待 ;有闭合键,则延时20ms消抖
AL,1FH START DELAY
CALL
SCAN: MOV
BL,0 ;键号初值为0 SCAN1:
SCAN2:
46
MOV CL,0FEH ;送扫描初值 MOV
BH,4
;计数值为行数(4行)
MOV AL,CL MOV DX,PORTA OUT DX,AL ;扫描一行 RCL AL,1
;修改扫描值
MOV CL,AL MOV DX,PORTB IN
AL,DX
;读取列值
AND AL,1FH ;列值只有低5位有效
CMP AL,1FH ;是否有列线处于0电位 JNZ SCAN2
;有列线接地,则转SCAN2
MOV
AL,BL
;如无列线接地,则键号=键号+列数/每行
ADD AL,5 MOV BL,AL DEC BH ;扫描下一行
JNZ SCAN1 ;未扫描完,继续扫描
JMP
DONE ;已扫完,无键按下,则转DONE RCR AL,1
;如此列接地则转NEXT
JNC NEXT INC BL JMP
SCAN2
;如未找到接地的列线,则转SCAN2继续寻找
NEXT: ┆ DONE: ┆
;键命令处理程序 ;后续处理程序
设A端口工作在输出方式 9.3 叙述行反转法的基本工作原理,画出行反转法的程序流程。 答:1.行反转法的基本工作原理:将行线接一个并行口,
往行线输出全0 读 取 列 值 使其工作于输出方式;将列线接一个并行口,使其工作于输入方式;程序使CPU通过输出口往各行线上全送低电平,然后读入列线的值。若此时有某个键被按下,则必定会使某列线值为0。然后程序将两个并行端口的输入/输出方式调换,并将刚才读得的列线值从列线所接的并行口输出,再读取行线的输入值,在闭合键所在的行线上的值必定为0。这样当一个键被按下时,必定可以读得唯一的行值和列值。 2.程序流程如右:
与表中的码符合9.4
连锁法和巡回发识别重建的基本思想是什么?
N 答:① 连锁法识别重建的基本思想是:在所有键释放后,
只承认此后闭合的第一个键,对此键闭合时按下的其他键均不作识别,直到所有键释放以后,才读入下一个键。
② 巡回法识别重建的基本思想是:等前面所识别的键被释放以后,就可以对其他闭合键作识别。
N 转键命令处理 Y 有闭合键吗? N 保 留 列 值 延 迟 20ms 设A端口工作在输入方式 Y 输出刚才读得的列值 读 取 行 值 设 置 键 码 值 修改表地址,修改计数值 表查完了吗? Y 9.5 用连锁法识别重键时,对《微型计算机技术及应用》一书的图9.8中的三种重键情况分别如何处理?看懂图8.9的流程,并说明按标准的连锁法,此流程应如何修改?
答:1.图9.8(a),只读入A键;图9.8(b),标准连锁法也只读入A键;图9.8(c)则无效,两键都不读入。
2.标准连锁法的流程可按书362页图9.9来修改,即将等待释放的一部分改为等待所有键释放即可。方法是:在读进列值前加一个“使所有行为低电平”既可以了。
9.6 巡回法是如何识别三种重键情况的?分析图9.10的流程图,并编写一个8行×8列的巡回法识别重键程序,端口地址用标号表示。 答:1.图9.8(a),只识别A键;图9.8(b),A、B键同行则识别A键而舍弃B键,不同行则两键均识别;图9.8(c)若B键处于较小
行号上则只读入B键,若B键处于较大行号上则两键均读入。 2.START:
MOV
AL,00H
DX,RPORT
;取行端口号
MOV
47
OUT MOV IN
DX,AL DX,LPORT AL,DX AL,0FFH QUIT DELAY
;使所有各行为低电平 ;取列端口号 ;读入列值 ;判断是否有键闭合 ;无键闭合,则退出 ;有键闭合,则延时消抖 ;使第0行为低电平
CMP JZ
CALL MOV MOV
KEY:
MOV OUT PUSH MOV IN
AL,0FEH CX,08H DX,RPORT DX,AL AX
;总行数送CX
;使所选的一行为低电平 ;保存行值
DX,LPORT AL,DX AL,0FFH YE AX AL,1 KEY QUIT
;扫描结束则退出 ;键译码程序 ;AX中为键值 ;读入列值
;读入列值
;所选行上有闭合键吗? ;有键闭合,则转译码程序 ;无键闭合,恢复行值 ;选择扫描下一行
CMP JNZ POP SHL LOOP JMP
YE:
┆ PUSH
KEY1:
MOV IN
AX
DX,LPORT AL,DX AL,0FFH KEY1 DELAY AX
CMP JNZ CALL POP ┆
QUIT:
RET
;测试键是否已释放 ;如未释放则等待 ;已释放则再去抖动 ;AX中为键值 ;键命令处理 ;返回
9.7 48
在LED显示系统中,采用硬件方法译码和采用软件方法译码各有什么优缺点?
答:使用方便,不占用CPU过多的时间是硬件译码方法的优点,其缺点是使用局限性大(如有的硬件只能对BCD码进行译码等),
成型电路改造麻烦。软件译码正好相反。
9.8 画一个实现4位显示的扫描和驱动电路,LED为共阴极器件。然后画出LED显示程序流程图。 答:1.实现4位显示的扫描和驱动电路见下图。
2.LED显示程序流程图也见下页图。
9.9 设计计时器软件时,可以采用哪几种方案?哪一种方案最好?为什么在中断处理程序中包含的模块越少越容易调试? 答:1.① 显示程序和初始化程序等放在主程序中,键盘处理程序和计时程序放在中断处理程序中。
② 显示程序、键盘处理程序和初始化程序等都放在主程序中,计时程序放在中断处理程序中。 ③ 键盘处理程序等作为主程序,显示和计时程序作为中断处理程序 2.第③种方案最好。因其软件设计较为简单,显示实现较方便。 3.模块越少,程序越简单,调试自然越容易。 +5V 指向缓冲区首址
取显示位指针
关 显 示
取要显示的数
段驱修改缓冲区指将数变为段码 段码送到段控制通道 位码送到位控制通道
?? 延迟一定时间 49
N 是否是最右边Dpgfedcba ??