在设计单片机电路的时候,单片机的IO口数量是有限的,有时候并不能满足设计需求,但是为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如74HC138这个三八译码器,下图便是I51开发板上74HC138一个应用。
从这个名字来分析,三八译码器就是把三种输入状态翻译成8种输出状态。从上图中可以看出来,74HC138有1~6共6个输入引脚,但是其中4、5、6这三个引脚是使能引脚。如果这三个使能引脚不符合规定的输入要求,Y0-Y7不管输入1、2、3引脚是什么电平状态,总是高电平。所以要想让这个74HC137正常工作,E1、E2必须为低电平,E3必须为高电平。在本例中将E2直接接到了GND上,E3直接接到了VCC上,E1接到了的单片机的P2.7上,也就是只需要控制P2.7的状态,就能控制控制74HC138的输出了。
74HC138使能控制我们知道了,那么接下里就要研究逻辑控制了。对于数字器件的引脚,如果一个引脚输入的时候,有0和1两种状态,那么对于两个引脚输入的时候,就会有00,01,10,11四种状态了,那么对于3个输入的时候,机会出现8种状态了。大家可以看下下面的这个真值表,其中输入是A2,A1,A0的顺序,输出是从Y0~Y7的顺序。
A2 A1A0Y0Y1Y2Y3Y4Y5Y6Y7 00001111111 00110111111 01011011111 01111101111 10011110111 10111111011 11011111101 11111111110从上表可以看出,任一输入状态下,只有一个输出引脚是低电平,其他的引脚都是高电平。
从上面的电路图我们可以知道,只要LED0~LED5分别输出低电平时,对应的LED会亮,那么实际上是不是这样的呢?程序中又该怎么去实现呢?那么接下来我们来看一看程序的代码部分吧。
首先,我们根据电路提,定义了74HC138的控制引脚:
#define A0_74HC138 P24
#define A1_74HC138 P25
#define A2_74HC138 P26
#define EN_74HC138 P27
接下来将对应的IO口初始化:
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//P24、P25、P26、P27
GPIO_InitStructure.Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.Mode = GPIO_PullUp;
GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
}
那么现在我们就可以在主函数里面实现我们需要的功能了,根据三八译码器的真值表,我们可以写如下代码,实现RGB三色灯的流水灯程序:
void main(void)
{
GPIO_config();
EN_74HC138 = 0;//打开74HC138的使能端
while(1)
{
//流水灯
//R1
A2_74HC138 = 0;
A1_74HC138 = 0;
A0_74HC138 = 0;
EN_74HC138 = 0;
delay_ms(500);
//G1
A2_74HC138 = 0;
A1_74HC138 = 0;
A0_74HC138 = 1;
delay_ms(500);
//B1
A2_74HC138 = 0;
A1_74HC138 = 1;
A0_74HC138 = 0;
delay_ms(500);
//R2
A2_74HC138 = 0;
A1_74HC138 = 1;
A0_74HC138 = 1;
delay_ms(500);
//G2
A2_74HC138 = 1;
A1_74HC138 = 0;
A0_74HC138 = 0;
delay_ms(500);
//B2
A2_74HC138 = 1;
A1_74HC138 = 0;
A0_74HC138 = 1;
delay_ms(500);
}
}
让我们来看下实际运行的效果吧:
其实,RGB三色灯不仅仅只能发出红、蓝、绿三种颜色哦,稍微有点常识的人都知道,红、蓝、绿三色,其实就是三基色,大多数的颜色都是可以通过红、蓝、绿三色按照不同的比例生成的,比如:
红色+绿色=黄色
绿色+蓝色=青色
绿色+蓝色=品红
红色+绿色+蓝色=白色
我们可以用一个图来表示上面的合成色结构:
看了之后,会不会有点小心动呢?那么还等什么,赶紧动手试试吧,程序部分本菜在此就不再介绍了,感兴趣的小伙伴们自己动起手来吧,就当做是课后作业吧。本讲到此结束,后续精彩部分敬请关注!
I51开发板第十七讲 数码管简介https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=66084(出处: ICKEY BBS)