找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机动态按键扫描汇编程序

[复制链接]
ID:160649 发表于 2017-1-7 19:35 | 显示全部楼层 |阅读模式
;动态按键扫描程序,必须使用P2口,因为P3口有下载线
;P3.7为蜂鸣器
;P0,P1两个端口的灯共计16个,分别由16个
;按键控制点亮
;--------清端口-------------------------------------
    MOV P0,#0FFH;关灯
    MOV P1,#0FFH;关灯
    CLR P3.7;关蜂鸣器
;---------按钮是否按下识别--------------------------
KAI:MOV P2,#00001111B;横坐标加1,纵坐标加0
    MOV A,P2;将按键值读回到累加器A
    CJNE A,#00001111B,SAO1;判断按键是否按下
    AJMP KAI
;---------读取按键值------------------------------------------
SAO1:MOV B,A;将外部按键数据存入B寄存器,横坐标值
     MOV P2,#11110000B;将纵坐标值传送到P3口
     MOV A,P2;读出纵坐标值
     ORL A,B;将横纵坐标值相加,和存入A中
     MOV 40H,A;将第一次读取的按键值存入到内存40H单元
;---------------------------------------------------------------
     LCALL YAN
;--------二次按键值读取-----------------------------------------
SAO2:MOV P2,#00001111B
     MOV A,P2
     CJNE A,#00001111B,SAO3
     AJMP KAI
;-------------------------------------------------------
SAO3:MOV B,A
     MOV P2,#11110000B
     MOV A,P2
     ORL A,B;再次读取的按键值相加
     MOV 41H,A;将第二次读出的按键值存入41H内存单元
;-----两次读取的值比较确定是否一致----------------------
BIJIAO: CJNE A,40H,KAI
        AJMP BBBB;将第一次与第二次读取的值做比较,看是否一样
;---------将按键值转换为按键号码-----------------------
  PANDUAN:INC R7
          AJMP AAAA
     BBBB:MOV R7,#00D;按键号码
          MOV R6,#16D;需要判断16个按键
     AAAA:MOV A,R7
          MOV DPTR,#TAB;装入按键数据表
          MOVC A,@A+DPTR                  
          CJNE A,40H,CUO
          AJMP ZHIXING
      CUO:DJNZ R6,PANDUAN;按键值判断16次限位
          AJMP KAI
;---------功能执行-------------------------------------
ZHIXING:CJNE R7,#1D,JIAN2
         CPL P0.0  
         LCALL FENG
         LJMP DENG
  JIAN2:CJNE R7,#2D,JIAN3
         CPL P0.1
         LCALL FENG
         LJMP DENG
  JIAN3:CJNE R7,#3D,JIAN4
        CPL P0.2
                  LCALL FENG
                  LJMP DENG
  JIAN4:CJNE R7,#4D,JIAN5
        CPL P0.3
                  LCALL FENG
                  LJMP DENG
  JIAN5:CJNE R7,#5D,JIAN6
        CPL P0.4
                  LCALL FENG
                  LJMP DENG
  JIAN6:CJNE R7,#6D,JIAN7
        CPL P0.5
                  LCALL FENG
                  LJMP DENG
  JIAN7:CJNE R7,#7D,JIAN8
        CPL P0.6
                  LCALL FENG
                  LJMP DENG
JIAN8:CJNE R7,#8D,JIAN9
        CPL P0.7
                  LCALL FENG
                  LJMP DENG
JIAN9:CJNE R7,#9D,JIAN10
        CPL P1.0
                  LCALL FENG
                  LJMP DENG
JIAN10:CJNE R7,#10D,JIAN11
        CPL P1.1
                  LCALL FENG
                  LJMP DENG
JIAN11:CJNE R7,#11D,JIAN12
        CPL P1.2
                  LCALL FENG
                  LJMP DENG
JIAN12:CJNE R7,#12D,JIAN13
        CPL P1.3
                  LCALL FENG
                  LJMP DENG
JIAN13:CJNE R7,#13D,JIAN14
        CPL P1.4
                  LCALL FENG
                  LJMP DENG
JIAN14:CJNE R7,#14D,JIAN15
        CPL P1.5
                  LCALL FENG
                  LJMP DENG
JIAN15:CJNE R7,#15D,JIAN16
        CPL P1.6
                  LCALL FENG
                  LJMP DENG
JIAN16:  CPL P1.7
                  LCALL FENG
                  LJMP DENG

;--------等待按钮释放服务程序----------------------------
DENG:MOV P2,#11110000B
     MOV A,P2
          CJNE A,#11110000B,DENG
          LJMP KAI

;-----蜂鸣器服务程序----------------------------------------
FENG:CPL P3.7
     MOV R2,#5D
SS:  LCALL YAN
     DJNZ R2,SS
     CPL P3.7
     RET
;-----延时服务程序----------------------------
YAN:MOV R0,#250D
YANA:MOV R1,#100D
     DJNZ R1,$
     DJNZ R0,YANA
     RET
;--------按键数据表---------------------------

TAB:DB 7EH,0BEH,0DEH,0EEH
    DB 7DH,0BDH,0DDH,0EDH
    DB 7BH,0BBH,0DBH,0EBH
    DB 77H,0B7H,0D7H,0E7H
         END

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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