74HC165连级使用方法及程序实例
- 格式:pdf
- 大小:98.08 KB
- 文档页数:4
74HC165汇编、C语言编程。
简介:首先shld置低电平,延时大约1ms,完成数据读取,然后拉高。
接着进入一个8次的循环,首先clk=0;读取so的值,在clk=1;依次循环8次。
(首先读取的是高位,依次递减)注意:本例采用的是显示哪个按键被按下,即将读取的状态赋值给P3口,再由P3口通过数码管显示!!!!(共阴极)(1)汇编:/*在本例中,P2.0--so;P2.1--clkP2.2--shld*/ORG 0000H//------主函数-------MAIN:CLR P2.2 //拉低NOPNOP //空指令SETB P2.2 //拉高MOV R0,#8 //循环次数MOV R1,#0 //存放LOOP:CLR P2.1 //拉低MOV A,R1RL A //左环移MOV R1,AMOV A,P2 //读入P2状态ANL A,#1 //读取第一位数ORL A,R1 //或MOV R1,A //赋值SETB P2.1 //拉高DJNZ R0,LOOP //减一不为0,跳转loop MOV A,R1MOV P3,A //赋值给P3口SJMP MAIN //跳转END(2)C语言#include<reg51.h>sbit shld=P2^1;sbit clk=P2^0;sbit so=P2^2;int n=0;//-------延时子程序------void delay(int i){int j;while(i--)for(j=100;j>0;j--);}//-----读信号子程序------void read(){int i,m=0;shld=0;//低电平读入信号delay(10);//延时shld=1;//置高电平for(i=0;i<8;i++)//循环八次{clk=0; //拉低n=n<<1; //左环移n=n|so; //将位依次排列,组成16进制数clk=1; //拉高}//首先读最高位信号再一次往低}//-----主函数--------void main(){while(1){read();//读信号P3=n; //P3口赋值}}。
74HC165功能说明
1.并行输入:74HC165具有8个并行输入引脚(A-H),可以同时读取8个输入信号。
这些输入信号可以是数字信号,也可以是模拟信号。
2.串行输出:74HC165具有串行输出引脚(QH),它可以将输入信号转换为串行输出信号。
输出信号的顺序与输入信号的读取顺序相同。
3.移位操作:74HC165可以通过移位操作来读取并且存储输入信号。
移位操作可以由一个时钟信号(SH/LD)和一个时钟使能信号(CLKINH)来控制。
当时钟使能信号为高电平时,移位操作生效;当时钟使能信号为低电平时,移位操作被禁止。
4.并行加载:除了移位操作之外,74HC165还可以通过并行加载操作来读取并存储输入信号。
并行加载操作可以通过时钟使能引脚(CLKINH)和并行加载引脚(PL)来控制。
当时钟使能引脚为高电平时,同时并行加载引脚为高电平,即可进行并行加载操作。
5.级联操作:多个74HC165芯片可以级联在一起,以扩展输入信号的数量。
级联操作可以通过级联引脚(SERA/B)和级联输出引脚(QH)来实现。
级联引脚可以将一个74HC165的输出连接到另一个74HC165的输入,以实现数据的串行传输。
总结起来,74HC165是一种用于将8个并行输入信号转换为串行输出信号的移位寄存器芯片。
它通过移位操作和并行加载操作来读取并存储输入信号,并且可以通过级联操作扩展输入信号的数量。
这种芯片在数字电路控制和数据采集等应用中非常常见,具有广泛的用途。
74LS165并入串出实验74L165是并行输入,串行输出移位寄存器。
80C51单片机内部的串行口在方式0工作状态下,使用移位寄存器芯片可以扩展一个或多个8位并行I/O口。
A,B,C,D,E,F,G,H 并行输入端。
QH串行输出端。
CLOCK:时钟输入端。
CLOCK INHIBIT:时钟禁止端。
当时钟禁止端CLK2为低电平时,充许时钟输入。
SHIFT/LOAD:移位与置位控制端。
SER:扩展多个74LS165的首尾连接端。
本练习TXD(P3.1)作为移位脉冲输出端与74LS165的移位脉冲输入端CLOCK相连;RXD(P3.0)作为串行输入端与74LS165的串行输出端QH相连;P3.2用来控制74165的移位与置入。
本练习利用串行口扩展了1片74LS165,从而实现了8个按键的输入,在单片机的P1口连接了8个LED 发光二极管,程序中实现了用按键控制发光二极管的亮与灭。
流程为8路开关-74165-3PIN数据线-8路指示灯。
由此可以看出通过165传输,只用了3条数据线,就实现了8个开关控制8个灯的目的。
从而节约了控制的连线。
74LS165 引脚定义:74LS165逻辑表:相关原理:程序运行照片:接线方法:1、用一个4PIN数据排线一端插入CPU部份JP53(P3口)的P3.0,P3.1,P3.2,P3.3。
另外一端插入74LS165部份的输入端JP21。
2、用一根8PIN的数据排线,一端插入74LS165部份的输出端JP28, 另一端插入8路按键开关的的JP48。
3、用一条8PIN的数据排线把CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。
运行后分别按k00-k07,可以看到d00-d07八个灯受控制。
程序流程图:汇编语言参考程序:org 0080hloop: mov scon,#00010000b ; 设定MODE=0clr p3.2 ; P3.2=0 载入数据call delay1 ;延时setb p3.2;P3.2=1 ;数据输出clr ri ;RI=0loop1:jbc ri,loop2 ;RI=1?是则到LOOP2 jmp loop1 ; 否则继续监测loop2: mov a,sbuf ;将SUBF载入ACC mov p1,a ;输出到P1jmp loop ;重新开始delay: mov r7,#00h ;延时子程序tt: mov r6,#00hdjnz r6,$djnz r7,ttretdelay1: ;短延时子程序mov r7,#02djnz r7,$retend。
************************** Copyright(C)CaKe ******************************* **********=============================================================================== =======================**文件名: main.c ============================**作者: CaKen ============================**版本号: V1.0 ============================**时间: 2014.08.16 ============== ==============**功能描述: 74HC165实验测试============================================================================================= =========******************************************************************************* *********#include <reg52.h>#include <intrins.h>//SPI 接口sbit CLK = P3^6; //串行时钟sbit IN_PL = P1^6; //把数据加载到锁存器中sbit IN_Dat = P1^7; //数据通过P1.7脚移进单片机内处理sbit RELAY = P1^4; //继电器sbit BEEP = P1^5; //蜂鸣器unsigned char bdata Key;sbit K0=Key^0; //位定义sbit K1=Key^1; //位定义sbit K2=Key^2; //位定义sbit K3=Key^3; //位定义sbit K4=Key^4; //位定义sbit K5=Key^5; //位定义sbit K6=Key^6; //位定义sbit K7=Key^7; //位定义bit M0 ,K0J; //位定义******************************************************************************* **********函数名:调用:beep();参数:返回值:结果:备注:蜂鸣器 (让蜂鸣器发出动听声音)******************************************************************************* **********void beep(){unsigned char i,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上升沿******************************************************************************* *********unsigned long HC165_Init(void){unsigned char i;unsigned int indata;IN_PL=0; //上升沿_nop_(); //短暂延时产生一定宽度的脉冲IN_PL=1; //将外部信号全部读入锁存器中_nop_();indata=0; //保存数据的变量清0for(i=0; i<8; i++){indata=indata<<1; //左移一位if(IN_Dat==1)indata=indata+1; //如果IN_Dat检测到高电平保存数据的变量加1CLK=0; //时钟置0_nop_(); //上升沿CLK=1; //时钟置1}return(~indata); //将保存数据的变量取反后返回}******************************************************************************* **********函数名:主函数调用:main参数:返回值:结果:备注:74HC165控制八个按键******************************************************************************* **********main(){while(1){unsigned long Input=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; }}}。
74HC165的联级编程实例三篇篇一:74HC165的联级编程实例#include<reg51.h>#include<intrins.h>sbitCLK=P2^5;//时钟sbitLD=P2^6;//移位,置位sbitSO=P2^7;//输出#defineLED1P0#defineLED2P1inthc165(){inti=0;chardat1=0,dat2=0;intdat=0;LD=0;//允许数据数据进入165 _nop_();LD=1;//for(i=0;i<8;i++){dat1<<=1;CLK=0;if(SO==1)dat1|=0x01; CLK=1;}for(i=0;i<8;i++){dat2<<=1;CLK=0;if(SO==1)dat2|=0x01; CLK=1;}LD=0;dat=dat1;dat<<=8;dat|=dat2;returndat;}voidmain(){while(1){LED1=(hc165()&0XFF);LED2=((hc165()>>8)&0XFF); }}篇二:74HC165联级编程实例#include<AT89X51.h>#define uchar unsigned char#define uint unsigned intsbit DS=P1^0 ; //595sbit SH=P1^1 ;sbit ST=P1^2 ;//sbit MR=P1^3;sbit CLK=P1^4;//165sbit INH=P1^5;sbit LD=P1^6;sbit SO=P1^7;//msec(511);0.5s//msec(2);2ms//msec(1021);//1svoid msec(unsigned long x) //延时 {unsigned char j;while(x!=0){x--;for(j=0;j<116;j++) {;}}}void hc595(uchar *p,n) {uchar i,j;for(;n>0;n--){i=*p;for(j=0;j<8;j++){DS=i&0x80;i=i<<1;SH=0;SH=1;}ST=0;ST=1;ST=0;p++;}}void hc165(uchar *d,n) {uchar i=0,j,c=0;LD=1;LD=0;LD=1;INH=0;for(j=0;j<(n*8);j++) {CLK=1;i=i<<1;i=i|SO;CLK=0;c++;if(c==8){*d=i;c=0;d++;}}}main(){uchar *P,*D;uchari,a[5]={0x00,0x00,0x00,0x00,0x01},b[5]={0x0ff,0x0ff,0x0ff,0x0ff,0x0f f}; P=a;D=b;hc595(P,5);hc165(D,5);P3=b[4];while(1);for(i=0;i<34;i++){if(i==8){a[3]=0x01; a[4]=0x00;}if(i==16){a[2]=0x01;a[3]=0x00;}if(i==24){a[1]=0x01;a[2]=0x00;}if(i==32){a[0]=0x01;a[1]=0x00;}P=a;hc595(P,5);a[0]<<=1;a[1]<<=1; a[2]<<=1; a[3]<<=1; a[4]<<=1; msec(511); }}篇三:74HC165联级编程实例74HC595 74HC165程序例子(AVR)硬件说明:ATmega48/88/168的PB5是SPI时钟输出,接74HC595/74HC165的移位时钟输入端;PB4是SPI的MISO数据输人,接74HC165的数据输出;PB3是SPI的MOSI数据输出,接74HC595的串行数据输入端SER;PB2接74HC595/74HC165的锁存时钟输入端。
74hc165编程说明接触单片机,嵌入式有好长一段时间了,一直想找个机会把自己总结得东西拿出来晒晒太阳(其实没有什么,高手可能早已经了解),在这里我只想分享给与我一样奋斗在单片机一线得广大童鞋么一点小小得甚至卑微得经验.我们都知道通信从大得方面有两种:串行与并行。
串行得最大优点就是占用总线少,但就是传输速率低;并行恰恰相反,占用总线多,传输速率高.市面上有很多这样得芯片,有串入并出得(通俗讲就就是一个一个进,最后一块出来),有并入串出得(相对前者而言)。
具体用哪种类型要根据我们得实际情况。
比如利用单片机显示数码管单纯得显示一个数码管如果仅仅就是为了显示那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说得数码管就是8段得(如果利用BCD类型16进制数码管那么只需四个即可)就拿51类型得单片机来说,总共32个I/O口,一般如果不就是做太大得工程就是完全够用得,但有些时候您会恨单片机怎么不多长几条“腿",怎么省还就是不够用。
别急集成串行芯片来帮忙哈哈客套话就不多说了言归正传,今天我介绍一下几个在数码管显示或键盘处理中经常用到得移位寄存器芯片,首先登场得就是74HC165:74HC165/74LS165就是典型并入串出芯片,用它来读取外界键盘信息再好不过了,前提我们得了解它,我们先了解其引脚:引出端符号ﻫCLK,CLK INH 时钟输入端(上升沿有效)A-H 并行数据输入端SER 串行数据输入端QH 输出端ﻫQHn 互补输出端SH/LD移位控制/置入控制(低电平有效)真值表时序图其实瞧一个芯片就是如何使用得,不只就是瞧引脚功能,更重要得就是要瞧时序图与真值表,从其中我们可以详细得了解到它就是如何使用得,然后转化成程序代码即可.从上面我们得真值表与时序图中我们要特别注意几个端口得变化,真值表中SH/LD只有在高电平得时候方才有效;CLK,CLK INH只有当其中一个为低电平得时候,另一个时钟才能正确得输入,这就是非常重要得(一般得我们在使用时,可以将其中得一个直接接地,另一个做时钟输入端口使用).但就是我们做事要细心,要一丝不苟,从时序图中我们瞧到SH/LD有一个负脉冲这就是什么缘故呢?在程序设计中如果忽略了此处,那么注定结果就是悲剧得。
(31条消息)74HC165级联电路篇(三)
74HC165其实和74HC595一样,也有级联功能,74HC595级联在前面已经整理过,这里说下74hc165的级联。
前面基础篇也讲到74HC165是个并行输入转串行输出的逻辑芯片,该芯片除了串行输出外还有一个串行输入引脚,74HC165的级联功能就使用到这个串行输入引脚,也就是引脚10(DS):
下面就讲下74HC165级联的原理:
从前面的两篇74HC165文章知道,74HC165并行转串行是通过移位寄存器实现的,当PL为低电平时,并行数据(8bit)进入移位寄存器,当PL为高时,进入移位寄存器的数据就从DS引脚进入寄存器,然后在每个时钟的上升沿往输出引脚Q7移一位。
根据这个原理,只要把输出Q7(引脚9)连到下一级74HC165的DS引脚(引脚10)即可实现级联功能,如下图:
最后再以图文并茂的方式总结下74HC165级联后的工作过程,如下图:
74HC165的级联电路就整理到这里,下一篇是级联的编程,总结下如何读取74HC165级联的数据。
常用元器件使用方法6:并
介绍:
74HC165是并-串转换芯片,单芯片可以将8路并行信号转换为1路串行信号,并可以进行芯片级联,以完成多路并行信号输入单片机的操作。
芯片特性:
1、异步8位并读取;
2、同步串行输入;
3、温度范围-40~85。
芯片引脚:
内部结构图:
引脚功能说明:
使用说明:
SH/LD用于并行装载数据,当其引脚为低时,将外部数据并行装入移位寄存器,当其引脚为高时,阻断外部输入与内部寄存器。
在SH/LD为低的条件下,进行移位操作,需保证CLK INH与CLK引脚一个引脚为底(实际上CLK INH与CLK引脚的功能是相同的),另一个引脚上升沿即进行数据移位。
时序图:
典型电路图:
原创性文章,转载请注明出处CSDN:/qingwufeiyang12346。