找回密码
 立即注册

QQ登录

只需一步,快速开始

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

矩阵键盘按键显示数字1-30汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-27 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. ;=================================================================
  2. ;程序编写人:兰建
  3. ;编写地点:51hei培训机构
  4. ;时间:6月4日上午星期四
  5. ;功能:矩阵键盘在P1口,利用反转法读取键值,16个独立按键中的1-15号
  6. ;按键均有两个功能,定义16号按键为功能键,按下不显示任何数字,当按
  7. ;住这个案件不松,再按下1-15号按键时,数码显示16-30.
  8. ;=======================开始初始化================================
  9.     SHUCHU      EQU   P0             ;定义P0口为输出口
  10. PIANXUAN EQU   P2    ;设置P2.0为片选
  11. JIANPAN     EQU   P1    ;键盘接口
  12. ;========================程序开始================================
  13.                 ORG   00H            ;程序开始
  14.                 JMP   START          ;跳到START
  15.                 ORG   0030H          ;入口地址              
  16.     START:
  17.           MOV   PIANXUAN,#05  ;片选
  18.           MOV   SHUCHU,#0FFH  ;上电默认不显示
  19.     MOV   R0,#00H   ;顺序码清零
  20.     MOV   30H,#00H   ;键值存储单元清零
  21.      LOOP:
  22.           MOV   JIANPAN,#0F0H  ;把P1口高四位设为输入,同时把低四位设为0
  23.           MOV   A,JIANPAN   ;读P1口高四位列线
  24.     ANL   A,#0F0H   ;屏蔽低四位
  25.     MOV   B,A    ;保存高四位列线
  26.     MOV   JIANPAN,#0FH  ;把P1口低四位设为输入,同时把高四位设为0
  27.     MOV   A,JIANPAN   ;读取P1口低四位行线
  28.     ANL   A,#0FH   ;屏蔽高四位
  29.     ORL   A,B    ;列线和行线合并
  30.     CJNE  A,#0FFH,KEY  ;判断是否右键按下,右则跳到按键处理
  31.     JMP   LOOP    ;没有返回继续查询  
  32.    KEY:
  33.        MOV   30H,A    ;保存键值
  34.        MOV   DPTR,#TAB1  ;指向键值表
  35.     MOV   R0,#0FFH   ;FF+1=0所以R0里面放FF,既可以显示0
  36.     L1:
  37.        INC   R0    ;顺序码加1
  38.        MOV   A,R0    ;
  39.     MOVC  A,@A+DPTR   ;查键值表
  40.     CJNE  A,#77H,L2    ;判断是否键值为表格最后一个
  41.           JMP   LOOP    ;相等表示没按键按下或者查到最后了,返回重新查询  
  42.     L2:
  43.        CJNE   A,30H,L1  
  44.     CALL   JISUAN   ;计算处理分离十位和个位
  45.     CALL   DISPLAY   ;动态显示十位和个位
  46.        JMP    LOOP    ;返回、重新查询
  47. ;========================计算子程序=========================
  48. ;输入:30H
  49. ;输出:"A和B"
  50. ;实现的功能:把30H的数据的十位和个位分离出来
  51. ;============================================================
  52.              JISUAN:INC   R0
  53.            MOV   A,R0         ;数据放在A中  
  54.         MOV   B,#10        ;除数放在B中
  55.         DIV   AB           ;商放在A中,余数放在B中
  56.         RET               
  57. ;========================显示子程序==========================
  58. ;输入:"A"
  59. ;输出:"P0口"
  60. ;实现的功能:把A的数输出到P0口显示,十位和个位分开显示
  61. ;============================================================
  62.          DISPLAY:MOV   DPTR,#TAB
  63.              MOVC  A,@A+DPTR
  64.        MOV   SHUCHU,A         ;显示十位
  65.        MOV   PIANXUAN,#02H    ;片选
  66.                  CALL  DELAY
  67.        MOV   SHUCHU,#0FFH
  68.        MOV   A,B              
  69.        MOVC   A,@A+DPTR
  70.          MOV   SHUCHU,A         ;显示个位
  71.        MOV   PIANXUAN,#03H    ;片选
  72.        CALL  DELAY            ;延时
  73.        MOV   SHUCHU,#0FFH
  74.                  RET
  75. ;========================延时程序============================
  76. ;输入;无
  77. ;输出: 无
  78. ;实现的功能:延时一段时间
  79. ;============================================================
  80.           DELAY:
  81.           MOV  R6,#80
  82.        L7:MOV  R5,#80
  83.           DJNZ R5,$
  84.           DJNZ R6,L7
  85.     RET
  86. ;=======================共阳查表数据==============================
  87.       TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H, 82H,0F8H,80H,90H  ;0-9共阳极数据   
  88. ;=======================共阳查表数据==============================
  89.            TAB1:DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
  90.           DB 0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H             ;反转描码表
  91.                 DB 66H,56H,36H,76H,65H,55H,35H,75H,63H
  92.     DB 53H,33H,73H,67H,57H,37H,77H
  93. ;=========================程序结束================================
  94.           END
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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