74HC164_串入并出8位移位寄存器
- 格式:wps
- 大小:449.05 KB
- 文档页数:10
另一个 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;
/***********************************/ 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;
_ShowValue<<=1;
ShowClck=0;
_nop_(); _nop_();
ShowClck=1;
}
}
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
说明 数据输入 数据输入 输出 地 (0 V) 时钟输入(低电平到高电平边沿触发) 中央复位输入(低电平有效) 输出 正电源罗
74HC164 中文资料(功能,真值表,引脚图及电气参数介绍)
SN54HC164,/SN74HC164 是 8 位移位寄存器,当其中一个(或二个)选 通串行输入端的低电平禁止进入新数据,并把第一个触发器在下一个时 钟脉冲来后复位到低电平时,门控串行输入端(A 和 B) 可完全控制 输入数据。一个高电平输入后就使另一个输入端赋能,这个输入就决定 了第一个触发器的状态。虽然不管时钟处于高电平或低电平时,串行输 入端的数据都可以被改变,但只有满足建立条件的信息才能被输入。时 钟控制发生在时钟输入由低电平到高电平的跃变上。为了减小传输线效 应,所有输入端均采用二极管钳位。
74hc164 可以用作 LED 数码管的驱动的 c 程序
74HC164 是个移位寄存器,以下程序是我用过的,绝对没问题:
其中 ShowDatid Show_164(unsigned char _ShowValue) { unsigned char Count0;
{ 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++); }}
/info/cmos/0083928.html
H=高电平(稳定态) L=低电平(稳定态) ×=不定 ↑=从低电平转换到高电平 QA0…QH0=在稳定态输入条件建立前 QA…QH 的相应电平 QAn…QHn=在最近的时钟输入条件(↑)建立前 QA…QH 的相应电平,表示移位一位
8 位串入、并出移位寄存器 1. 概述 74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件 的引脚兼容。74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据, 然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可 以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起, 或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(D SA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清 除寄存器,强制所有的输出为低电平。 2. 特性
3. 功能图
图 1. 逻辑符号
图 2. IEC 逻辑符号
图 3. 逻辑图
图 4. 功能图 4. 引脚信息
图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置 引脚说明
符号 DSA DSB Q0~Q3 GND CP /M/R Q4~Q7 VCC
引脚 1 1 3~6 7 8 9 10~13 14
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
• 门控串行数据输入 • 异步中央复位 • 符合 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 。
/* 74LS164 数码管动态显示*/
/**************************************/
//-------------------------------------库函数声明,管脚定义------------
#include <at89x51.h>
#define uchar unsigned char
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
P2_1=0;
numer=dis_code[shi]; //十位移位 out_simuseri(numer); delay(5); P2_1=1; } m=0; } } } /****************************************/ ……………………………………………………………………………………………… ************************************************************************
74HC164 典型工作时序图
我之前写的 164 扩展程序,参考一下吧!应该可以解决你问题。
其实你只要用到一片 164 就够了,作动态扫描,下面程序是两个数码管动态扫描,164 并行输出口再接一片功率驱动芯片,如 TD62083。
程序如下:
/**************************************/
for(Count0=0;Count0<=7;Count0++) { if((_ShowValue&0x80)==0x80) ShowData=1; else ShowData=0;
_ShowValue<<=1;
ShowClck=0;
_nop_(); _nop_();
ShowClck=1;
}
}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx