|
实验9:74LS138部份38译码器部份实验
38译码器是通过3条线来达到控制8条线的状态, 即2的3次方。在电路中,
起到扩展IO资源用。
74LS138引脚定义:

74LS138逻辑表:

相关原理:

程序运行照片:

以下实验通过P1.0,P1.1,P1.2三条数据线通过74LS138译码作一个8路跑马灯实验。接线方法:
1、用4PIN数据排线插入CPU部份的JP44的P1.0-P1.3
口.另一端插入74LS138部份的JP22作为数据输入。
2、用一条8PIN数据排线, 连接78LS138的输出口JP25到
8路指示灯的JP32,运行可看到跑马灯。
程序流程图:

汇编语言参考程序:
org 0000h
ajmp main
org 0080h ;
;定义P1.0,P1.1,P1.2 分别为AA,BB,CC 以便在程序中描述
AA EQU P1.0
BB EQU P1.1
CC EQU P1.2
MAIN:
CLR CC ;状态1 A,B,C为000
CLR BB
CLR AA
CALL DELAY ;调用延时
CLR CC ;状态2 A,B,C 为100
CLR BB
SETB AA
CALL DELAY ;调用延时
CLR CC ;状态2 A,B,C 为010
SETB BB
CLR AA
CALL DELAY
CLR CC
SETB BB
SETB AA
CALL DELAY
SETB CC
CLR BB
CLR AA
CALL DELAY
SETB CC
CLR BB
SETB AA
CALL DELAY
SETB CC
SETB BB
CLR AA
CALL DELAY
SETB CC
SETB BB
SETB AA
CALL DELAY
JMP MAIN ;重新开始
DELAY: ;延时子程序
MOV R5,#255
D3:MOV R2,#255
D4: DJNZ R2,D4
DJNZ R5,D3
RET
END
c语言参考程序:
#include<reg51.h>
//头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define RUN P1 //宏定义,将P1口定义为LS138输入
void delay() //延迟函数
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}
char code SST516[3] _at_ 0x003b;
//仿真器插入代码
main() //主函数
{
uchar i=0;
while(1)
{
for(i=0;i<8;i++) //LS138输入范围0-7
{
RUN=i;
delay();
}
}
} |