74hc165的级联电路图
74hc165是一款高速cmos器件,74hc165遵循jedec标准no.7a。74hc165引脚兼容低功耗肖特基ttl(lsttl)系列。
74hc165是8位并行读取或串行输入移位寄存器,可在末级得到互斥的串行输出(q7和q7),当并行读取(pl)输入为低时,从d0到d7口输入的并行数据将被异步地读取进寄存器内。
而当pl为高时,数据将从ds输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位(q0→q1→q2,等等)。利用这种特性,只要把q7输出绑定到下一级的ds输入,即可实现并转串扩展。
74hc165的时钟输入是一个“门控或”结构,允许其中一个输入端作为低有效时钟使能(ce)输入。cp和ce的引脚分配是独立的并且在必要时,为了布线的方便可以互换。只有在cp为高时,才允许ce由低转高。在pl上升沿来临之前,不论是cp还是ce,都应当置高,以防止数据在pl的活动状态发生位移。
74hc165是一种并入串出的芯片,我们可以用它来做按键检测。它可以外接8个接键,然后将数据转成串行的送入单片机。如果用74hc165做键盘的话,能节省很多io口。
74hc165使用方法与级联程序
lcd程序是采用wang1jin带您从零学单片机里面的1602程序修改。
#include《at89x52.h》
#include“lcd.h”
#defineuint16unsignedint
#defineuint8unsignedchar
#defineaudio_outp0
///////////////////////////////////////////////////////
sbithc165_ce=p1^1;//hc165控制端l有效
sbithc165_pl=p1^2;//hc165锁存引脚h高效
sbithc165_clk=p1^0;//hc165时钟引脚
sbithc165_in=p1^3;//hc165数据输出引脚
uint8address=0;//本地地址变量
uint8priority=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();while(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%16]);
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%16]);
}
}
////////////////////////////////////////////////定时器初始化
//////////////////////////////////////////////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》》i;
}
hc165_clk=1;//数据移位
}
for(i=0;i《8;i++)//读取下一个165的数据
{
hc165_clk=0;
if(hc165_in)
{
bj_address|=0x80》》i;
}
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;
voidlcd1602(void);
voidread_busy(void);
voidwrite_lcd(unsignedcharvalue,biti);voidinit_lcd(void);
voiddelay(unsignedinti);
voiddisplay_lcd_byte(unsignedchary,unsignedcharx,unsignedcharvalue);
#endif
#include“lcd.h”
voidlcd1602(void)
{
en=0;
rs=1;
rw=1;
lcd_data=0xff;
}
voidread_busy(void)
{
lcd_data=0xff;
rs=0;
rw=1;
en=1;
//while(lcd_data&0x80);
delay(100);
en=0;}
voidwrite_lcd(unsignedcharvalue,biti)//i=0写指令.i=1写数据;
{
read_busy();
lcd_data=value;
rs=i;rw=0;
en=1;
en=0;
}
voidinit_lcd(void)
{
delay(15000);
write_lcd(0x38,0);
delay(5000);
write_lcd(0x38,0);
delay(5000);
write_lcd(0x38,0);
write_lcd(0x08,0);
write_lcd(0x01,0);
write_lcd(0x06,0);
write_lcd(0x0c,0);
}
voiddisplay_lcd_byte(unsignedchar
y,unsignedcharx,unsignedcharvalue)
{
y&=0x01;//y不能大于1x&=0x0f;//x不能大于15
if(y)//是否显示在第二行;
{
x+=0x40;//显示在第二行,加0x40;
}
x+=0x80;
write_lcd(x,0);//写入显示的位置
write_lcd(value,1);//写入显示数据}
voiddelay(unsignedinti)
{
while(--i);
}
交流接触器为什么要用短路环
16G CWDM SFP+光模块特性及解决方案
“黑金刚”大战“红皇后”!究竟会碰撞出怎样的火花?
常见的数字货币矿池有哪些
三星推出了包含运动控制器的Odyssey(玄龙)头显
74hc165级联用法(74hc165级联电路图及程序)
大模型,能给在线教育讲个新故事吗?
15W无线快充离我们还有多远
关于全局智能的介绍和影响分析
LED照明产品最新能效要求将正式在欧洲实施
关于工业机器人的一些基本概念
厦门举办首届无人机行业交流,探索无人机的应用蓝海
关于汽车电子ECU的三种形式
我国首次实现对特高压交流变压器套管运行状态的实时监测
微软可能很快将云数据存储在DNA存储中
华为P10评测:麒麟960+EMUI 5.1 注定不凡
List集合:多线程快速处理
如何制作玩具锂电池充电器
VR市场规模比肩智能手机 要颠覆还有两个关键点
三相异步电动机上的故障解决