74HC165的级联电路图
74HC165是一种高速CMOS器件,74HC165符合JEDEC标准no.7A。 74HC165引脚与低功耗肖特基TTL(lsttl )系列兼容。
74HC165是8位并行读取或串行输入移位寄存器,其利用末级获得可排他串行输出(Q7和Q7 ),而当并行读取(PL )输入为低时,从D0输入到D7端口的并行数据被异步读取到该寄存器
另一方面,PL为高时,数据从DS输入端串行进入寄存器,在时钟脉冲的每个上升沿向右移动1位(Q0Q1Q2等)。 利用此特性,只需将Q7输出绑定到下一级DS输入,即可实现并串行扩展。
74HC165的时钟输入可以具有“栅极控制或”结构,其一个输入端可以作为低有效时钟使能(CE )输入。 CP和CE的引脚分配是独立的,必要时可以根据布线情况进行更换。 仅在CP为高时,允许CE从低到高转换。 在PL上升沿到来之前,无论是CP、CE,数据都必须提高,以免在PL的活动状态下发生移位。
74HC165是一种串行嵌入式芯片,可用于密钥检测。 可外接8个按键,将数据转换成串行传输给单片机。 使用74HC165制作键盘,可以节约很多IO端口。
74hc165使用方法和级联程序
液晶屏程序采用王一进制,从零开始引导单片机中1602程序的修改。
#include 《AT89X52.H》
#include“LCD.h”
# define uint 16未注册int
# define uint 8无信号字符
#defineAUDIO_OUTP0
//
sbitHC165_CE=P1^1; //HC165控制端子l有效
sbitHC165_PL=P1^2; //HC165闩锁销h效率
sbitHC165_CLK=P1^0; //HC165时钟引脚
sbitHC165_IN=P1^3; //HC165数据输出引脚
uint 8地址=0; //本地地址变量
uint 8优先级=0; //优先级变量
//
uint8LCD_DATA1[]={
‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘a’、‘b’、‘c’、‘d’、‘e、‘f’
(;
voidinit_int(void;
voidread_HC165(void;
voidmain(void ) {
Init_INT (; LCD1602 (;
Init_Lcd (; wile(1) {
Read_HC165 (;
display _ LCD _ byte (0,0,‘0’);
display _ LCD _ byte (0,1,‘x’);
display _ LCD _ byte (0,2,LCD_DATA1[Address/16] );
display _ LCD _ byte (0,3,LCD_DATA1[Address];
display _ LCD _ byte (1,0,‘0’);
display _ LCD _ byte (1,1,‘x’);
display _ LCD _ byte (1,2,LCD_DATA1[Priority/16] );
display _ LCD _ byte (1,3,LCD_DATA1[Priority] );
}
}
计时器初始化
//voidinit_int(void ) )。
{
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
TH0=0xF8;
TL0=0xC5;
}
//
//读取优先级和本地地址
//执行本次程序时
//函数将165个信号的优先级
//然后本机的地址送到Priority和Address
//
voidread_HC165(void ) )
{
uint8i=0; //临时变量
uint8BJ_Address=0;
uint8BJ_Priority=0;
HC165_CE=0; 打开//165闸门
HC165_PL=0; //允许数据进入165
for(I=0; I‘8; I//8次读取数据
{
HC165_PL=1; //允许数据移位
HC165_CLK=0; //低电平时读取数据
if(HC165_in ) /数据高位
{
BJ_Priority|=0x80;
}
HC165_CLK=1; //数据移位
}
for(I=0; I‘8; I//读取以下165个数据
{
HC165_CLK=0;
if(HC165_in ) )
{
BJ_Address|=0x80;
}
HC165_CLK=1;
}
HC165_CE=1;
HC165_PL=0;
Address=BJ_Address;
Priority=BJ_Priority;
}
#ifndef_LCD_H_
#define_LCD_H_
#include 《AT89X52.H》
#defineLCD_DATAP3
sbitRS=P1^5;
sbitRW=P1^6;
sbitEN=P1^7;
void液晶屏1602 (void;
voidread_busy(void;
void write _ LCD (unsigned char value,biTI; voidinit_LCD(void;
void delay (未注册公司);
void display _ LCD _ byte (unsigned chary,unsignedcharx,unsignedcharValue );
#endif
#include“LCD.h”
语音液晶屏1602 (语音) )。
{
EN=0;
RS=1;
RW=1;
LCD_DATA=0xFF;
}
voidRead_Busy(void )
{
LCD_DATA=0xFF;
RS=0;
RW=1;
EN=1;
//while(LCD_data0x80;
延迟(100;
EN=0; }
void write _ LCD (unsigned char value,biTI )//i=0写入命令. i=1写入数据;
{
Read_Busy (;
LCD_DATA=Value;
RS=i; RW=0;
EN=1;
EN=0;
}
voidinit_LCD(void )。
{
延迟(15000;
wite _ LCD (0x 38,0 );
延迟(5000;
wite _ LCD (0x 38,0 );
延迟(5000;
wite _ LCD (0x 38,0 );
wite _ LCD (0x 08,0 );
wite _ LCD (0x 01,0 );
wite _ LCD (0x 06,0 );
wite_LCD(0x0c,0 );
}
void display _ LCD _ byte (unsigned char
y,unsignedcharx,unsignedcharValue )
{
y=0x01; //y不能大于1x=0x0F; //x请控制在15以下
是否显示在if(y )//第2行;
{
x=0x40;//显示在第2行,加0X40;
}
x=0x80;
write_LCD(x,0 ); //写入显示位置
write_LCD(value,1; //写入显示数据}
语音延迟(unsigned inti ) )。
{
while(--i;
}