如何成为过硬的硬件工程师-之锁存器

时间:2014-05-04 21:36:40 发布者:sreen_114 本站编辑:越南语翻译


这节课我们来介绍缬方焱蜱一下8D锁存器74LS373的使用,所谓锁存器顾名思义,就是将输入端上一关骇脘骱次传来得数据,通过使能口,将数据定格在上一个数据的状态,不随输入口的变化而变化,当使能口被置为失效时,数据会随着输入口的变化而变化,故而叫做锁存器。

我们先来看一下该集成块的外观:

这是一个标准的20脚DIP(直插型)集成块,在实际运用中我们可以采用贴片的。

我们再来看一下这个芯片的管脚顺序:

真值表:

闲话少叙,我们开始做实验吧!

1、首先我们打来Proteus电路仿真软件,按下图添加如下原件:

2、绘制如下电路图:

3、电路已经绘制好了,下面我们使用8D锁存器显示数字从0-99,让数字自动循环起来:我们打开Keil uv4软件,输入如下代码:

#include <reg51.h>

#define uint8_t unsigned char

#define uint16_t unsigned int

sbit a = P2^0;// 定义数码端口

sbit b = P2^1;

sbit c = P2^2;

sbit d = P2^3;

sbit e = P2^4;

sbit f = P2^5;

sbit g = P2^6;

sbit dp = P2^7;

sbit U1LE = P3^0;

sbit U3LE = P3^1;

// 建立直接用IO口组建的字形码值表(大家不明白可以看下面的表格)

uint8_t idata SEGTable[10]={0x3f,0x06,0x5b,0x54f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void SEGDisplay(void); // 函数声明

void SEGDelayTime(uint16_t Time);

void SEGDelayTime(uint16_t Time) // LED闪烁间隔时间

{

uint16_t i = 0;

uint16_t j = 0;

for(i=0;i<Time;i++)

{

for(j=0;j<255;j++)

{

;;

}

}

}

void SEGDisplay(void) // 循环显示0-9数字

{

uint8_t i = 0;

uint8_t SingleDigits = 0;// 个位数

uint8_t TenDigit = 0;// 十位数

for(i=0;i<=99;i++)

{

SingleDigits = i%10;// 求出个位数

TenDigit = i/10; // 求出十位数

U3LE = 1; // 使能U3LE

P2=SEGTable[SingleDigits]; // 显示个位数

U3LE = 0; // 关闭U3LE

U1LE = 1; // 使能U3LE

P2=SEGTable[TenDigit]; // 显示十位数

U1LE = 0; // 关闭U3LE

SEGDelayTime(100);

}

}

void main(void) // 数码管显示主函数

{

while(1)

{

SEGDisplay();

}

}

4、我们回到Proteus软件,双击CPU将刚刚生成的HEX文件装入CPU中,如何生成HEX文件在第一节如何成为过硬的硬件工程师-之初识单片机中有详细介绍,这里我们不再重复说明了,大家可以参考第一节来做。装好HEX文件后,我们运行来看一下效果:

现在十位的数字是不是不随个位数的变化而变化了呢?这就是锁存器的作用,其实,这是一种硬件实现的方式,如果用软件扫描方式一样可以实现,不过扫描方式要求对程序运行的占用率较高,如果程序运行慢了,会出现数码管闪烁或者变暗的现象,个人不建议这样做,大家可以再加几只数码管,显示的位数可以增加,做一做其它的试验,学习在于多动脑,多动手,希望同学们可以快速的成长起来~~~~~~~~~~~~~~~~~~~感谢你们的支持~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Copyright ©2016 zgdxyuan.com越南语翻译 本站所有内容源自互联网,有事请联系站长邮箱:abc998666@126.com百度sitemap 好搜sitemap 搜狗sitemap 神马sitemap googlesitemap