1、74HC164是8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
2、在keil c51中新建工程ex57,编写如下程序代码,编译并生成ex57.hex文件
//8位串行输入/并行输出器件74hc164演示实例
#include <reg51.h> // 包含头文件
#include <reg51.h> // 包含头文件
sbit HC164_data = P2^4; // 端口引脚定义。,数据输出端,
sbit HC164_CLK = P2^1; //时钟输出端
sbit HC164_CLK = P2^1; //时钟输出端
// 延时函数
void delay(void)
{
unsigned int i,j;
for(i=0;i<1000;i++)
{
for(j = 0;j < 500;j++);
}
}
void delay(void)
{
unsigned int i,j;
for(i=0;i<1000;i++)
{
for(j = 0;j < 500;j++);
}
}
// 主函数
void main(void)
{
unsigned char i;
P2 = 0x00;
for(i = 0;i < 8;i++) //
{
HC164_data = 1 << i; // 数据串行输出,一次移动一位
HC164_CLK = 1; // 数据在上升沿期间输出
HC164_CLK = 0; //
void main(void)
{
unsigned char i;
P2 = 0x00;
for(i = 0;i < 8;i++) //
{
HC164_data = 1 << i; // 数据串行输出,一次移动一位
HC164_CLK = 1; // 数据在上升沿期间输出
HC164_CLK = 0; //
delay();
}
}
while(1)
{
}
}
{
}
}
3、在proteus中新建仿真文件ex57.dsn,电路原理图如下所示
4、将ex57.hex文件载入at89c51中,启动仿真,观察运行结果。下图是某一时刻程序运行结果。