蓝桥杯单片机复习01 LED灯的控制

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--);
}
发布了24 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/88086168