当你倒下的时候,你才意识到我的存在……

自己写的键盘程序

上一篇 / 下一篇  2008-06-08 14:49:22


;44矩阵键盘
;设计者:黄宗灯(广西师范大学)
;行线P1.0-P1.3,列线P1.4-P1.7
;****************
LED0 EQU 40H
SDA  BIT P0.2
SCL  BIT P0.3
ORG  0000H
AJMP MAIN
ORG  0100H
;------------------------------

;-------主程序-----------------
MAIN:
    MOV LED0,#0      ;初始化LED0
    MOV DPTR,#TAB
    MOV TMOD,#10H    ;定时器T1方式1
    MOV TH1,#0B1H    ;定时初值B1E0
    MOV TL1,#0E0H
LOOP:
    ACALL SCAN
    ACALL DISPLAY
    ACALL DELAY
    AJMP  LOOP
;***********

;**********键盘扫描************
SCAN:
    MOV  P1,#0F0H         ;行线全清0
    MOV  A,P1             ;读状态
    CJNE A,#0F0H,LOOP1    ;有键按下吗?有转LOOP1

    RET                   ;无按下返回

LOOP1:
    ACALL DELAY_10        ;延时去抖动
    MOV A,P1              ;再读状态
    CJNE A,#0F0H,KEY0     ;再有键按下吗?有到KEY0

    RET                   ;没有返回

KEY0:                     ;判别是那个键被按下了
    MOV  P1,#0FEH         ;将P0.0行置0
    JNB  P1.4,N0          ;列线为0吗?为0到NX中去执行相应的

操作
    JNB  P1.5,N1
    JNB  P1.6,N2
    JNB  P1.7,N3

    MOV P1,#0FDH          ;将行P0.1置0
    JNB  P1.4,N4
    JNB  P1.5,N5
    JNB  P1.6,N6
    JNB  P1.7,N7

    MOV P1,#0FBH          ;将行P0.2置0
    JNB  P1.4,N8
    JNB  P1.5,N9
    JNB  P1.6,N10
    JNB  P1.7,N11

    MOV P1,#0F7H      ;将行P0.3置0
    JNB  P1.4,N12
    JNB  P1.5,N13
    JNB  P1.6,N14
    JNB  P1.7,N15

    RET
;*********按键扫描结束***********

;**********按键处理子程序************

;*******16个按键可以实现16个功能*********
N0:
    MOV LED0,#0
    RET
N1:
    MOV LED0,#1
    RET
N2:
    MOV LED0,#2
    RET
N3:
    MOV LED0,#3
    RET
N4:
    MOV LED0,#4
    RET
N5:
    MOV LED0,#5
    RET
N6:
    MOV LED0,#6
    RET
N7:
    MOV LED0,#7
    RET
N8:
    MOV LED0,#8
    RET
N9:
    MOV LED0,#9
    RET
N10:
    MOV LED0,#10
    RET
N11:
    MOV LED0,#11
    RET
N12:
    MOV LED0,#12
    RET
N13:
    MOV LED0,#13
    RET
N14:
    MOV LED0,#14
    RET
N15:
    MOV LED0,#15
    RET
;*********按键处理子程序结束*************


;********显示子程序***************
DISPLAY:
    MOV A,LED0
    MOVC A,@A+DPTR
    ACALL SHIFT   ;显示按下键的数字
    MOV A,#0FFH
    ACALL SHIFT   ;其它7个数码管显示灭
    ACALL SHIFT
    ACALL SHIFT
    ACALL SHIFT
    ACALL SHIFT
    ACALL SHIFT
    ACALL SHIFT

    RET

;*********数据送进164在子程序*********
SHIFT:
    PUSH A
    MOV R0,#8   ;8位数据
    CLR C
    CLR SCL
DL:
    RLC A
    MOV SDA,C     ;一位位传送
    SETB SCL
    CLR SCL
    DJNZ R0,DL    ;8位送完了吗?
    POP A

    RET

;*********显示数据表格*******

TAB:
    DB 11H,0D7H,32H,92H
    DB 0D4H,98H,18H,0D3H
    DB 10H,90H,50H,1CH,39H
    DB 16H,38H,78H,0FFH

;------------定时延时10MS--------
DELAY_10:
    SETB TR1        ;启动定时器
    JNB TF1,$       ;等待溢出
    CLR TR1         ;关闭定时器
    CLR TF1         ;清溢出标志位
    MOV TH1,#0B1H   ;重载初值
    MOV TL1,#0E0H

    RET

;------------延时子程序----------
DELAY:
     MOV R1,#1
DEL1:
     MOV R2,#0FFH
DEL2:
     MOV R3,#0FFH
DEL3:
     DJNZ R3,DEL3
     DJNZ R2,DEL2
     DJNZ R1,DEL1
     RET
;--------------------------------

     END

 


 


TAG: 程序 广西 键盘 MOV 黄宗灯

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

黄宗灯

黄宗灯

当你倒下的时候,你才意识到我的存在……

日历

« 2008-11-17  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 202
  • 日志数: 5
  • 图片数: 3
  • 建立时间: 2008-05-17
  • 更新时间: 2008-08-17

RSS订阅

Open Toolbar