8 位串入、并出移位寄存器
1. 概述
74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 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. 功能图
3. 功能图
图 1. 逻辑符号
图 2. IEC 逻辑符号
图 3. 逻辑图
图 4. 功能图
4.引脚信息
图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置
引脚说明
符号 |
引脚 |
说明 |
DSA |
1 |
数据输入 |
DSB |
1 |
数据输入 |
Q0~Q3 |
3~6 |
输出 |
GND |
7 |
地 (0 V) |
CP |
8 |
时钟输入(低电平到高电平边沿触发) |
/M/R |
9 |
中央复位输入(低电平有效) |
Q4~Q7 |
10~13 |
输出 |
VCC |
14 |
正电源罗亩的笔记 |
5. 功能表
工作模式 |
输入 |
输出 | ||||
/M/R |
CP |
DSA |
DSB |
Q0 |
Q1 至 Q7 | |
复位(清除) |
L |
L |
X |
X |
L |
L 至 L |
移位
|
H |
↑ |
l |
l |
L |
q0 至 q6 |
H |
↑ |
l |
h |
L |
q0 至 q6 | |
H |
↑ |
h |
l |
L |
q0 至 q6 | |
H |
↑ |
h |
H |
H |
q0 至 q6 |
H = HIGH(高)电平
h = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 HIGH(高)电平
L = LOW(低)电平
l = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 LOW(低)电平
q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入 (referenced input) 的状态
↑ = 低-至-高时钟跃变
6. 极限值
符合绝对最大额定值体系 (IEC 60134) 的规定。电压参考点为 GND(地 = 0 V)。
[1] 对于 DIP14 封装:Ptot 在超过 70 °C 时以 12 mW/K 的速度线性降低。
[2] 对于 SO14 封装:Ptot 在超过 70 °C 时以 8 mW/K 的速度线性降低。
对于 SSOP14 和 TSSOP14 封装:Ptot 在超过 60 °C 时以 5.5 mW/K 的速度线性降低。
对于 DHVQFN14 封装:Ptot 在超过 60 °C 时以 4.5 mW/K 的速度线性降低。
74HC164驱动程序
//-------------------------------------库函数声明,管脚定义--------------
#include <reg52.h>
sbit simuseri_CLK=P1^6; //用P1^6模拟串口时钟
sbit simuseri_DATA=P1^5; //用P1^5模拟串口数据
sbit drive74164_CLR=P1^7; //用P1^7控制CLR
sbit a0=ACC^0;
//-----------------------------------------------------------------------
// 函数名称:out_simuseri
// 输入参数:data_buf
// 输出参数:无
// 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA
//-----------------------------------------------------------------------
void out_simuseri(char data_buf)
{
char i;
i=8;
ACC=data_buf;
do
{
simuseri_CLK=0;
simuseri_DATA=a0;
simuseri_CLK=1;
ACC=ACC>>1;
}
while(--i!=0);
simuseri_CLK=0;
}
//-----------------------------------------------------------------------
// 函数名称:PA_out
// 输入参数:Pseri_out,需要输出的8位数据
// 输出参数:无
// 功能说明:将Pseri_out中的数据送到74165并行口A-G输出
//-----------------------------------------------------------------------
void PA_out (char Pseri_out )
{
drive74165_CLR =0; //并口输出清零
drive74165_CLR =1; //开始串行移位
out_simuseri(Pseri_out);
}
/*********************************************************************************/
/*********************************************************************************/
/*********************************************************************************/
74hc164驱动数码管,我试了很久了,也看了很多资料,都不成功,真郁闷,请大家帮忙!
首先,我用一颗单片机发74hc164发送串行数据,比如发送的是0-9的数字,每发完一个数字,暂停3秒发下一个数字,如此循环,数码管为共阴极数码管,电路图如下:
图中的正好是刚发送完数字5,二进制为101,根据串行输入,并行输出的特点,输出了101的高电平,很显然数码管并没有显示5,但从多方面资料证实,74hc164是完全可以用来驱动数码管的,我就疑问了,数码要怎么才能实现显示5呢?
数码要怎么才能实现显示5呢? 答:输出101是正确的,5字三划,要三个1,首先要学会编码。。。。应该输入8bit的数,分别对应数码管8个二极管,还要看共阴,共阳 ,请好好看看7段数码管原理,7448自带译码,直接输四位BCD, 164可没这功能 。。。
单个数码管用3-8译码器作处理 -A- F| |B |-G-| E| |C -D- .DOT 数码管显示 数字 A B C D E F G DOT 全值 0 1 1 1 1 1 1 0 0 0110 111(0/1) 0XFC 1 0 1 1 0 0 0 0 0 0110 000(0/1) 0X60 2 1 1 0 1 1 0 1 0 1101 101(0/1) 0XDA 3 1 1 1 1 0 0 1 0 1111 001(0/1) 0XF2 4 0 1 1 0 0 1 1 0 0110 011(0/1) 0X66 5 1 0 1 1 0 1 1 0 1011 011(0/1) 0XB6 6 1 0 1 1 1 1 1 0 1011 111(0/1) 0XBE 7 1 1 1 0 0 0 0 0 1110 000(0/1) 0XE0 8 1 1 1 1 1 1 1 0 1111 111(0/1) 0XFE 9 1 1 1 1 0 1 1 0 1111 011(0/1) 0XF6 A 1 1 1 0 1 1 1 0 1110 111(0/1) 0XEE b 0 0 1 1 1 1 1 0 0011 111(0/1) 0X3E C 1 0 0 1 1 1 0 0 1001 110(0/1) 0X9C d 0 1 1 1 1 0 1 0 0111 101(0/1) 0X7A E 1 0 0 1 1 1 1 0 1001 111(0/1) 0X9E F 1 0 0 0 1 1 1 0 1000 111(0/1) 0X8E 注意这里DOT(也就是DP)后都是0,要改变DP,另外作与或 还有,这里是从高到低,你要从低到高的话,将序列反过来 |
__________________________ 不明白先看数据手册,看数据手册一定要仔细!! |