;加入下一段更好,使L0~L3全亮 mov al,0fh mov dx,端口C地址 ;0fffch out dx,al
;控制程序段 mov dx,端口C地址 ;0fffch in al,dx ;读入PC0~PC3 mov cl,4 shl al,cl ;左移4位 out dx,al ;控制PC4~PC7 〔习题10.16〕
如图10-23为用一片8255A控制8个8段共阴极LED数码管的电路。现要求按下某个开关,其代表的数字(K1为1,K2为2,?K8为8)在数码管从左到右循环显示(已有一个延时子程序delay可以调用),直到按下另一个开关。假定8255A的数据端口A、B、C及控制端口的地址依次为FFF8H~FFFBH。编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表。 〔解答〕
显示代码表 table db 0c0h ;对应0(任意) db 0f9h,0a4h,0b0h,99h db 92h,82h,0f8h,80h ;对应1~8 8255A初始化 mov dx,0fffbh mov al,10001001b ;=89h out dx,al ;控制程序
again0: mov dx,0fffah ;输入开关状态 in al,dx mov cx,8 ;确定哪个开关闭合 mov ah,01h ;mov ah,08h again1: shr al,1 ;shl al,1 jnc disp0 inc ah ;dec ah loop again1 jmp disp1 显示字段
disp0: mov bx,offset table
25
mov al,ah
xlat
mov dx,0fff8h
out dx,al ;输出段码 disp1: mov cx,8 ;循环显示8位 mov al,01h mov dx,0fff9h
disp2: out dx,al ;输出位码 call delay shl al,1 loop disp2 jmp again0
26
相关推荐: