第8章习题答案
答案:
键盘扫描的主要思路:首先确定是否有键按下,消除抖动,若有键按下,输出逐行或列的扫描字,读取列或行的状态,确定按键键值,然后再判断按键是否释放,若释放,即可返回。 2.简述软件消除键盘抖动的原理。
答案:
软件消除键盘抖动的原理:当CPU发现有键按下的情况下,为了防止是机械抖动的误动作,可以采用软件延时10ms,然后再次检测按键是否仍然为闭合状态,若仍然闭合,则确定有键按下,否则就是键盘抖动,不予理睬。 3.什么叫LED的动态显示和静态显示。
答案:
静态显示形式,即七段LED数码管在显示某一个字符时,相应的段(发光二极管)恒定的导通或截至,直至换显其他字符为止。
动态显示是将所有数码管的段码线对应并联在一起,由一个8位的输出口控制,每位数码管的公共端(称位选线)分别由一位I/O口线控制,以实现各位的分时选通。
4.要求利用8031的P1口扩展一个22行列式键盘电路,画出电路图,并根据所绘电路编写键扫描子程序。 答案:
设行线H1~H2连接到51单片机P1口的P1.0~P1.1,列线L1~L2连接到P1口的P1.4~P1.5。电路图如下:
键扫描子程序:
轻触开关电路KEY: MOV P1, #0FH ;列输出低电平,行输出高电平
MOV A, P1 ;读P1口状态
ANL A, #0FH ;保留行状态
CJNE A, #0FH, KEY0 ;有键按下转KEY0
SJMP KEY ;无键按下等待,转键检测
KEY0: LCALL DELAY10 ;调10mS延时取抖
MOV A, P1
ANL A, #0FH
CJNE A, #0FH, KEY1 ;不是抖动转键值判断
SJMP KEY ;是抖动到键检测
KEY1: MOV P1, #11101111B ;第一列键被按下判断
MOV A, P1
ANL A, #0FH
CJNE A, #0FH, KEYC1 ;第一列键被按下转KEYC1处理
MOV P1, #11011111B ;第二列键被按下判断
MOV A, P1
ANL A, #0FH
CJNE A, #0FH, KEYC2 ;第二列键被按下转KEYC2处理
LJMP KEY ;均不是转到键检测
KEYC1: MOV A, P1 ;读键值键值处理
JB E0H, KEYC11
LCALL K1 ;K1键处理
SJMP FANH
KEYC11: LCALL K3 ;K3键处理
SJMP FANH
KEYC2: MOV A, P1 ;读键值键值处理
JB E0H, KEYC21
LCALL K2 ;K2键处理
SJMP FANH
KEYC21: LCALL K4 ;K4键处理
FANH: RET
5.请在图8-1的基础上,设计一个以中断方式工作的开关式键盘,并编写其中断键处理程序。 答案:
电路图如下:
中断键处理程序:
KINT: LCALL DELAY10 ;调10mS延时取抖
MOV A, P1
ANL A, #0FH
CJNE A, #0FH, KEY1 ;不是抖动转键值判断
SJMP FANH ;是抖动返回
KEY1: MOV A, P1 ;读键值键值处理
JB 0E0H, KEY2
LCALL K1 ;K1键处理
SJMP FANH
KEY2: JB 0E1H, KEY3
LCALL K2 ;K2键处理
SJMP FANH
KEY3: JNB 0E2H, KEY4
LCALL K3 ;K3键处理
SJMP FANH
KEY4: LCALL K4 ;K4键处理
FANH: RETI
6.矩阵式键盘如何实现中断方式?请在图8-4的基础上设计中断式键盘,并编写相应中断处理子程序。
答案:
电路图如下:
中断处理子程序:
KINT: ACALL DELAY10 ;延时消抖
ACALL KS1 ;再次判断有无键按下
JNZ LK2 ;确实有键按下,转列扫描
AJMP KEY_1 颗粒级配;是键抖动,重新扫描
LK2: MOV R2, #0FEH ;首列扫描字
MOV R4, #00H ;首列号
LK4: MOV DPTR, #7F01H
MOV A, R2
MOVX @DPTR, A ;列扫描字送PA口
INC DPTR
INC DPTR ;指向PC口
MOVX A, @DPTR ;读入行状态
JB ACC.0, LONE ;第0行有键按下?
MOV A, #00H ;有键按下,行号送A
AJMP LKP ;转键值处理
LONE: JB ACC.1, LTWO ;第1行有键按下?
MOV A, #08H ;有键按下,行号送A
AJMP LKP ;转键值处理
LTWO: JB ACC.2, LTHR ;第2行有键按下?
MOV A, #10H ;有键按下,行号送A
AJMP LKP ;转键值处理
LTHR: JB ACC.3, NEXT ;第3行有键按下?
MOV A, #18H ;有键按下,行号送A
LKP: ADD A, R4 ;键值处理
PUSH ACC
霓虹灯变压器LK3: ACALL KS1 ;判断按键是否释放
JNZ LK3
POP ACC
鸟笼灯 RET
NEXT: INC R4 ;列号加1
MOV A, R2 ;判断是否8列扫描完毕
JNB ACC.7, KND ;扫描完,返回
RL A 天文圆顶;转下列扫描
MOV R2, A
AJMP LK4
KND: AJMP KEY_1
KS1: MOV DPTR, #7F01H ;判断有无键按下子程序
MOV A, #00H
MOVX @DPTR, A
INC DPTR
INC DPTR
MOVX A, @DPTR
CPL A
ANL A, #0FH
RET
DELAY12: MOV R7, #18H ;延时12ms子程序
制作智能卡TM: MOV R6, #0FFH
TM6: DJNZ R6, TM6
DJNZ R7, TM
RETI
7.状态或数码显示时,对LED的驱动可采用低电平驱动,也可以采用高电平驱动,二者各有什么特点?
答案:
高电平驱动要采用共阴极数码管,必须外接上拉电阻;低电平驱动要采用共阳极数码管,电源效率相对较高。
8.用DAC0832进行D/A转换时,当输出电压的范围在0~5V时,每变化一个二进制数其输出电压跳变约20mV,即输出是锯齿状的,采取何种措施可使输出信号比较平滑?
答案:
两种方法: (1)可以计算移动平均值;
(2)可以设计滤波器的办法。
9.当系统的主频为6MHz时,请计算图8-18中DAC0832产生锯齿波信号的周期。
答案:
T=2μs×8×256=4096μs
10.请编写图8-18中用DAC0832产生三角波的应用程序。
答案:
START: MOV DPTR, #7FFFH
MOV A, #00H
LOOP: MOVX @DPTR, A
INC A
CJNE A,#0FFH,L1
L2: DEC A
MOVX @DPTR,A
CJNE A, #00H, L2
L1: AJMP LOOP
11.对图8-25的A/D转换电路,若采用中断方式,请编写相应程序。
答案:
在硬件电路上,应当将EOC引脚接到单片机的外部中断引脚上面,如;
初始化程序:
MAIN: SETB IT1
SETB EA
SETB EX1
MOV R1,#data ;R1指向数据存储区首地址
MOV DPTR,#7FF8H ;DPTR指向通道0
MOV R7,#08H ;通道数8
LOOP: MOVX @DPTR,A ;启动A/D转换
SJMP $
;中断服务程序:
PINT1: MOVX A,@DPTR ;转换结果读入累加器A
MOV @R1,A ;存储数据
INC DPTR ;修改指针
INC R1
RETI
12.当图8-25的ADC0809对8路模拟信号进行A/D转换时,请编写用查询方式工作的采样程序,8路采样值存放在30H~37H单元。