首先,单纯只是想将LED点亮,需要用到以下硬件
实现的顺序依次是从左到右但是为了方便解释我们从实现的角度出发,从右向左来解释,首先是看第三张图的前两个引脚也就是OE和LE, OE接的是GND,OE(GND)的值为0,如果要使设备通电,需要将LE的值变为1(如果说OE和LE都为1,或者说都为0,那么这个设备都无法通电。只有当二者一个为0,一个为1时设备才能通电)
因此为了让LE为1,我们需要使Y4C引脚拉高,也就是说使Y4C输出1,因此我们转而看向第二张图。同时在这里,我们要向小蜜蜂老师借一张图
这里实际上是我们提前将J13上的WR和GND用跳帽连接,也就是说此时我们上面的第二张图中12是接地的(WR为0),那么如果想使Y4C变成1,那么11引脚(Y4)要变成0,
同样的思路如果我们想要使Y4引脚变成0,我们需要看像第一张图,第一张图这个硬件的原理是我们通过赋值ABC 3个端口为0或者1,来实现使得7到15端口的其中某一个端口值为零这个目的(7到15端口的初始值都为1)。
现在我们成功将HC573也就是LED上电了,接下来是控制LED的亮灭,首先对于上图的led,0为亮,1为灭,如果希望第0个灯亮,那就是01111111,全灭就是11111111,全亮是00000000,但我们需要将他转化,借用计算器
全灭是0xFF,只有第零个灯亮为0x7F,同理,全亮为0x00。led图中的P01,P02.....实际都是P0端口,通过对P0端口赋值,实现对led的控制
#include <STC15F2K60S2.H>
sbit HC138_A = P2^5;//首先将端口P2^5重新命名,但直接使用P2^5也没问题
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
Delay(unsigned int t)//简单延时
{
while(t--);
while(t--);
}
LEDrunning()
{
HC138_C=1;//进行赋值
HC138_B=0;
HC138_A=0;
P0=0x00;//全亮
Delay(60000);
P0=0xFF;//全灭
Delay(60000);
for(i=0;i<=8;i++)
{
P0=0xff<<i;//实际效果:开始为全灭,从左到右依次亮起
Delay(60000);
Delay(60000);
}
for(i=0;i<=8;i++)
{
P0=~(0xff<<i);//开始为全亮,从左到右依次熄灭
Delay(60000);
Delay(60000);
}
}
void main()
{
while(1)
{
LEDrunning();
}
}
以上是我通过小蜜蜂老师的第一节视频学习的内容
但是这里我有一个疑惑也就是代码中依次点亮和依次熄灭的这个部分。
据这个代码的实际含义如下
当 i=0 时,0xff<<0 是 11111111,所有LED灭。0为点亮,1为熄灭
当 i=1 时,0xff<<1 是 11111110。
当 i=2 时,0xff<<2 是 11111100。
当 i=3 时,0xff<<3 是 11111000。
那么按照我的理解不应该是 开始为熄灭,然后是从右到左依次亮起吗?
但实际上的效果为从左向右一次点亮,希望大家能为我解惑。