LED复习
- 我们首先找到LED的原理图,如下
我们看到这些LED二极管有一端都接到了vcc(高电平)说明这些LED是共阳极的,那如果我们想让这些LED亮,就需要把这些LED的另一端置低电平。
可是我们又看到了M74HC573锁存器,原理如下
- 八路3态输出的非反转透明锁存器。
- 当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
我们可以从上面的信息知道当Y4C为高电平时,我们可以改变P0口的值并随之改变Q1_Q7的值,反之573锁存器就会锁住Q1~Q7的值。
- 我们再看第二幅图,找一下到底是何方神圣可以改变Y4C的值
我们可以看到74HC02或非门改变Y4C的值
或非门工作原理,详见https://baike.baidu.com/item/%E6%88%96%E9%9D%9E%E9%97%A8/5766427
或运算:
1 或 1 = 1
1 或 0 = 1
0 或 0 = 0
非运算:
1的非=0
0的非=1
因为J13跳冒短接的2和3所以WR为低电平
所以当Y4为低电平时,Y4C才能是高电平
- 74HC138译码器
三八译码器,三个输入控制八路互斥的低有效输出。
C B A
1 0 0: Y4
1 0 1: Y5
1 1 0: Y6
1 1 1: Y7
到这里我相信你看懂了。
我们现在就开始写代码了。
附上流水灯代码
#include <reg52.h>
void CH138Select(unsigned char channel); //锁存器模式选择
void LED_Display(); //LED灯显示
void Init_System(); //初始化系统,把蜂鸣器和继电器关闭
void Delay(unsigned int t); //延时函数
void main (){
Init_System();
while (1){
LED_Display();
}
}
void CH138Select(unsigned char channel){
switch(channel){
case 4:
P2=(P2 & 0X1F)|0X80;
break;
case 5:
P2=(P2 & 0X1F)|0XA0;
break;
case 6:
P2=(P2 & 0X1F)|0XC0;
break;
case 7:
P2=(P2 & 0X1F)|0XE0;
break;
}
}
void LED_Display(){
int i;
CH138Select(4);
for(i=0;i<8;i++){
P0=~(0x01<<i);
Delay(60000);
Delay(60000);
}
}
void Init_System(){
CH138Select(5);
P0=0x00;
CH138Select(4);
P0=0XFF;
}
void Delay(unsigned int t){
while (t--);
while (t--);
}