对于该单片机的LED控制,需要了解74HC5138译码器,M74HC573MIR锁存器,74HC02非或门这三个器件
上图三个引脚可控制模式分别是i/o口扩展 映射
i/o口扩展接2,3 映射:1,2 我们以下所有操作是用i/o口扩展展示
74HC5138译码器是一个通过三个输出控制八路互斥的低有效输出的芯片 八路互斥:一低七高
通过三个P2口来控制八个Y口
C B A
0 0 0 Y0 通过这样的方式选择所需端口
0 0 1 Y1
0 1 0 Y2
0 1 1 Y3
以此类推
上图是个或非门,以红箭头的为列,有两个引脚:8,9的这边的数据会经过先或后非传输到10引脚这边
锁存器可控制LED的亮灭 OE接地,当LE是高电平时,锁存器打开。该芯片的输入是透明的即P0口输入的值到Q1是不变的
74HC5138译码器通过输入编码选择Y4
或非门Y4与WR都是低电平 经非后变成
高电平输入到Y4C,锁存器打开
接下来就可向P0口输入十六进制的编码
即可控制LED
该板的LED是共阳LED,输入低电平点亮
P0口是八位并行 I/O 端口
点击查看代码
`include<STC15F2K60S2.H>//添加头文件
`sbit HC138_C=P2^7//定义译码器
`sbit HC138_B=P2^6
`sbit HC138_A=P2^5
` HC138_C=1;//位选Y4
` HC138_B=0;
` HC138_A=0;
`P0=0x01;点亮一个LED
列:#include<STC15F2K60S2.H>
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
void Delay(unsigned int t)//延迟函数
{
while(t--);
while(t--);
}
void LEDrunning()子函数
{
unsigned char i;
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
for(i = 0; i < 3; i++)
{
P0 = 0x00;
Delay(60000);
Delay(60000);
P0 = 0xff;
Delay(60000);
Delay(60000);
}
for(i = 1; i <= 8; i++)
{
P0 = 0xff << i;
Delay(60000);
Delay(60000);
}
for(i = 1; i <= 8; i++)
{
P0 = ~(0xff << i);
Delay(60000);
Delay(60000);
}
}
void buzzdown()//Y5初始化(可将蜂鸣器关闭)
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0= 0x00;
}
void main ()主函数
{
buzzdown();
while(1)
{
LEDrunning();
}
}