在单片机开发板上,很多时候为了节省IO口的资源,扩展和利用IO口,我们很经常使用的一个方法是使用三八译码器,这将由三个IO口变成了八个IO口的控制,但三八译码器的三个口输入口只能同时控制一个输出口,那么,问题就来了,比如我们很经常用一个三八口去按一个八位或者四位的数码管,那么我们怎么样才能够让这八个数码管同时工作,让我们看上去八个IO口显示不同的内容呢?
下面我就把今天刚在杨老师指导下编写的程序以及原理作一个简单的分析吧。
我的开发板是P0低三位(38数码管的输入端口)口控制数码管的位选的,八个输出口分别控制八个数码管工作的。
程序:
;通过三八译码器让三个IO口控制八个数码管的工作状态
ORG 00H
STARY:
MOV P0,#00000000B;根据三八译码器真值表的原理控制第一个数码管工作
MOV P1,#00111111B;显示 0
CALL DELAY;短暂的延时
MOV P0,#00000001B;根据三八译码器真值表的原理控制第二数码管工作
MOV P1,#00000110B;显示 1
CALL DELAY;短暂的延时
MOV P0,#00000010B;根据三八译码器真值表的原理控制第三数码管工作
MOV P1,#01011011B;显示 2
CALL DELAY;短暂的延时
MOV P0,#00000011B;根据三八译码器真值表的原理控制第四个数码管工作
MOV P1,#01001111B;显示 3
CALL DELAY;短暂的延时
MOV P0,#00000100B;根据三八译码器真值表的原理控制第五个数码管工作
MOV P1,#01100110B;显示 4
CALL DELAY;短暂的延时
MOV P0,#00000101B;根据三八译码器真值表的原理控制第六个数码工作
MOV P1,#01101101B;显示 5
CALL DELAY;短暂的延时
MOV P0,#00000110B;根据三八译码器真值表的原理控制第七个数码工作
MOV P1,#01111101B;显示 6
CALL DELAY;短暂的延时
MOV P0,#00000111B;根据三八译码器真值表的原理控制第八个数码工作
MOV P1,#00000111B;显示 7
CALL DELAY;短暂的延时
JMP STARY
DELAY:;延时程序
MOV R0,#3
DV1: MOV R1,248
DV2: DJNZ R1,DV2
DJNZ R0,DV1
RET
END
效果:在八个数码管上显示数字0至7
写这程序的时候要注意的是延时时间的问题。要保留在人的视觉能够看得见的状态。一般是20MS以内。