8255键盘及显示接口实验 的详细解释

zzn511   2008-6-20 11:32 楼主
  1.假如我输入数字 3 它的整个运作流程?
  感谢!
2.如何根据此程序,编写一个以0位加号判断输入的四位数是否正确
例如(1023  ;1+2=3 结果正确
     1035  ;结果错误)
2要包括截图。。
很是感谢!


STACK SEGMENT STACK
      DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
        MOV DS,AX
        MOV SI,3000H
        MOV AL,00H
        MOV [SI],AL
        MOV [SI+1],AL
        MOV [SI+2],AL
        MOV [SI+3],AL
        MOV DI,3003H
        MOV AL,81H
        OUT 63H,AL
BEGIN: CALL DIS
        CALL CLEAR
        CALL CCSCAN
        JNZ INK1
        JMP BEGIN
INK1:  CALL DIS
        CALL DALLY
        CALL DALLY
        CALL CLEAR
        CALL CCSCAN
        JNZ INK2
        JMP BEGIN
INK2:  MOV CH,0FEH
        MOV CL,00H
    COLUM:MOV AL,CH
          OUT 60H,AL
          IN AL,62H
          TEST AL,01H
          JNZ LONE
          MOV AL,00H
          JMP KCODE
   LONE: TEST AL,02H
         JNZ NEXT
         MOV AL,04H
   KCODE:ADD AL,CL
         CALL PUTBUF
         PUSH AX
   KON:CALL DIS
       CALL CLEAR
       CALL CCSCAN
       JNZ KON
       POP AX
   NEXT:INC CL
        MOV AL,CH
        TEST AL,08H
        JZ KERR
        ROL AL,1
        MOV CH,AL
        JMP COLUM
   KERR: JMP BEGIN
  CCSCAN: MOV AL,00H
         OUT 60H,AL
         IN AL,62H
         NOT AL
         AND AL,03H
         RET
  CLEAR: MOV AL,00H
         OUT 61H,AL
         RET
   DIS:  PUSH AX
         MOV SI,3000H
         MOV DL,0F7H
         MOV AL,DL
   AGAIN:OUT 60H ,AL
         MOV AL,[SI]
         MOV BX,OFFSET TABLE
         AND AX,00FFH
         ADD BX,AX
         MOV AL,[BX]
         OUT 61H,AL
         CALL DALLY
         INC SI
         MOV AL,DL
         TEST AL,01H
         JZ OUT1
         ROR AL,1
         MOV DL,AL
         JMP AGAIN
    OUT1:POP AX
        RET
    DALLY: PUSH CX
          MOV CX,0010H
       T1: MOV AX, 0010H
       T2: DEC AX
           JNZ T2
           LOOP T1
           POP CX
           RET
     PUTBUF:MOV SI,DI
            MOV[SI],AL
            DEC DI
            CMP DI,2FFFH
            JNZ GOBACK
            MOV DI,3003H
     GOBACK:RET
      CODE   ENDS
             END START

回复评论 (3)

1.键盘输入:
一般8255PA口做键盘输入线,PB口作扫描线。可以组成64点阵列,
把按键接在不同的点上,将得到不同的键码,
简单点的话,采用8×2的阵列,共可按16个键。
显示部分
通常由8279控制,由7407驱动8位数码管显示。

  1. TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

这个是LED的7段码,0,1,2,3,4,5,6,7
点赞  2008-6-20 12:25
一个别人调试好的8255程序、希望对你有所帮助。

祝你好运~~


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

  5. D8255 EQU 8506H ;8255状态/数据口地址
  6. D8255A EQU 8500H ;8255 PA口地址
  7. D8255B EQU 8502H ;8255 PB口地址
  8. Z8279 EQU 8701H ;8279状态口地址
  9. D8279 EQU 8700H ;8279数据口地址
  10. DISPTR EQU 08H ;当前显示位置
  11. KEYVAL EQU 09H ;读到的键码
  12. ORG 0000H
  13. LJMP START
  14. ORG 0040H
  15. MAIN:
  16. MOV SP,#60H
  17. LCALL DELAY ;延时
  18. MOV DISPTR,#30H ;显示缓冲区头指针
  19. MOV DPTR,#D8255
  20. MOV A,#90H ;置8255状态
  21. ;方式0,PB,PC口输出,PA口输入
  22. MOVX @DPTR,A
  23. MOV DPTR,#Z8279 ;置8279命令字
  24. MOV A,#0D3H
  25. MOVX @DPTR,A ;清LED显示
  26. MOV A,#00H
  27. MOVX @DPTR,A
  28. MOV A,#38H
  29. MOVX @DPTR,A
  30. MOV A,#0D1H
  31. KB_DIS:
  32. LCALL RD_KB ;读键盘
  33. MOV A,#0FFH
  34. CJNE A,KEYVAL,DISBUF ;判读到键
  35. SJMP KB_DIS ;没有则继续读键
  36. DISBUF:
  37. LCALL DISP ;把键移入显存
  38. LCALL DELAY ;延时消抖
  39. LCALL DELAY
  40. SJMP KB_DIS
  41. DISP: ;显存依次前移
  42. MOV R1,#31H ;在最后加入新键值
  43. MOVE:
  44. MOV A,@R1
  45. DEC R1
  46. MOV @R1,A
  47. INC R1
  48. INC R1
  49. CJNE R1,#38H,MOVE
  50. MOV 37H,KEYVAL
  51. MOV KEYVAL,#0FFH
  52. MOV DPTR,#Z8279
  53. MOV A,#90H
  54. MOVX @DPTR,A
  55. MOV R0,#08H
  56. MOV R1,#30H
  57. MOV DPTR,#D8279
  58. LP: MOV A,@R1
  59. MOVX @DPTR,A
  60. INC R1
  61. DJNZ R0,LP
  62. RET
  63. RD_KB: ;键盘扫描
  64. MOV A,#02H ;扫描第一行
  65. MOV DPTR,#D8255B
  66. MOVX @DPTR,A
  67. MOV DPTR,#D8255A
  68. MOVX A,@DPTR
  69. MOV R1,#00H
  70. CJNE A,#0FFH,KEYCAL ;判键是否按下
  71. MOV A,#01H ;扫描第二行
  72. MOV DPTR,#D8255B
  73. MOVX @DPTR,A
  74. MOV DPTR,#D8255A
  75. MOVX A,@DPTR
  76. MOV R1,#08H
  77. CJNE A,#0FFH,KEYCAL
  78. SJMP NOKEY ;无键按下
  79. KEYCAL: ;计算键码
  80. MOV R0,#08H
  81. SHIFT:
  82. RRC A
  83. JNC CALC
  84. INC R1
  85. DJNZ R0,SHIFT
  86. CALC: ;换算显示码
  87. MOV DPTR,#DL_DAT
  88. MOV A,R1
  89. MOVC A,@A+DPTR
  90. MOV KEYVAL,A
  91. RET
  92. NOKEY: MOV KEYVAL,#0FFH ;返回无键标志
  93. RET
  94. DELAY: MOV R0,#0H ;延时子程序
  95. DELAY1: MOV R1,#0H
  96. DJNZ R1,$
  97. DJNZ R0,DELAY1
  98. RET
  99. DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7
  100. DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F
  101. END



参考:
http://zhidao.baidu.com/question/54173658.html?fr=qrl

http://www.wm15.cn/Article/shiyan/200708/669.html
点赞  2008-6-20 12:27
谢谢楼上的兄弟。
还有谁肯帮忙呢。。。
点赞  2008-6-22 00:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复