ihyni2004 发表于 2006-6-29 10:14:34

[下载]8255扫描键盘、显示实验

8255扫描键盘、显示实验

一.实验要求
利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的七段数码管上。8255PA口做键盘输入线,PB口作扫描线。

二.实验目的

1.掌握8255编程方法。

2.掌握扫描键盘和显示的编程方法。

三.实验电路及连线


四.实验说明

在PA口与PB口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本实验采用8×2的阵列,共可按16个键。显示部分由8279控制,由7407驱动8位数码管显示。

五.实验程序框图

源代码:
D8255   EQU   8506H          ;8255状态/数据口地址
D8255AEQU   8500H          ;8255 PA口地址
D8255BEQU   8502H          ;8255 PB口地址
Z8279   EQU   8701H          ;8279状态口地址
D8279   EQU   8700H          ;8279数据口地址
DISPTREQU   08H             ;当前显示位置
KEYVALEQU   09H             ;读到的键码
      ORG   0000H
      LJMP    START
      ORG   0040H
START:
      MOV   SP,#60H
      LCALL   DELAY         ;延时
      MOV   DISPTR,#30H   ;显示缓冲区头指针
      MOV   DPTR,#D8255
      MOV   A,#90H          ;置8255状态
                              ;方式0,PB,PC口输出,PA口输入
      MOVX    @DPTR,A
      MOV   DPTR,#Z8279   ;置8279命令字
      MOV   A,#0D3H
   MOVX    @DPTR,A         ;清LED显示
      MOV   A,#00H
      MOVX    @DPTR,A
      MOV   A,#38H
      MOVX    @DPTR,A
      MOV   A,#0D1H
KB_DIS:
      LCALL   RD_KB         ;读键盘
      MOV   A,#0FFH
      CJNE    A,KEYVAL,DISBUF ;判读到键
      SJMP    KB_DIS          ;没有则继续读键
DISBUF:
      LCALL   DISP            ;把键移入显存
      LCALL   DELAY         ;延时消抖
      LCALL   DELAY
      SJMP    KB_DIS
DISP:                           ;显存依次前移
      MOV   R1,#31H         ;在最后加入新键值
MOVE:
      MOV   A,@R1
      DEC   R1
      MOV   @R1,A
      INC   R1
      INC   R1
      CJNE    R1,#38H,MOVE
      MOV   37H,KEYVAL
      MOV   KEYVAL,#0FFH
      MOV   DPTR,#Z8279
      MOV   A,#90H
      MOVX    @DPTR,A
      MOV   R0,#08H
      MOV   R1,#30H
      MOV   DPTR,#D8279
LP:   MOV   A,@R1
      MOVX    @DPTR,A
      INC   R1
      DJNZ    R0,LP
      RET
RD_KB:                        ;键盘扫描
      MOV   A,#02H          ;扫描第一行
      MOV   DPTR,#D8255B
      MOVX    @DPTR,A
      MOV   DPTR,#D8255A
      MOVX    A,@DPTR
      MOV   R1,#00H
      CJNE    A,#0FFH,KEYCAL;判键是否按下
      MOV   A,#01H          ;扫描第二行
      MOV   DPTR,#D8255B
      MOVX    @DPTR,A
      MOV   DPTR,#D8255A
      MOVX    A,@DPTR
      MOV   R1,#08H
      CJNE    A,#0FFH,KEYCAL
      SJMP    NOKEY         ;无键按下
KEYCAL:                         ;计算键码
      MOV   R0,#08H
SHIFT:
      RRC   A
      JNC   CALC
      INC   R1
      DJNZ    R0,SHIFT
CALC:                           ;换算显示码
      MOV   DPTR,#DL_DAT
      MOV   A,R1
      MOVC    A,@A+DPTR
      MOV   KEYVAL,A
      RET
NOKEY:MOV   KEYVAL,#0FFH    ;返回无键标志
      RET
DELAY:MOV   R0,#0H          ;延时子程序
DELAY1: MOV   R1,#0H
      DJNZ    R1,$
      DJNZ    R0,DELAY1
      RET
DL_DAT: DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7
      DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F
      END

页: [1]
查看完整版本: [下载]8255扫描键盘、显示实验