74922应用于键盘控制及六位数显示程序
     org    00h               ;清除显示器存储器30H~35H
start:   MOV   r4,#06h
         MOV   r0,#30h
clear:   MOV   @r0,#00h
        inc  r0
        djnz r4,clear
l1:     jb   p1.4,keyin        ;检测74138的DA脚=1? DA=1表示有键按下
        call disp              ;调用显示子程序
        jmp  l1
keyin:  jb   p1.4,$            ;按键放开否?
         MOV   a,p1              ;是则读入74922的按键值
        anl  a,#0fh            ;取低4位(74922 A~D)
         MOV   dptr,#table       ;到table取码
         MOV c a,@a+dptr
         MOV   20h,a             ;暂存入(20H)
        xrl  a,#0ah            ;是否按"*"?是则清除屏幕
        jz   start
         MOV   a,20h
        xrl  a,#0bh            ;是否按"#"?是则清除屏幕
        jz   start
         MOV   a,20h             ;除"*"和"#"其余都为数字键
        xch  a,30h             ;现按键值存入(30H)
        xch  a,31h             ;旧(30H)值存入(31H)
        xch  a,32h             ;旧(31H)值存入(32H)
        xch  a,33h             ;旧(32H)值存入(33H)
        xch  a,34h             ;旧(33H)值存入(34H)
        xch  a,35h             ;旧(34H)值存入(35H)
        call disp              ;调用扫描子程序
        jmp  l1
disp:    MOV   a,35h             ;(35H)显示器D6地址
        add  a,#50h            ;D6数据值加上74138扫描值
         MOV   p0,A              ;显示D6
        call delay             ;扫描延时
         MOV   a,33h             ;(33h)显示器D4地址
        add  a,#30h            ;显示数据值加上74138扫描值
         MOV   p0,a              ;显示D4
        call delay             ;扫描延时
         MOV   a,32h             ;(32H)显示器D3地址
        add  a,#20h            ;D2数据值加上74138扫描值
         MOV   p0,a              ;显示D2
        call  delay             ;扫描延时
         MOV   a,30h             ;(30H)显示器D1扫描值
        add  a,#00h            ;D1数据值加上74138扫描值
         MOV   p0,a              ;显示D1
        call delay             ;扫描延时
        ret
delay:   MOV   r7,#06            ;显示器扫描时间3毫秒
d1:      MOV   r6,#248
        djnz r6,$
        djnz r7,D1
        ret
        org  300h
table:  db   01h,01h,03h,0ffh  ;键盘码
        db   04h,05h,06h,0ffh
        db   07h,08h,09h,0ffh
        db   0ah,00h,0bh,0ffh
        end