1、1第 10 章 AT89S51 与键盘、显示器、 拨盘、打印机的接口设计参考答案1. 答:A MAX7219是专用显示器芯片,不用于键盘;B错:CH451 芯片也可用于控制键盘;C对: BUSY信号可作为查询信号或中断请求信号使用,但此时信号 不用;ACKE错:LED 数码管的字型码是可以变的,例如表 10-1中 的 “a”段对应段码字节的最高位。“dp”段对应段码字节的最低位,字型码就改变了。2. 答:在按键的闭合和断开过程中,由于开关的机械特性,导致了按键抖动的产生。如果不消除按键的机械抖动,按键的状态读取将有可能出现错误。消除按键抖动一般是采用软件或硬件去抖。软件去抖的原理:在第一次检测
2、到有键按下时,该键所对应的行线是为低电平,执行一端延时 10ms的子程序后,确认该行线电平是否仍然为低电平,如果仍为低电平,则确认为该行确实有键按下。3. 答:静态显示时,数据是分开送到每一位 LED上的。而动态显示则是数据是同时送到每一个 LED上,再根据位选线来确定是哪一位 LED被显示。静态显示亮度很高,但口线占用较多。动态显示口线占用较少,适合用在显示位数较多的场合。4. 答:80H(共阴极) ;7FH(共阳极) 。5. 答:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V 上,无按键按下时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与
3、此行线相连的列线的电平决定。列线的电平如果为低,则行线电平为低;列线的电平如果为高,则行线的电平亦为高。将行、列线信号配合起来并做适当的处理,才能确定闭合键的位置。6. 答:先对 P1口高四位送低电平,读取 P1口低四位的值;再对 P1口低四位送低电平,读取 P1口高四位的值,将两次读到的值组合在一起就得到了按键的特征码,在根据特征码查找键值。KEYIN: MOV P1,#0FH ;反转读键MOV A,P1ANL A,#0FHMOV B,AMOV P1,#0F0HMOV A,P1ANL A,#0F0H2ORL A,BCJNE A,#0FFH,KEYIN1RET ;未按键KEYIN1: MOVB
4、,A ;暂存特征码MOV DPTR,#KEYCOD ;指向特征码表MOV R3,#0FFH ;顺序码初始化KEYIN2: INC R3MOV A,R3MOVC A,A+DPTRCJNE A,B,KEYIN3MOV A,R3 ;找到,取顺序码RETKEYIN3: CJNE A,#0FFH,KEYIN2 ;未完,再查RET ;已查完,未找到,以未按键处理KEYCOD: DB 0E7H,0EBH,0EDH,0EEH ;特征码表DB 0D7H,0DBH,0DDH,0DEHDB 0B7H,0BBH,0BDH,0BEHDB 77H,7BH,7DH,7EH7. 答:(1)编程扫描方式:当单片机空闲时,才调用
5、键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。 (2)定时扫描工作方式:单片机对键盘的扫描也可用定时扫描方式,即每隔一定的时间对键盘扫描一次。 (3)中断工作方式:只有在键盘有键按下时,才执行键盘扫描程序并执行该按键功能程序,如果无键按下,单片机将不理睬键盘。8. 答:DB0-DB7:数据线,单向传输,由单片机输入给打印机。STB(STROBE):数据选通信号。在该信号的上升沿,数据线上的 8位并行数据被打印机读入机内锁存。BUSY:打印机忙状态信号。当该信号有效(高电平)时,表示打印机正忙于处理数据。此时,单片机不得使 STB信号有效,向打印机送入新的
6、数据。ACK:打印机的应答信号。低电平有效,表明打印机已取走数据线上的数据。ERR:出错信号。当送入打印机的命令格式出错时,打印机立即打印 1行出错信息,提示出错。在打印出错信息之前。该信号线出现一个负脉冲,脉冲宽度为 30us。单片机与打印机相连时,分为直接相连(图 10-27)和通过扩展的并行 I/O口 82C55连3接(图 10-28) 。直接相连时(图 10-27) ,打印机在输入电路中有锁存器,在输出电路中有三态门控制, 。没有读、写信号,只有握手线 、BUSY(或 ) ,用一根地址线来控制写STBACK选通信号 STB和读取 BUSY引脚状态。图 10-28所示为通过扩展的并行 I
7、/O口 82C55连接的打印机接口电路。采用查询法,即通过读与 82C55的 PC0脚的相连的 BUSY状态,来判断送给打印机的一个字节的数据是否处理完毕。也可用中断法(BUSY 直接与单片机的 引脚INT0相连) 。9答:本程序采用外部中断来进行数据打印,先打印一个数据,当 BUSY线从高电平变成低电平时,在打印下一个数据ORG 0000HLJMP MAINORG 0003HLJMP INORG 0030HMAIN: SETB EX0 ;允许外部中断SETB IT0SETB EAMOV R0,#7FH ;控制口地址MOV A,#81H ;控制字MOVX R0,AMOV R1,#20H ;数据区首地址MOV R2,#19 ;计数器MOV A,R1 ;打印内容MOV R0,#7CH ;A 口地址MOVX R0,AMOV R0,#7FHMOV A,#0EHMOVX RO,A ;PC70MOV A,#0FHMOVX R0,A ;PC7=1SJMP $4IN: DJNZ R2,EX ;20 个数据都结束了吗?INC R1 ;指向下一个数据MOV A,R1MOV R0,#7CHMOVX R0,AMOV R0,#7FHMOV A,#0EHMOVX RO,AMOV A,#0FHMOVX R0,AEX: RETI