微机实验:显示和键盘

单片机实验

27人已加入

描述

微机实验:显示和键盘

实验目的

1、熟悉显示和键盘接口的线路设计和工作原理。

2、掌握显示和键盘子程序的程序设计和调试方法。

(一)动态显示

图4-1 LED动态显示接口

图4-1示实验板中显示部分线路。6位共阴极LED动态显示;8155 PB口提供字形码,决定了显示的字形;PA口提供位选码(扫描字),决定了哪一位发亮。动态显示就是一位一位地轮流点亮LED,当某位LED点亮时输入相应于该位的被显示字形。虽然实际上是各位轮显示,但速度很快,所以感觉上是6位LED同时显示。

在设计显示程序时,通常在片内RAM开辟一组显示缓冲区,专用于存放待显示的数据。本实验中,显示缓冲区选用2A~2FH六个单元,依次存放数据的高位到低位。

显示子程序的程序框图如图4-2示,程序如下:

 

ORG  0300H

    DISP:

MOV  R0, #2AH

;R0指向显示缓冲首址

MOV  R1, #0FEH

;R1指向位选初值,点亮最高位

MOV  DPTR, #0B001A

;DPTR指向PA口

     DLP:

INC  DPTR

;指向PB口

MOV  A, @R0

;取显示数据

ADD  A, #10H

;加偏移量

MOVC  A, @A+PC

;取字型码

MOVX  @DPTR, A

;B口输出字型

MOV  DPTR, #0B001A

;指向PA口

MOV  A, R1

MOVX  @DPTR, A

;A口输出字位

ACALL  DIMS

;延时

  

RL  A

;字位左移一位

MOV  R1, A

INC  R0

;指向下一位显示缓冲

CJNE  R0, #30H, DLP

;6位是否结束?

RET

     DB:

3FH,06H,5BH,4FH

字形码0,1,2,3

66H,6DH,7DH,07H

4,5,6,7,8

7FH,6FH,77H,7CH

8,9,A,B,

39H,5EH,79H,71H

C,D,E,F

73H,40H,58H,00H

P,-,L,“灭”

BFH,86H,DBH,CFH

E6H,EDH,FDH,87H

FFH,EFH,77H   

ORG  0350H

    DIMS:

MOV  R7,#02H

;延时2ms

      DL:

MOV  R6,#0FFH

     DL1:

DJNZ  R6,DL1

DJNZ  R7,DL

RET

子程序调试:

1、仿真器的仿真头插入实验板CPU(注意方向不能插错)。仿真器和实验板接5V电流(电流极性绝对不能接反)。

2、输入程序。

3、利用仿真器在显示缓冲2A~2FH内设置某一个显示内容(例如,01H、02H、03H、10H、11H、14H)。

4、设置8155命令字,口地址0B000H,命令字03H,A、B、口输出,C口输入。

5、单步执行显示子程序,可清楚地看到显示的执行过程。

6、在RET指令处设置断点后,继续执行子程序。

(二)键盘接口

图 4-3 行列式键盘

图4-3示实验板中键盘接口电路。采用行列式结构,共2行6列,对应于12个键盘,每个分配一个键号,依次为0~B。由图显见,任一个键的键号=该行的首键号+列号。

例如;键号A=行首键号6+列号4。所以,只要确定被按下键的行、列位置,就能确定该键的键号。

键盘扫描程序的框图如图4-4示。它具有以下功能:

1、判别有无键按下:从PA口输出扫描字00H,读PC口。若无键按下,则PCO、PC1均为1;若有键按下,则PC0或PC1为1。

2、消除键抖动;在某键按下后延时5~10ms,再判别键状态。如果键已放开,认为属于抖动,是误动作;如果键仍闭合,则表示有一个稳定的键输入。

3、判别键号:由PA0~PA5对列线发出扫描字,先后次序是FEH、FDH、FBH、F7H、EFH、DFH(0位右移)。每次列扫描时,检查行线输入,先查PC0,再查PC1。若行线输入0,表示该行上有键按下。根据此时的行、列号,就能计算出按下键的键号。

1、 按键一次,仅响应一次。为此,必须等待到键释放以后,再取键号,存于A中。

参考程序:

 

ORG  03A0H

 KEY:

LCALL  KS1

;判断有无键闭合

JNZ  KEYA

SJMP  KND

;无键闭合,则退出

KEYA:

LCALL  T12MS

;延时12ms

LCALL  KS1

JNZ  LK1

;键仍闭合,转

SJMP  KND

;键已放开,是抖动

LK1:

MOV  R4, #00H

;列号寄存器R4置0

MOV  R2, #FEH

;0列扫描字

LK2:

MOV  DPTR, #0B001H

;指向PA口

MOV  A, R2

MOVX  @DPTR, A

;PA口输出扫描字

INC  DPTR

INC  DPTR

;指向PC口

MOVX  A, @DPTR

;读PC

JB  ACC.0, LONE

;PC0=1,0行无键按下,转判下一行

MOV  A, #00H

;0行有键按下,行首键号00H送A

SJMP  LKP

LONE:

JB  ACC.1, NEXT

;PC1=1,1行无键按下,转判下一列

MOV  A, #06H

;1行有键按下,行首键号06H

 LKP:

ADD  A ,R4

;计算键号

PUSH  ACC

;键号暂存

 LK3:

LCALL  KS1

;等待键释放

JNZ   LK3

POP  ACC

;键已释放,键号送A

 KND:

RET

NEXT:

INC  R4

;列号+1

  

MOV  A, R2

;扫描到最后一列?

JNB  ACC.5, KND

;是,转KND

RL  A

;扫描字0位左移一位

MOV  R2, A

SJMP  LK2

;扫描下一列

  KS1:

MOV  DPTR, #0B001H

;判断有无键闭合

MOV  A, #00H

MOVX  @DPTR, A

;PA口输出扫描字00H

INC  DPTR

INC  DPTR

MOVX  A,  @DPTR

;读PC口

CPL  A

  

ANL  A, #03H

;A=0,无键闭合

RET

T12MS:

MOV  R7, #18H

;延时12ms

   TM:

MOV  R6, #FFH

  TM6:

DJNZ  R6, TM6

DJNZ  R7, TM

RET

子程序调试:

1、输入键盘子程序。

2、设置8255命令字(03H)。

3、在标号KND处设置断点,在按下某一键的同时,连续执行子程序。然后检查A中键号是否正确。

(三)显示和键盘演示实验

在8031应用系统的总体设计中,为了保证显示和键扫描程序的正常工作,必须对8155进行初始化设置。下面的演示程序可作为一个简单的实例。该程序的功能是:上电后数码管全部显示“0”。按下任一键后,数码管显示其键号,而且,显示位置跟踪按键的先后顺序。该程序固化到实验板的EPROM中后,实验板能够脱离仿真器而独立运行。

 

ORG  0000H

LJMP  MAIN

ORG  0A00H

MAIN:

MOV  SP, #60H

;设置堆栈

MOV  DPTR, #B000H

;8155初始化

MOV  A, #03H

;A、B口输出,C口输入

MOVX  @DPTR, A

MOV  2AH, #00H

;显示缓冲区置初始00

MOV  2BH, #00H

MOV  2CH, #00H

MOV  2DH, #00H

MOV  2EH, #00H

MOV  2FH, #00H

 MP0:

MOV  40H, #2AH

;40H显示缓冲指针

 MP1:

LCALL  DISP

;调用显示

0A21

LCALL  KS1

;判有键闭合?

0A24

JZ  MP1

;无键闭合,转MP1

0A26

LCALL  KEYA

;有键闭合,求键号,存A

MOV  R1, 40H

;键号送显示缓冲区

MOV  @R1, A

  

INC  40H

;修改显示指针

MOV  A, 40H

CJNE  A, #30H, MP1

;按键不到6次,转MP1

SJMP  MP0

;按键次(6位显示满)后从最

  左位开始重新显示

END

实验步骤:

1、输入程序(包括主程序MAIN和子程序DISP、KEY等)。

2、全速运行程序。按下任一键,监视显示,检查是否符合设计。

3、如发现不正常,可利用单步法或断点法,进行测试。

思考题:

1、动态显示器的亮度和哪些因素有关?

2、动态显示器有什么优缺点?

3、动态显示线路图4-1中,如将PA0接至数码管最低位,PA5接至数码管最高位,程序将如何修改?

4、动态显示线路中,如将数码管改为共阳极,其余不变,程序将如何修改?

5、8031应用系统设计中,地址0000H这一句为什么一定要用?

6、主程序MAIN最后一句SJMP MP0,如改为SJMP $,将产生什么后果?

7、将主程序MAIN中地址为0A21H~0A26H的三句删掉,改为LCALL KEY,将产生什么后果?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分