当前位置:文档之家› 74HC164 串入、并出8 位移位寄存器

74HC164 串入、并出8 位移位寄存器

8 位串入、并出移位寄存器
1. 概述
74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。

74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。

数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。

两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(D SA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。

主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。

2. 特性
•门控串行数据输入
•异步中央复位
•符合JEDEC 标准no. 7A
•静电放电(ESD) 保护:
·HBM EIA/JESD22-A114-B 超过2000 V
·MM EIA/JESD22-A115-A 超过200 V 。

•多种封装形式
•额定从-40 °C 至+85 °C 和-40 °C 至+125 °C 。

3. 功能图
图 1. 逻辑符号
图 2. IEC 逻辑符号
图 3. 逻辑图
图 4. 功能图
4. 引脚信息
图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置
引脚说明
符号引脚说明
DSA 1数据输入
DSB 1数据输入
Q0~Q3 3~6输出
GND7 地(0 V)
CP 8时钟输入(低电平到高电平边沿触发)
/M/R 9中央复位输入(低电平有效)
Q4~Q710~13输出
VCC14正电源罗
74HC164中文资料(功能,真值表,引脚图及电气参数介绍)
SN54HC164,/SN74HC164是8位移位寄存器,当其中一个(或二个)选通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时钟脉冲来后复位到低电平时,门控串行输入端(A 和B)可完全控制输入数据。

一个高电平输入后就使另一个输入端赋能,这个输入就决定了第一个触发器的状态。

虽然不管时钟处于高电平或低电平时,串行输入端的数据都可以被改变,但只有满足建立条件的信息才能被输入。

时钟控制发生在时钟输入由低电平到高电平的跃变上。

为了减小传输线效应,所有输入端均采用二极管钳位。

/info/cmos/0083928.html
H=高电平(稳定态)L=低电平(稳定态)×=不定↑=从低电平转换到高电平
QA0…QH0=在稳定态输入条件建立前QA…QH 的相应电平
QAn…QHn=在最近的时钟输入条件(↑)建立前QA…QH 的相应电平,表示移位一位
74HC164典型工作时序图
我之前写的164扩展程序,参考一下吧!应该可以解决你问题。

其实你只要用到一片164就够了,作动态扫描,下面程序是两个数码管动态扫描,164并行输出口再接一片功率驱动芯片,如TD62083。

程序如下:
/**************************************/
/* 74LS164数码管动态显示*/
/**************************************/
//-------------------------------------库函数声明,管脚定义------------
#include <at89x51.h>
#define uchar unsigned char
sbit simuseri_CLK=P1^1; //用P1^1模拟串口时钟
sbit simuseri_DATA=P1^0; //用P1^0模拟串口数据
sbit a0=ACC^0;
unsigned char code dis_code[11]={0x28,0x7E,0xa2,0x62, //查表显示0, 1、、9 0x74,0x61,0x21,0x7A,0x20,0x60, 0x01};
uchar numer,temp;
uchar ge,shi;
//----------------------------------------------------------------------------
// 函数名称:out_simuseri
// 输入参数:data_buf
// 输出参数:无
// 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA //----------------------------------------------------------------------------
void out_simuseri(uchar data_buf)
{
uchar i;
i=8;
ACC=data_buf;
do
{
simuseri_CLK=0;
simuseri_DATA=a0;
simuseri_CLK=1;
ACC=ACC>>1;
}
while(--i!=0);
}
/************************************/
void delay(uchar ms) //延时程序
{
uchar i;
while(ms--)
{
for (i=0;i<125;i++);
}}
/***********************************/
void main()
{
uchar m;
while(1)
{
for(temp=0;temp<99;temp++)
{
ge=temp/10;
shi=temp%10;
for(m=0;m<20;m++) //显示频率200ms加1次
{
P2_0=0; //位段码
numer=dis_code[ge];
out_simuseri(numer); //个位移位显示
delay(5);
P2_0=1;
P2_1=0;
numer=dis_code[shi]; //十位移位
out_simuseri(numer);
delay(5);
P2_1=1;
}
m=0;
}
}
}
/****************************************/ ………………………………………………………………………………………………************************************************************************
74hc164可以用作LED数码管的驱动的c程序
74HC164是个移位寄存器,以下程序是我用过的,绝对没问题:
其中ShowData为164数据脚,ShowClck为164时钟脚;
void Show_164(unsigned char _ShowValue)
{
unsigned char Count0;
for(Count0=0;Count0<=7;Count0++)
{
if((_ShowValue&0x80)==0x80)
ShowData=1;
else
ShowData=0;
_ShowValue<<=1;
ShowClck=0;
_nop_();
_nop_();
ShowClck=1;
}
} xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
另一个C程序;
74HC164是个移位寄存器,以下程序是我用过的,绝对没问题:
其中ShowData为164数据脚,ShowClck为164时钟脚;
void Show_164(unsigned char _ShowValue)
{
unsigned char Count0;
for(Count0=0;Count0<=7;Count0++)
{
if((_ShowValue&0x80)==0x80)
ShowData=1;
else
ShowData=0;
_ShowValue<<=1;
ShowClck=0;
_nop_();
_nop_();
ShowClck=1;
}
} Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。

相关主题