打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机入门培训专题(七) – 74HC245、138的应用 – 著名的PCB哥
userphoto

2015.08.26

关注
微信公众平台获取码:''单片机入门7'',关注著名的PCB哥微信公众平台,回复上述获取码即可快速获取本文

  7.174HC245芯片应用

  除了上期专题中讲到的三极管之外,其实还有一些驱动IC,这些驱动IC可以作为单片机的缓冲器,仅仅是电流驱动缓冲,不起到任何逻辑控制的效果,比如74HC245D这个芯片,这个芯片在逻辑上起不到什么别的作用,就是当做电流缓冲器的,我们通过查看其数据手册,74HC245稳定工作在70mA电流是没有问题的,比单片机的8个IO口大多了,所以我们可以把他接在小灯和IO口之间做缓冲,如图7-1所示

  图7-1 74HC245功能图


  从图7-1我们来分析,其中VCC和GND就不用多说了,细心的同学会发现这里有个0.1uF的去耦电容噢。

  74HC245是个双向缓冲器,1引脚DIR是方向引脚,当这个引脚接高电平的时候,右侧所有的B编号的电压都等于左侧A编号对应的电压。比如A0是高电平,那么B0就是高电平,A1是低电平,B1就是低电平等等。如果DIR引脚接低电平,得到的效果是左侧A编号的电压都会等于右侧B编号对应的电压。因为我们这个地方控制端是左侧接的是P0口,所以我们要求B等于A的状态,所以1脚我们直接接的高电平。图7-1中还有一排电阻R10到R17是上拉电阻,这个电阻的用法我们在后边介绍。

  还有最后一个使能引脚19脚OE,这个引脚上边有一横,表明是低电平有效,当接了低电平后,74HC245就会按照刚才上边说的起到双向缓冲器的作用,如果OE接了高电平,那么无论DIR怎么接,A和B的引脚是没有关系的,也就是74HC245功能不能实现出来。

  从我们的电路图7-2可以看出来,我们的P0口和74HC245的A端是直接接起来的。这个地方,有个别同学有一个疑问,就是我们明明在电源VCC那地方加了一个三极管驱动了,为何还要再加245驱动芯片呢。这里大家要理解一个道理,电路上从正极经过器件到地,首先必须有电流才能正常工作,电路中任何一个位置断开,都不会有电流,器件也就不会参与工作了。其次,和水流一个道理,从电源正极到负极的电流水管的粗细都要满足要求,任何一个位置的管子过细,都会出现瓶颈效应,电流在整个通路中细管处会受到限制而降低,所以在电路通路的每个位置上,都要保证足够通道足够畅通,这个245的作用就是消除单片机IO这一环节的瓶颈。

  图7-2 单片机和74HC245接口


  7.274HC138译码器应用

  在我们设计单片机电路的时候,单片机的IO口数量是有限的,有时并满足不了我们的设计需求,比如我们的STC89C52RC一共是32个IO口,但是我们为了控制更多的器件,就要使用一些外围的数字芯片,这种数字芯片由简单的输入逻辑来控制输出逻辑,比如74HC138这个三八译码器,图7-3是74HC138在我们原理图上的一个应用。

  图7-3 74HC138应用原理图


  从这个名字来分析,三八译码器,就是把3种输入状态翻译成8种输出状态。从图7-3所看出来的,74HC138一共有1~6一共是6个输入引脚,但是其中4、5、6这三个引脚是使能引脚。使能引脚和我们前边讲74HC245的OE引脚是一样的,这三个引脚如果不符合规定的输入要求,Y0到Y7不管你输入的1、2、3引脚是什么电平状态,总是高电平。所以我们要想这个74HC138正常工作,ENLED那个输入位置必须输入低电平,ADDR3位置必须输入高电平,这两个位置都是使能控制端口。

  这类逻辑芯片,大多都是有使能引脚的,使能符合要求了,那下面就要研究逻辑控制了。对于数字器件的引脚,如果一个引脚输入的时候,有0和1两种状态;对于两个引脚输入的时候,就会有00,01,10,11这四种状态了,那么对于3个输入的时候,就会出现8种状态了,大家可以看下边的这个真值表——图7-4,其中输入是A2,A1,A0的顺序,输出是从Y0,Y1….Y7的顺序。

  图7-4 74HC138真值表


  从图7-4可以看出,任一输入状态下,只有一个输出引脚是低电平,其他的引脚都是高电平。我们清楚的知道,8个LED小灯的总开关三极管Q16基极的控制端是LEDS6,也就是Y6输出一个低电平的时候,可以开通三极管Q16,从右侧的希望输出的结果,我们可以推导出我们的A2,A1,A0的输入状态应该是110,那我们再来看下原理图7-5。

  图7-5 点亮LED小灯整体示意图


    那么我们在整体捋一遍点亮LED小灯的过程,首先看74HC138,我们要让LEDS6为低电平才能导通三极管Q16,所以ENLED = 0;ADDR3 = 1;保证74HC138使能。然后ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;这样保证了三极管Q16这个开关开通,5V电源加到LED上。

  而74HC245左侧是通过P0口控制,我们让P0.0引脚等于0,就是DB_0等于0,而右侧DB0等于DB_0的状态,也是0,那么这样在这一排共8个LED小灯当中,只有最右侧的小灯和5V之间有压差,有压差就会有电流通过,有电流通过我们的LED2就会发光。

  7.3LED闪烁程序

  点亮LED小灯的程序我们第二课完成了,就是让LED = 0;熄灭小灯的程序也很简单,就是LED = 1;亮和灭中间加个时间延时,点亮和熄灭就都学会了,那么我们中间加个延时程序,反复不停的点亮和熄灭小灯,就成了闪烁了。

  我们首先复习一下Keil写程序的过程,建立工程–保存工程–建立文件–添加文件到工程–编写程序–编译–下载程序。

  LED闪烁程序对于有C基础的同学来说很简单,那我先写出来,大家可以先看下。没有C语言基础的同学也可以跟着抄一遍,下节课我会补充部分C语言基础知识,这样你先抄一遍后,再跟着看C语言基础知识的时候也比较容易理解透彻。

  #include <reg52.h> //包含寄存器的库文件

  sbit LED = P0^0; //位地址声明,注意:sbit必须小写!

  sbit ADDR0 = P1^0;

  sbit ADDR1 = P1^1;

  sbit ADDR2 = P1^2;

  sbit ADDR3 = P1^3;

  sbit ENLED = P1^4;

  void main()

  {

  unsigned int i = 0;

  ENLED = 0;

  ADDR0 = 0;

  ADDR1 = 1;

  ADDR2 = 1;

  ADDR3 = 1; //74HC138开启三极管

  while(1) //程序死循环

  {

  LED = 0; //点亮小灯

  for(i=0;i<30000;i++); //延时一段时间

  LED = 1; //熄灭小灯

  for(i=0;i<30000;i++); //延时一段时间

  }

  }

  大家把这个程序编译一下,下载到单片机里,会发现LED2这个小灯会闪烁了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机数码管显示原理
日志
[51单片机学习笔记FOUR]
51单片机教程-第六集:中断的学习(二)
第二章 点亮你的LED
电子仿真:开关控制LED灯
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服