74HC165是一个8位并行输入/串行输出的器件。根据该器件的真值表,可以了解其读取数据所需的时序

main.c代码

#include<reg52.h>
sbit HC165_DATA = P2^0;//定义串行数据口
sbit HC165_SH = P2^1;//定义数据锁存口
sbit HC165_CLK=P2^2;//定义时钟口
//定义延时函数
void delayms(unsigned int x)
{
   unsigned char i;
  while(x--)
  {
    for(i = 0;i < 120;i++);
  }
}
//主函数
void main(){
	while(1){
	unsigned char dat = 0,i,temp = 0x80;
 	P3 = 0xff;      //  先熄灭所有LED
	P2 = 0xff;      //  P2口输出高,当P2口做输入口时,要先输出1才能正确读取端口状态
	HC165_CLK = 0;     //  串行时钟端口置0
	HC165_SH = 0;    //  锁存端口置0,读入8位并行数据
	HC165_SH = 1;    //  锁存端口置1,保持读入的数据
	for(i = 0;i < 8;i++)  //  依次读入8位数据
	{
     if(HC165_DATA)   //  判断读取的是高电平还是低电平
    {
		dat = dat|temp;  //   合并读取的位数据
		HC165_CLK = 1;   //   产生一个上升沿,串出下一个数据
		temp = temp >> 1;
		delayms(1);
		HC165_CLK = 0;
		delayms(1);
		}
	}
	P3 = dat;  //    获得的数据送P3口
	delayms(500);
	}
}

protues仿真图:

74HC165是8位并行读取或串行输入移位寄存器,可在末级得到互补的串行输出(Q7和!Q7),当异步并行读取引脚(!PL)输入为低时,从D0到D7口输入的并行数据将被读取进寄存器内。而当异步并行读取引脚为高时,数据将在每个时钟脉冲的上升沿从 

 引脚串行进入寄存器并将现有数据右移一位( 

 以此类推)。利用这种特性,只要把Q7输出绑定到下一级的 

 输入,即可实现移位寄存器位数的扩展。

分类: MCS-51

0 条评论

发表评论

电子邮件地址不会被公开。