蓝桥杯之LED
首先,先来看看问题:让八路LED指示灯闪烁三遍然后熄灭,接着依次点亮LED指示灯,最后依次熄灭指示灯,程序循环实现上述功能。
下面看看原理图:
1️⃣74HC138:俗称三八译码器(非常简单)有六路输入八路输出,其中P25、P26、P27控制Y0-Y7由哪个输出。
2️⃣74HC02:就是一个或非门
3️⃣J13:当74HC02的WR脚接到J13的1,2脚时将会选择到存储器映射开发模式,接到3脚时将会选择到IO扩展模式
4️⃣74HC573:(非反转锁存器)1脚为片选,当1脚接低电平时选中左边的一排引脚,11脚为使能脚,接高电平时锁存器对于数据是透明的(同步输出,也就是D1-D8对应Q1-Q8,D输入什么Q输出什么)。当锁存器接低电平时数据会锁存,也就是不会同步了。
讲完了各个芯片接下来看看怎么实现电灯。
由原理图可知要使LED灯亮Q端需要输出低电平,也就是说D端要同步输出低电平。所以Y4C需要是高电平,上面我们说到WR脚接J13的3脚选择IO扩展模式,也就是低电平。同时,需要Y4(74HC02)给一个低电平才会在经过一个或非门之后使Y4C输出一个高电平,而Y4又由三八译码器的Y4控制.所以我们要调节P25-27来完成上述任务。
最后来看看代码吧:
#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--);
}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 main()
{while(1){LEDRunning();}
}
好喽,代码就是这样。可以自己运行试试。(用正版的仿真或者用蓝桥杯比赛用的板子)
第一次写欢迎大家指出问题😁
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
