找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2144|回复: 0
收起左侧

单片机键盘扫描显示汇编源码

[复制链接]
ID:568296 发表于 2019-6-20 20:47 | 显示全部楼层 |阅读模式
这次做的单片机 键盘扫描显示汇编源码
一、实验目的
  1. ORG 0000H
  2. AJMP MAIN
  3. LEDMAP:
  4. DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
  5. DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
  6. ;  八段管显示码
  7. Delay: MOV R6, #01H;  延时子程序
  8. Delay1:MOV R7, #00H
  9. Delay2:DJNZ R7, Delay2
  10. DJNZ R6, Delay1
  11. RET
  12. DisplayLED:
  13. MOV R0, #60H
  14. MOV R1, #06H ; 共 共 6  个八段管
  15. MOV R2, #00100000B ;  从左边开始显示
  16. Loop:
  17. MOV DPTR, #8002H
  18. MOV A, #00H
  19. MOVX @DPTR, A;  关所有八段管
  20. MOV A, @R0
  21. MOV DPTR, #8004H ;  段控制口
  22. MOVX @DPTR, A
  23. MOV DPTR, #8002H ;  位控制口
  24. MOV A, R2
  25. MOVX @DPTR,A ; 显示一位八段管
  26. ACALL Delay
  27. MOV A, R2 ;  显示下一位
  28. RR A
  29. MOV R2,A
  30. INC R0
  31. DJNZ R1, Loop
  32. RET
  33. TestKey:
  34. MOV DPTR, #8002H
  35. MOV A, #00H
  36. MOVX @DPTR, A;  输出线置为 0
  37. MOV DPTR, #8001H
  38. MOVX A, @DPTR ;  读入键状态
  39. CPL A
  40. ANL A, #0FH ;  高四位不用
  41. RET
  42. KeyTable: ;  键码定义
  43. DB 16H, 15H, 14H, 0FFH
  44. DB 13H, 12H, 11H, 10H
  45. DB 0DH, 0CH, 0BH, 0AH
  46. DB 0EH, 03H, 06H, 09H
  47. DB 0FH, 02H, 05H, 08H
  48. DB 00H, 01H, 04H, 07H
  49. GetKey:
  50. MOV DPTR, #8002H
  51. MOV R1, #00100000B
  52. MOV R2, #06H
  53. KLoop:
  54. MOV A, R1 ;  找出键所在列
  55. CPL A
  56. MOV DPTR, #8002H
  57. MOVX @DPTR, A
  58. CPL A
  59. RR A
  60. MOV R1,A ;  下一列
  61. MOV DPTR, #8001H
  62. MOVX A, @DPTR
  63. CPL A
  64. ANL A, #0FH
  65. JNZ Goon1 ;  该列有键入
  66. DJNZ R2, KLoop
  67. MOV R2, #0FFH ;  没有键按下,
  68. 回 返回 0FFH
  69. AJMP Exit
  70. Goon1:
  71. MOV R1,A; 值 键值 = 列 列 *4 + 行 行
  72. MOV A, R2
  73. DEC A
  74. RL A
  75. RL A
  76. MOV R2, A ; R2 = (R2-1)*4
  77. MOV A, R1 ; R1  中为读入的行值
  78. MOV R1, #04H
  79. LoopC:
  80. RRC A ;  移位找出所在行
  81. JC Exit
  82. INC R2 ; R2 =R2+  行值
  83. DJNZ R1, LoopC
  84. Exit:
  85. MOV A, R2 ;  取出键码
  86. MOV DPTR, #KeyTable
  87. MOVC A, @A+DPTR
  88. MOV R2, A
  89. WaitRelease:
  90. MOV DPTR, #8002H ;  等键释放
  91. CLR A
  92. ACALL TestKey
  93. JNZ WaitRelease
  94. MOV A, R2
  95. RET
  96. MAIN:
  97. MOV 60H, #0FFH ; 示 显示 8.8.8.8.
  98. MOV 61H, #0FFH
  99. MOV 62H, #0FFH
  100. MOV 63H, #0FFH
  101. MOV 64H, #00H
  102. MOV 65H, #00H
  103. MLoop: ACALL DisplayLED ;  显示
  104. ACALL TestKey ;  有键入?
  105. JZ MLoop ;  无键入,  继续显示
  106. ACALL GetKey ;  读入键码
  107. ANL A, #0FH ;  显示键码
  108. MOV DPTR, #LEDMap
  109. MOVC A, @A+DPTR
  110. MOV 65H,A
  111. LJMP MLoop
  112. END
复制代码


1 .掌握键盘和显示器的接口方法和编程方法
2 .掌握键盘扫描和数码管显示器的工作原理
二、 实验内容
利用实验仪上的键盘扫描电路和显示电路 , 做一个扫描键盘和数码显示实验 , 把按键
输入的键码在六位数码管上显示出来。实验程序分为三个模块:
① 键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
② 显示模块:将显示单元的内容在显示器上动态显示。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表