一、74HC138译码器
P27、P26、P25输出0、0、0,Y0为0;P27、P26、P25输出0、0、1,Y1为0;
P27、P26、P25输出0、1、0,Y2为0;P27、P26、P25输出0、1、1,Y3为0,剩下的以此类推
二、74HC573锁存器
当OE为0,LE为1时D1~D8是什么Q1~Q8就是什么。OE已经接地,为0,我们只需让LE为1即可。
三、74HC02或非门
若想让输出Y4C为1,只需让Y4,WR(默认为0)都为0,两者相或为0,再非一下就为1。
若想让输出Y4C为0,只需让Y4,WR其中一个为0,两者相或为1,再非一下就为0。
四、代码实现
整体思路:首先让P27 = 1,P25 = 0,P26 = 0,即可让Y4输出0;然后Y4和WR与非为1;接着即可控制P0实现功能。
#include "reg52.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 LED()
{
char i;
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
for(i = 1;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);
}
// 下面两个for循环为流水灯的程序,题目并未要求,我自己加的
// for(i = 0;i < 7;i++)
// {
// P0 = ~(0x01 << i);
// Delay(60000);
// Delay(60000);
// }
// for(i = 7;i >= 0;i--)
// {
// P0 = ~(0x01 << i);
// Delay(60000);
// Delay(60000);
// }
}
void main()
{
while(1)
{
LED();
}
}