首页 > 编程知识 正文

74hc595程序详解,74hc140电路图

时间:2023-05-06 16:24:26 阅读:137269 作者:3968

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;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。