标题: 51单片机实现矩阵中断式键盘值显示汇编语言程序 [打印本页]

作者: xuxuebo001    时间: 2019-6-6 09:12
标题: 51单片机实现矩阵中断式键盘值显示汇编语言程序

利用51单片机实现4*4矩阵键盘扫描,并摁下相应键时在LED上显示相应键值,通过两位动态显示。通过中断方式实现。采用汇编语言。

单片机源程序如下:
  1. ORG  0000H
  2.   LJMP MAIN
  3.   ORG  0003H
  4.   LJMP INT
  5.   ORG  0040H
  6. MAIN:MOV SP,#70H
  7.     MOV 30h,#00h
  8.     SETB EX0
  9.     SETB IT0
  10.     SETB EA
  11.     MOV DPTR,#TAB
  12.     MOV P2,#0F0H;p2口高四位置1低四位置0
  13. INT:PUSH ACC
  14.    MOV P2,#0F0H
  15.    MOV A,P2;a为11110000
  16.    JNB ACC.4,E1;键盘查询,不为1跳转,为1顺序 查询p4口 下同
  17.    JNB ACC.5,E2
  18.    JNB ACC.6,E3
  19.    JNB ACC.7,E4
  20.    SETB EX0
  21.    RETI
  22. E1: MOV 20h,#0 ;按键在哪一行,第一行加0
  23.    LJMP KEYH
  24. E2: MOV 20h,#4 ;第二行家4
  25.    LJMP KEYH
  26. E3: MOV 20H,#8 ;第三行加8
  27.    LJMP KEYH
  28. E4: MOV 20h,#12;第四行加12
  29.    LJMP KEYH
  30. KEYH:
  31. MOV P2,#0FH
  32. MOV A,P2
  33.     JNB ACC.0,DO
  34.     JNB ACC.1,D1
  35.     JNB ACC.2,D2
  36.     JNB ACC.3,D3
  37.     RETI
  38. DO:  MOV A,#0 ;第一列加0,下同
  39.     ADD A,20H
  40. DA A
  41.     MOV 30H,A
  42.     SJMP EXIT
  43. D1:  MOV A,#1
  44.     ADD A,20H
  45. DA A
  46.     mov 30h,a
  47.     Sjmp EXIT
  48. D2:  MOV A,#2
  49.     ADD A,20H
  50. DA A
  51.     MOV 30H,A
  52.     SJMP EXIT
  53. D3:  MOV A,#3
  54.     ADD A,20H
  55. DA A
  56.     MOV 30H,A
  57. EXIT:
  58.     MOV A,30H
  59. ANL A,#0FH ;a的高四位清零留下个位
  60.     MOVC A,@A+DPTR
  61. CLR P1.1 ;位选
  62. SETB P1.0
  63.     MOV P0,A
  64. MOV A,#0FFH;p0清零
  65. MOV P0,A ;p0清零
  66. MOV A,30H
  67. ANL A,#0F0H
  68. SWAP A;留下十位
  69.     MOVC A,@A+DPTR
  70. CLR P1.0
  71. SETB P1.1
  72.     MOV P0,A
  73. MOV A,#0FFH
  74. MOV P0,A
  75. LJMP INT
  76. DELAY:MOV R0,#2;延时
  77. D:    MOV R1,#25
  78.      DJNZ R1,$
  79.      DJNZ R0,D
  80.      RET
  81. TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
  82.    END
复制代码







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1