ls138,集成译码器74ls138
求一个单片机交通灯的程序
/* 名称:LED模拟交通灯
说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
*/
#includereg51.h
#define uchar unsigned char
#define uint unsigned int
sbit ls138a=P0^4;
sbit ls138b=P0^5;
sbit ls138c=P0^6;
sbit RED_A=P1^0; //东西向灯
sbit YELLOW_A=P1^1;
sbit GREEN_A=P1^2;
sbit RED_B=P1^3; //南北向灯
sbit YELLOW_B=P1^4;
sbit GREEN_B=P1^5;
uchar Flash_Count=0,num,num1,time,i,j; //闪烁次数
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar tmp[]={30,5,25};
uchar tmp1[]={25,30,5};
//延时
void delay(uint z)
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
void display(uchar numdis,numdis1)
{
P0=table[numdis%100/10];
ls138a=0;ls138b=0;ls138c=0;
delay(1);
P0=table[numdis%10];
ls138a=1;ls138b=0;ls138c=0;
delay(1);
P0=table[numdis1%100/10];
ls138a=0;ls138b=1;ls138c=0;
delay(1);
P0=table[numdis1%10];
ls138a=1;ls138b=1;ls138c=0;
delay(1);
}
void init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}
//交通灯切换
void Traffic_Light()
{
P1=0xde;//南北红灯亮,东西绿灯亮
delay(10000);
while(++Flash_Count!=5)
{
P1=0xee;//南北红灯亮,东西黄灯亮
delay(500);
P1=0xfe;//南北红灯亮,东西黄灯灭
delay(500);
} //黄灯亮灭5次
Flash_Count=0;
P1=0xf3;//南北绿灯亮,东西红灯亮
delay(10000);
while(++Flash_Count!=5)
{
P1=0xf5;//南北黄灯亮,东西红灯亮
delay(500);
P1=0xf7;//南北黄灯灭,东西红灯亮
delay(500);
} //黄灯亮灭5次
Flash_Count=0;
}
//主程序
void main()
{
init();
i=0;
j=0;
num=tmp[0];
num1=tmp1[0];
while(1)
{
Traffic_Light();
display(num,num1);
}
}void T0_time () interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
time++;
if(time==20)
{
time=0;
if(num0){num--;}
else
{
i++;
if(i2)i=0;
num=tmp[i];
}
if(num10){num1--;}
else
{
j++;
if(j2)j=0;
num1=tmp1[j];
}
}
}
74ls138译码电路
71LS138有三个附加的控制端、和。当、时,输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表3.3.5所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。
带控制输入端的译码器又是一个完整的数据分配器。在图3.3.8电路中如果把作为“数据”输入端(在同一个时间),而将作为“地址”输入端,那么从送来的数据只能通过所指定的一根输出线送出去。这就不难理解为什么把叫做地址输入了。例如当=101时,门的输入端除了接至输出端的一个以外全是高电平,因此的数据以反码的形式从输出,而不会被送到其他任何一个输出端上。
例2. 74LS138 3-8译码器的各输入端的连接情况及第六脚()输入信号A的波形如下图所示。试画出八个输出管脚的波形。
解:由74LS138的功能表知,当(A为低电平段)译码器不工作,8个输出管脚全为高电平,当(A为高电平段)译码器处于工作状态。因所以其余7个管脚输出全为高电平,因此可知,在输入信号A的作用下,8个输出管脚的波形如下:
即与A反相;
其余各管脚的输出恒等于1(高电平)与A的波形无关。
【例3.3.2】 试用两片3线-8线译码器74LS138组成4线-16线译码器,将输入的4位二进制代码译成16个独立的低电平信号。
解:由图3.3.8可见,74LS138仅有3个地址输入端。如果想对4位二进制代码,只能利用一个附加控制端(当中的一个)作为第四个地址输入端。
取第(1)片74LS138的和作为它的第四个地址输入端(在同一个时间令),取第(2)片的作为它的第四个地址输入端(在同一个时间令),取两片的、、,并将第(1)片的和接至,将第(2)片的接至,如图3.3.9所示,于是得到两片74LS138的输出分别为
图3.3.9 用两片74LS138接成的4线-16线译码器
式(3.3.8)表明时第(1)片74LS138工作而第(2)片74LS138禁止,将的0000~0111这8个代码译成8个低电平信号。而式(3.3.9)表明时,第(2)片74LS138工作,第(1)片74LS138禁止,将的1000~1111这8个代码译成8个低电平信号。这样就用两个3线-8线译码器扩展成一个4线-16线的译码器了。
同理,也可一用两个带控制端的4线-16线译码器接成一个5线-32线译码器。
51单片机中LS138译码器的原理
这个数字芯片属于3线-8线译码器,输入3位,输出8位。
因为3位2进制数可以组成8个状态,即000,001,010,011,100,101,110,111。然后没一种状态的输出是唯一的,8位输出中有一位为0。举个例子:输入假如输入为000,那么输出就是01111111,假如数码管是共阳型,这时第一位数码管就被点亮;假如输入为001,那么输出就是10111111,
这时点亮的数码管就是第二位了;以此类推,输入010时输出就为11011111……一直到输入111,输出11111110。
就是这8种组合。当然高级应用可以用来做很多位其它译码
单片机题目,求8255端口地址
LS138,要Y2有输出,则 CBA=010,即 A4=A0=0,A3=1;
另外 G1=1=A6*A7,即 A6=A7=1;A5=0;这些是LS138要求的条件;
所以 A7A6A5A4A3A2A1A0=11001xx0;
那么 8255 端口地址分别是 11001000(C8)、11001010(CA)、11001100(CC)、11001110(CE);
余下的,你自己参看教材去做吧