对原理图的剖析
我们通过74HC573这个编码器进行对LED的控制,那么首先我们先实现一个最简单的led的延迟频闪,L1~L8的200ms 的频闪。
通过原理图我们知道,74HC573编码器的使能端是由Y4C控制的,通过原理图我们看到Y4C的编码器如下
由图我们可以知道,LED的控制由P25 P26 P27 来控制,假如我想要L1~L8的灯全部都亮,我们就用P2的P25 P26 P27来控制 由于LED对应Y4控制,那么显然P25 P26 P27的值分别为0 0 1,16进制为0x80.到此SM74HC138的控制到此结束了,再来74HC573中对8个小灯泡进行控制,分析可以知道,当P00 ~ P07 都为低电位的时候小灯泡才会都亮,对应值就为零。这里直接上代码进行理解
void main(void)
{
while(1)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0xff;
P2 &= 0x1f;
}
}
这里对LED进行的是初始化,让P00~P07都为1的时候LED不亮
void main(void)
{
while(1)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0x00;
P2 &= 0x1f;
}
}
这里通过改变P0使P00~P07的值为低电平也就是0,使所有LED都亮起来
好了我们已经可以用代码实现对LED的控制了,中间在穿插延迟函数就能实现LED的延迟频闪。下面直接放完整代码
void delay()
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void main(void)
{
while(1)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0xff;
P2 &= 0x1f;
delay();
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0x00;
P2 &= 0x1f;
delay();
}
}
那么来看看实际结果吧
LED频闪
小结:
后续每周至少会带来一篇文章来实现蓝桥杯单片机的模块内容