基于51单片机的74系列IC应用
本帖已删
第一讲:基于51单片机的74系列IC应用_74xx00
机构:影子科技 作 者: 暮汐影子 交流群:312503658
一、74xx00(四与非门)介绍:74xx00是一个四与非门IC,要想知道它的操控方式,我们就必须要先来看懂它的真值表,只要看懂了真值表就知道是怎么用的了。
1、上图是74xx00的真值表,A、B是输入控制端,Y是信号输出端。他们的逻辑表达式是:Y = !(A&B),所以A或者B只要有一个是0,Y就是1;A和B都是1,Y才会是0。所以根据这个特性,我们可以用它来做一些控制,比如:我有两个信号控制量,就启动系统,如果只有一个信号或者没有信号控制量,则不能启动系统。这个比用单独一个信号控制量控制系统要好,更安全。
2、74xx00的详细资料请查看如下PDF文档,此PDF文档不是本人原创,是在网络上下载的。
二、Proteus仿真文件:
三、下面给大家讲一个简单的案例,主要是熟悉如何进行控制。
1、项目要求:用“74xx00(四与非门)”的四路与非门控制4个LED灯,实现以1HZ的频率流水闪。
2、程序设计:
/******************************************************
程序:第三讲:基于51单片机的74系列IC应用_74xx02或非门
主要内容: 74xx02 的简单应用
功能描述: 1、用51单片机控制74xx02实现简单的电机起停。
2、起停时间间隔5S。
机构:影子科技 作 者: 暮汐影子
交流群:312503658
日 期: 2014.09.21备注:欢迎大家提供更好的想法和方法,一起学习,一起进步。
O(∩_∩)O~
*******************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar P_Temp = 0;
void F_IC_Init(void);
void L_IO_Init(void);
void F_74xx00(void);
void F_DelayMS(uint Xms) //延时函数,Xms = 1;大约为1ms。
{
uint x;
for(;Xms>0;Xms--) //Xms * 1ms
for(x=122;x>0;x--); //1ms循环
}
//=======================================
//main:主函数;主函数中一般只调用一些主
//要功能函数,尽量不要把所有的代码都写在
//主函数,要养成功能模块化的好习惯。
//=======================================
void main(void)
{
F_IC_Init(); //IC初始化
F_DelayMS(10);//稍作延时,让IC稳定下来。
while(1)
{
F_74xx00(); //74xx00控制LED功能
F_DelayMS(1000); //延时1s
}
}
//=======================================
//F_IC_Init:IC初始化;此处为上电初始化,
//在进入主函数之前,需要将所用到的功能
//寄存器/IO口等等。
//=======================================
void F_IC_Init(void)
{
L_IO_Init(); //初始化用到的IO口。
}
//=======================================
//L_IO_Init:初始化用到的IO口
//=======================================
void L_IO_Init(void)
{
P1 = 0x03;
}
//=======================================
//F_74xx00:控制74xx00IC
//=======================================
void F_74xx00(void)
{
P1=_crol_(P1,2); //_crol_ 循环左移
}
备注:欢迎大家提出不同的意见和方法,以上内容只是为了跟大家一起分享学习。谢谢!
第二讲:基于51单片机的74系列IC应用_74xx01_74xx03与非门(集电极开路)
机构:影子科技 作 者: 暮汐影子 交流群:312503658
一、74xx01(四2输入与非门)介绍:74xx01是一个四路2与非门IC,要想知道它的操控方式,我们就必须要先来看懂它的真值表,只要看懂了真值表就知道是怎么用的了。
真值表:
1、细心的同志们不难发现74xx01和74xx00的真值表是一样的,确实是这样,74xx00和74xx01都是四路2输入与非门,那就奇怪了,功能一样,为什么要搞2种IC呢?其实虽然他们的逻辑是一样的,但是它们还是有区别的。
区别:
(1)与74xx00不同之处在于在74ls01可直接将几个逻辑门(集电极开路门(OC门))的输出端相连。这种输出直接相连,实现输出与功能的方式称为线与。即 Y=Y1·Y2。
(2)普通TTL与非门的输出端是不允许直接相连的, 因为当一个门的输出为高电平(Y1),另一个为低电平(Y2)时, 将有一个很大的电流从UCC经Y1到Y2,对器件造成损坏。
2、说到这里,我们就不得不来了解一下线与功能了。
(1)线与逻辑,即两个输出端(包括两个以上)直接互连就可以实现“AND”的逻辑功能。
(2)一般TTL门输出端并不能直接并接使用,在硬件上,可用集电极开路门(OC门)或三态门(TS门)来实现。用OC门实现线与,应同时在输出端口应加一个上拉电阻。
(3)下面用一张图片来说明:下图中的Y1、Y2连在一起,逻辑Y=Y1*Y2,74xx00不能这样使用,因为74xx00是一般的TTL门输出电路。所以如果需要用到两个(两个以上)输出信号来控制系统的话,可以用74xx01,不能用74xx00。
(4)在这里我要为大家推荐一款逻辑化简软件:logic friday。
3、74xx03也是集电极开路门(OC门)的四路2与非门,那么它跟74xx01的区别不是很大,主要是IC引脚和电气特性不一样,功能是一样的。
4、所以大家一定要注意74xx01、74xx03和74xx00的区别,千万别用错了,不然工程一旦出错,损失将会很严重。
二、附件如下:
备注:欢迎大家提出不同的意见和方法,以上内容只是为了跟大家一起分享学习。下节更精彩,谢谢!
第三讲:基于51单片机的74系列IC应用_74xx02或非门
机构:影子科技 作 者: 暮汐影子 交流群:312503658
一、74xx02(四2输入或非门)介绍:74xx02是一个四路2输入或非门IC,要想知道它的操控方式,我们就必须要先来看懂它的真值表,只要看懂了真值表就知道是怎么用的了。
真值表:
1、上图为74xx02的真值表,A、B为输入控制端,Y为输出端,逻辑表达式件上图,A或者B只要有一个是1,Y就是0;A和B都是0,Y才会是1。根据这个特性,主要应用就是双输入信号控制系统,其实跟与非门的应用差不多,都是通过双输入信号控制输出,主要是逻辑原理不一样。
2、看懂IC的真值表,基本就可以知道怎么应用了,那该IC适不适合你目前的开发项目,这个还要根据项目的具体情况来分析,例如工作电压、工作电流、静态电流、工作温度等等,这就需要通过IC的电气参数来进行分析,看该IC适不适合你的方案,在这里电气参数我就不进行分析,我将74xx02 PDF资料分享给大家,并非本人原创,仅供参考。
二、附件分享:
三、下面给大家讲一个简单的案例,主要是熟悉如何进行控制。
1、项目要求:用“74xx02(四2输入或非门)”控制1个马达起停,控制方法用51单片机和按键两种方式实现。
2、程序设计(仅作参考):
/******************************************************
程序:第三讲:基于51单片机的74系列IC应用_74xx02或非门
主要内容: 74xx02 的简单应用
功能描述: 1、用51单片机控制74xx02实现简单的电机起停。
2、起停时间间隔5S。
机构:影子科技 作 者: 暮汐影子
交流群:312503658
日 期: 2014.09.21备注:欢迎大家提供更好的想法和方法,一起学习,一起进步。
O(∩_∩)O~
*******************************************************/
#include<reg52.h>
//#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar P_Temp = 0;
void F_IC_Init(void);
void L_IO_Init(void);
void F_74xx02(void);
void F_DelayMS(uint Xms) //12M晶振,延时函数,Xms = 1;大约为1ms。
{
uint x;
for(;Xms>0;Xms--) //Xms * 1ms
for(x=122;x>0;x--); //1ms循环
}
//=======================================
//main:主函数;主函数中一般只调用一些主
//要功能函数,尽量不要把所有的代码都写在
//主函数,要养成功能模块化的好习惯。
//=======================================
void main(void)
{
F_IC_Init(); //IC初始化
F_DelayMS(10);//稍作延时,让IC稳定下来。
while(1)
{
F_DelayMS(5000); //延时5s
F_74xx02(); //74xx02控制LED功能
}
}
//=======================================
//F_IC_Init:IC初始化;此处为上电初始化,
//在进入主函数之前,需要将所用到的功能
//寄存器/IO口等等。
//=======================================
void F_IC_Init(void)
{
L_IO_Init(); //初始化用到的IO口。
}
//=======================================
//L_IO_Init:初始化用到的IO口
//=======================================
void L_IO_Init(void)
{
P1 = 0x03;
}
//=======================================
//F_74xx02:控制74xx02IC
//=======================================
void F_74xx02(void)
{
P1 ^= 0x03; //异或取反
}
说明:仅供交流学习参考。
备注:欢迎大家提出不同的意见和方法,以上内容只是为了跟大家一起分享学习。下节更精彩,谢谢!