74hc165简介
74hc165是八位并行输入/串行输出移位寄存器,两片74hc165串联在一起,在时钟脉冲的作用下,从kb-dat读入串行数据,可完成对16位键盘数据扫描读取。
74hc165是一款高速cmos器件,74hc165遵循jedec标准no.7a。74hc165引脚兼容低功耗肖特基ttl(lsttl)系列。
74hc165是8位并行输入串行输出移位寄存器,可在末级得到互斥的串行输出(q0和q7),当并行读取(pl)输入为低时,从d0到d7口输入的并行数据将被异步地读取进寄存器内。而当pl为高时,数据将从ds输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位(q0→q1→q2,等等)。利用这种特性,只要把q7输出绑定到下一级的ds输入,即可实现并转串扩展。
74hc165的时钟输入是一个“门控或”结构,允许其中一个输入端作为低有效时钟使能(ce)输入。cp和ce的引脚分配是独立的并且在必要时,为了布线的方便可以互换。只有在cp为高时,才允许ce由低转高。在pl上升沿来临之前,cp或者ce应当置高,以防止数据在pl的活动状态发生位移。
单片机驱动74hc165程序
当1脚拉低时,八位并行数据被压入锁存器,但与此同时,d7也已经从7脚输出,因此只要再循环7次将数据读出即可
ucharreadexport(void)
{
unsignedchari=0,receive_date=0;
ucharread_int;
clr_p25;//使能控制。为低电平时,并行数据进入锁存器
clr_p25;
read_int=(p2&0x10);//串行输出数据线
if(read_int==0x10)//把最高位读出
receive_date|=0x01;
clr_p03;
set_p25;//为高电平时,可以进行串行数据读出
for(i=1;i《=7;i++)//接下来只要进行7次循环
{
clr_p03;
set_p03;//时钟线,上升沿有效
read_int=(p2&0x10);//串行输出数据线
if(read_int==0x10)
{
receive_date|=(0x01《《i);
}
}
returnreceive_date;
}
基于51单片机之74hc165实验例程
**************************copyright(c)cake*****************************************
==================================================
==============**文件名:main.c==============
==============**作者:caken==============
==============**版本号:v1.0==============
==============**时间:2014.08.16==============
==============**功能描述:74hc165实验测试==============
====================================================
**********************************************************
#include
#include
//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)
{
unsignedchari;
unsignedintindata;
in_pl=0;//上升沿
_nop_();//短暂延时产生一定宽度的脉冲
in_pl=1;//将外部信号全部读入锁存器中
_nop_();
indata=0;//保存数据的变量清0
for(i=0;i《8;i++)
{
indata=indata《《1;//左移一位
if(in_dat==1)
indata=indata+1;//如果in_dat检测到高电平保存数据的变量加1
clk=0;//时钟置0
_nop_();//上升沿
clk=1;//时钟置1
}
return(~indata);//将保存数据的变量取反后返回
}
*********************************************************
函数名:主函数
调用:main
参数:
返回值:
结果:
备注:74hc165控制八个按键
********************************************************
main()
{
while(1)
{
unsignedlonginput=hc165_init();//调用165驱动程序
key=input&0xff;//将数据传给位变量
relay=1;
p2=0xff;//清除
if(k0&k0j)
m0=~m0;//实现脉冲输入大家仔细体会
k0j=~k0;
if(m0){relay=0;p2=0x7f;}//实现脉冲输入
if(k1){beep();p2=0xbf;}//k1为1时开启蜂鸣器和2个灯
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;}
}
}
iPhone8这几大改变很良心!你会考虑入手吗?
485采集模块的应用
为庆祝华为手机发货量突破2亿台 华为官方宣布限量发售2亿台纪念版手机
关于为什么现在PCB有无卤素要求?
Transphorm推出TOLL封装FET,将氮化镓定位为支持高功率能耗人工智能应用的最佳器件
单片机驱动74hc165程序
PCB板设计中高频电路的布线技巧解析
解析智能家居中的嵌入式Internet技术
对于仪器仪表的设计我们应该在哪些方面下功夫
谈谈光模块MSA多源协议
智能型流量传感器是怎么分类的?有哪几种分类?
虹科便携式光谱仪:可视化的掌上光谱课堂
技术革新!菲沃泰PECVD技术直击汽车行业痛点
全球首款集成AI感知算法和SoC芯片的MEMS智能固态激光雷达RS-LiDAR-M1
达摩院发布2021十大科技趋势
码垛机器人相对于其它码垛机的应用优势是什么
补码解释及运算
电力系统市场及晶振技术应用
小米再造红米note4亲兄弟,打造千元新杀器,雷军表示依旧追求性价比
苹果AR耳机什么时候能来临?