74HC165简介
74HC165是一款8位并行输入/串行输出移位寄存器,由2个74HC165串联而成,通过时钟脉冲作用,可从KB-DAT读取串行数据,并可扫描读取16位键盘数据。
74HC165是一种高速CMOS器件,74HC165符合JEDEC标准no.7A。 74HC165引脚与低功耗肖特基TTL(lsttl )系列兼容。
74HC165是一个8位并行输入串行输出移位寄存器,在末级提供独占串行输出(Q0和Q7 ),并行读(PL )输入为低时,从D0输入到D7端口的并行数据异步读取寄存器另一方面,PL为高时,数据从DS输入端串行进入寄存器,在时钟脉冲的每个上升沿向右移动1位(Q0Q1Q2等)。 利用此特性,只需将Q7输出绑定到下一级DS输入,即可实现并串行扩展。
74HC165的时钟输入可以具有“栅极控制或”结构,其一个输入端可以作为低有效时钟使能(CE )输入。 CP和CE的引脚分配是独立的,必要时可以根据布线情况进行更换。 仅在CP为高时,允许CE从低到高转换。 在PL上升沿到来之前,应提高CP或CE,避免数据在PL活动状态下移位。
单片机驱动74hc165程序
当1针下降时,8位并行数据被压入锁存器,但与此同时,由于D7也已经从7针输出,所以再循环7次读出数据即可
是ucharreadexport(void )
{
unsignedchari=0,receive_date=0;
ucharRead_Int;
Clr_P25; //启用控件。 低电平时,并行数据进入锁存器
Clr_P25;
read_int=(p20x10 ); //串行输出数据线
if(read_int==0x10 )//读取最高有效位
receive_date|=0x01;
Clr_P03;
Set_P25; //高电平时,可读取串行数据
for(I=1; i《=7; I ) )//接下来只需进行7次循环
{
Clr_P03;
Set_P03; //时钟线,上升沿有效
read_int=(p20x10 ); //串行输出数据线
if(read_int==0x10 ) )。
{
receive_date|=(0x01『《I”);
}
}
returnreceive_date;
}
基于51单片机的74HC165实验例程
****copyright(c ) cake (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * cake
=========================================================================================
==============**文件名: main.c===============main.c======文件名
===========* *作者: caken=====================作者: caken===================作者=can
===========* *版本号: v 1.0===============v 1.0版本号
==============**时间: 2014.08.16==============时间
===========* *功能说明: 74HC165实验测试=======================功能说明: 74HC165实验测试
=========================================================================================
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
#包含
#包含
//SPI接口
sbitCLK=P3^6; //串行时钟
sbiTIN_PL=P1^6; //将数据加载到锁存器
sbiTIN_Dat=P1^7; //数据按P1.7脚转移到单片机内处理
sbitRELAY=P1^4; //继电器
sbitBEEP=P1^5; //蜂鸣器
unsignedcharbdataKey;
sbitK0=Key^0; //位定义
sbitK1=Key^1; //位定义
sbitK2=Key^2; //位定义
sbitK3=Key^3; //位定义
sbitK4=Key^4; //位定义
sbitK5=Key^5; //位定义
sbitK6=Key^6; //位定义
sbitK7=Key^7; //位定义
bitM0,K0J; //位定义
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
函数名称:
调用: beep (;
参数:
返回值:
结果:
备注:蜂鸣器(蜂鸣器响) ) )。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
voidbeep () )
{
unsignedchari,j;
for(I=0; i《2; I )
{
for(j=0; j《255; j )
{_nop_ (); }
BEEP=! BEEP; //BEEP反转
}
BEEP=1; //关掉蜂鸣器
}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
函数名称: 74HC165函数的初始化
呼叫: HC165_Init (;
参数:
返回值:
结果:
备注: IN_PL上升沿、CLK上升沿
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
这是unsignedlongHC165_init(void )
{
无符号字符;
unsignedinTIndata;
IN_PL=0; //站起来
_nop_ (); //在短时滞下产生一定宽度的脉冲
IN_PL=1; //将外部信号全部读取到锁存器
_nop_ ();
indata=0; //保存数据的变量为0
for(I=0; I‘8; I )
{
in data=in data《; //向左移动一位
if(IN_Dat==1)
indata=indata 1; 若检测到IN_Dat对高电平保存数据的变量加1
CLK=0; //时钟组0
_nop_ (); //站起来
CLK=1; //时钟组1
}
返回(in data ); //反转保存数据的变量后返回
}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
函数名称:主函数
呼叫: main
参数:
返回值:
结果:
备注: 74HC165控制8个键
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
main () )
{
while(1)。
{
unsignedlongInput=HC165_Init (; 调用//165驱动程序
Key=Input0xff; //将数据传递给位变量
RELAY=1
P2=0xff; //清除
if(k0k0j ) )。
M0=~M0; //实现脉冲输入,大家都很清楚
K0J=~K0;
if(m0 ) {RELAY=0; P2=0x7f; //实现脉冲输入
if(K1 ) {beep; P2=0xbf; }//K1为1时打开蜂鸣器和两个灯
if(K2 ) {beep; P2=0xdf; }
if(K3 ) {beep; P2=0xef; }
if(K4 ) {beep; P2=0xf7; }
if(K5 ) {beep; P2=0xfb; }
if(K6 ) {beep; P2=0xfd; }
if(K7 ) {beep; P2=0xfe; }
}
}