164可以用作输入实际还是用单片机的输入功能,只是通过164的这种用法,可以实现按键输入功能,希望阁下能看理解,不明白可以参考注释。
参考电路图:

1、首先,单片机的管脚必须是具有双向功能的IO口,估计现在大部份的单片机都有这样的功能;开
始定义一个输出输入宏,如下:
;-------------------------------------------------
; macro define
;-------------------------------------------------
input macro
mov a,@0x40
iow r6 ;设置R6,6为输 endm
output macro
mov a,@0x0
iow r6 ;设置R6,6为输出
endm
;*************************************************
2、扫描按键程序:
scan_k7:output ;R6设为输出
mov a,@0xfd ;
mov buff,a ;
call send ;向164送数,扫描线置0
bs r6,6 ;置高
input ;读入R6,6的状态
jbc r6,6 ;R6,6变为0,则证明右健按下,转消抖处理
jmp scan_kk1 ;R6,6还是1,扫描下一个按键
jbc lable,keyhit ;
jmp cleark7 ;
bs lable,keyhit ;
bc enl,7 ;
bs lable,debnceon ;
mov a,@2
mov debnce,a ;
mov buff,a ;
call send ;向164送数,扫描线置0
bs r6,6 ;置高
input ;读入R6,6的状态
jbc r6,6 ;R6,6变为0,则证明右健按下,转消抖处理
jmp scan_kk1 ;R6,6还是1,扫描下一个按键
jbc lable,keyhit
jmp cleark7
bs lable,keyhit
bc enl,7
bs lable,debnceon
mov a,@2
mov debnce,a
……