ledtab db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
data ends
code segment
assume cs:code,ds:data start: mov ax ,data mov ds , ax lea di , ledtab
mov al , 35h mov dx , 20bh out dx , al
mov ax , 1000h mov dx , 208h out dx , al mov al ,ah out dx , al
mov al , 77h mov dx , 20bh out dx , al
mov al , 1000h mov dx , 209h out dx , al mov al , ah out dx , al
mov al , 81h ; 通道0初始化 ,00110101b,16位,方式2,BCD ; 写初值1000BCD ; 通道1初始化 ,01110111b,16位,方式3,BCD ; 写初值1000BCD ; 8255初始化 ,10000001b,c口低四位输入 ,
其余均为输出
mov dx , 203h out dx , al wait2:
mov dx , 201h ; B口清零,PB0=0,无方波,LED暗
mov al , 00h out dx , al mov dx , 200h
mov al , 00h out dx , al
ks1 : call ks cmp al , 0fh jz ks1 mov cx , 0f0h
loop1: loop loop1 call ks
cmp al , 0fh jz ks1
mov bh , 0efh mov bl , 00h jz k1
cmp al , 0bh jz k4
cmp al , 07h jz k7
next : rol bh , 1 inc bl cmp bh , 0feh ; A口清零,数码管暗
; 读取按键
; 判断有无键闭合(行有无低电平) ; 无键闭合 ; 延时,去抖
; 再次判断有无键闭合 ; 初始化列码,11101111b,准备检测第一列 ; 初始化列值
; 第三行(4)? ; 第四行(7)? ; 列码左移一位 ; 列值加一
; 判断该键扫描是否结束
jnz again jmp ks1
k0 : add bl , 0 ; 与列值合成键码 jmp wait1 k1 : add bl , 1 jmp wait1 k4 : add bl , 4 jmp wait1 k7 : add bl , 7 wait1: call ks cmp al , 0fh
jnz wait1
jmp flash
flash: mov bh , 00h add di , bx
count: mov al , [di] xlat
mov dx , 200h
out dx , al
dec di mov dx , 201h
mov al , 01h
out dx , al
call delay dec bl
jnz count jmp wait2
; 判断键是否释放 ; 键未释放,等待!
; 进行闪烁和显示 ; 数码管倒计时显示
; 用的b0控制的Gate1,使8253产生1S方波
;用bl(键盘值)控制循环次数
ks proc near ;读取按键 mov dx , 202h mov al , 0fh
out dx , al ;使所有列线为低电平 in al , dx ;读取行值 and al , 0fh ;屏蔽高4位 ret ks endp delay
proc near push ax push cx push bx
mov bx , 4
delay1: mov cx, 0fh delay2: loop delay2 dec bx
jnz delay1 pop bx pop cx pop ax ret delay endp
code ends end start
;循环4*65536次,延迟0.02ms
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- esig.cn 版权所有 湘ICP备2023023988号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务