找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1522|回复: 0
打印 上一主题 下一主题
收起左侧

Keyboard_Array单片机汇编语言源码与仿真

[复制链接]
跳转到指定楼层
楼主
单片机Keyboard仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


键盘仿真汇编程序
  1.          WR273        EQU        8000H
  2.         RD244        EQU        8000H
  3.         DULA        EQU        P2.0
  4.         WELA        EQU        P2.1
  5.         ORG        0000H
  6.         AJMP        START
  7.         ORG        0030H
  8. START:        MOV        70H,#0BFH
  9.         MOV        71H,#0BFH
  10.         MOV        72H,#0BFH
  11.         MOV        73H,#0BFH
  12. LOOP1:        LCALL        DISP
  13.         LCALL        KEY        ;调用子程序KEY,得到所按下的按键编号值,存在RAM的7FH单元中      
  14.         MOV        A,7FH
  15.         MOV        DPTR,#TABLE
  16.         MOVC        A,@A+DPTR        ;将该键盘编号转换为共阳极段码   
  17.         MOV        73H,72H
  18.         MOV        72H,71H
  19.         MOV        71H,70H
  20.         MOV        70H,A                ;移位显示
  21.         LJMP        LOOP1

  22. ;--------键盘扫描子程序--------------  
  23. KEY:        MOV        R7,#00H                ;R7存放键盘的列号  
  24.         MOV        A,#00H
  25.         MOV        B,#0EH
  26. KEY1:        NOP
  27.         ORL        A,B
  28.         MOV        DPTR,#WR273
  29.         MOVX        @DPTR,A                ;送扫描信号,扫描第一列   
  30.         NOP
  31.         NOP
  32.         NOP
  33.         NOP
  34.         MOV        DPTR,#RD244
  35.         MOVX        A,@DPTR
  36.         ANL        A,#0FH                ;收到的数据只保留低4位   
  37.         CJNE        A,#0FH,KEY2        ;若读到的数据低4位不全为1,则表示有键按下,转往KEY2     
  38.         INC        R7
  39.         SETB        C
  40.         MOV        A,B
  41.         RLC        A
  42.         ANL        A,#0FH                ;此时A中低4位为1101,作为扫描下一列的输入   
  43.         CJNE        A,#0FH,KEY0
  44.         MOV        A,#0EH                ;若扫描完4列,均无键按下,则A的低4位装入1110,R7装入0,重新开始扫描      
  45.         MOV        R7,#00H
  46. KEY0:        MOV        B,A
  47.         SJMP        KEY1
  48. KEY2:   CPL        A
  49.         ANL        A,#0FH
  50.         JNB        ACC.0,KEY6
  51.         MOV        A,#00H
  52.         SJMP        KEY9
  53. KEY6:   JNB        ACC.1,KEY7
  54.         MOV        A,#01H
  55.         SJMP        KEY9
  56. KEY7:   JNB        ACC.2,KEY8
  57.         MOV        A,#02H
  58.         SJMP        KEY9
  59. KEY8:   MOV        A,#03H                ;KEY2-KEY8确定该列上哪一行的按键被按下,行号最终存放在A中      
  60. KEY9:   XCH        A,R7
  61.         MOV        B,#04H
  62.         MUL        AB
  63.         ADD        A,R7                ;列号*4+行号得到键值,键值布局与电路结构和扫描顺序有关      
  64.         MOV        DPTR,#KTAB1
  65.         MOVC        A,@A+DPTR        ;将键值转换为我为键盘编的号  
  66.         MOV        7FH,A                ;最终得到的键号存入RAM的7FH单元   
  67. KEYUP:  MOV        DPTR,#RD244
  68.         MOVX        A,@DPTR
  69.         ANL        A,#0FH
  70.         CJNE        A,#0FH,KEYUP
  71.         RET
  72. ;-----扫描结果与键盘编号的对应-------------
  73. KTAB1:        DB 03H,07H,0BH,0FH
  74.         DB 02H,06H,0AH,0EH
  75.         DB 01H,05H,09H,0DH
  76.         DB 00H,04H,08H,0CH
  77. ;-----数码管显示子程序---------------------
  78. DISP:        MOV A,70H                ;将RAM中70H-73H单元中的数据显示在对应的数码管上     
  79.         MOV DPTR,#0800H
  80.         MOVX @DPTR,A
  81.         MOV A,71H
  82.         MOV DPTR,#1000H
  83.         MOVX @DPTR,A
  84.         MOV A,72H
  85.         MOV DPTR,#2000H
  86.         MOVX @DPTR,A
  87.         MOV A,73H
  88.         MOV DPTR,#4000H
  89.         MOVX @DPTR,A
  90.         RET
  91. ;-----共阳极段代码-------------------------  
  92. TABLE:        DB 0C0H,0F9H,0A4H,0B0H, 99H,92H,82H,0F8H,80H;0-8
  93.         DB 90H, 88H, 83H,0C6H,0A1H,86H,8EH
  94.         END
复制代码



全部资料51hei下载地址:
Keyboard_Array.rar (64.82 KB, 下载次数: 6)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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