38译码器:通过3位输入控制输出8位中的一位,起到一个片选的作用
原理图中的ABC对应的是P25.26.27口 输出8位中 目前只用到了Y4567
通过25.26.27口 使得Y4567位低电平,那么对应的27(C)26(B)25(A)口十进制数分别是4567
Y4:100(CBA)Y5:101,Y6:110 Y7:111 因为原理图是ABC这按CBA排序好理解
例:如果要给Y6输出一个低电平对应的十进制是6 二进制则为110 那么就是C(1)B(1)A(0)
74h573锁存器:透明的锁存器不会进行翻转:当LE给高电平时不会进行所存,来的是什么数据就输出什么数据,LE为低电平时不工作,不会连通
P0口对应的是led灯,但不能直接给低电平进行点亮 首先要将74H138译码器的Y4输出一个低电平,经过或非门变成高电平然后使能74HC357的LE打通锁存器,然后P0给低电平 点亮led灯
步骤:给锁存器的P252627定义变量 然后对变量赋值(C(1)B(0)A(0)) 输出低电平经过反相器(Y4)打开相应的锁存器,定义一个延时函数(unsigned int i) 一般定义两个while的死循环(t=60000), 然后用二进制对每个二极管赋值默认为高电平,点亮为低电平(0x00),高电平为(0xff). 跑马灯需要进行一位操作可以利用for循环将每个变量进行一位(P0=(0xff<<i)) 然后可以进行移位操作
总结: 74h138选择或非门的通道可以直接用一个函数封装起来,然后进行操作,led口是P0口,且是共阳的,点亮需要低电平,对于跑马灯的实现利用for循环进行移位操作。
看代码总结:点亮led P0=0x00,关闭P0=0xff, 跑马灯是 P0=0xff<<i;(移动一位自动补0)

#include <STC15F2K60S2.H>
void select138(unsigned char n)
{
switch(n)
{
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 delay(unsigned int i)
{
while(i--);
while(i--);
}
unsigned char i;
void led()
{
select138(4);
for(i=0;i<3;i++)
{
P0=0x00;
delay(10000);
wwdelay(10000);
P0=0xff;
delay(10000);
delay(10000);
}
for(i=1;i<=8;i++) // 一位一位的点亮 变量的定义是1-8
{
P0=0xff<<i;
delay(10000);
delay(10000);
}
for(i=1;i<=8;i++)
{
P0=~(0xff<<i);
delay(10000);
delay(10000);
}
}
void main()
{
while(1)
{
led();
}
}版权声明:本文为w396255075原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。