首页 > 编程知识 正文

单片机c语言hcsr501使用,74hc595驱动八位数码管电路图

时间:2023-05-03 14:24:12 阅读:137228 作者:3328

74HC165简介

74HC165是一款8位并行输入/串行输出移位寄存器,由2个74HC165串联而成,通过时钟脉冲作用,可从KB-DAT读取串行数据,并可扫描读取16位键盘数据。

74HC165是一种高速CMOS器件,74HC165符合JEDEC标准no.7A。 74HC165引脚与低功耗肖特基TTL(lsttl )系列兼容。

74HC165是一个8位并行输入串行输出移位寄存器,在末级提供独占串行输出(Q0和Q7 ),并行读(PL )输入为低时,从D0输入到D7端口的并行数据异步读取寄存器另一方面,PL为高时,数据从DS输入端串行进入寄存器,在时钟脉冲的每个上升沿向右移动1位(Q0Q1Q2等)。 利用此特性,只需将Q7输出绑定到下一级DS输入,即可实现并串行扩展。

74HC165的时钟输入可以具有“栅极控制或”结构,其一个输入端可以作为低有效时钟使能(CE )输入。 CP和CE的引脚分配是独立的,必要时可以根据布线情况进行更换。 仅在CP为高时,允许CE从低到高转换。 在PL上升沿到来之前,应提高CP或CE,避免数据在PL活动状态下移位。

单片机驱动74hc165程序

当1针下降时,8位并行数据被压入锁存器,但与此同时,由于D7也已经从7针输出,所以再循环7次读出数据即可

是ucharreadexport(void )

{

unsignedchari=0,receive_date=0;

ucharRead_Int;

Clr_P25; //启用控件。 低电平时,并行数据进入锁存器

Clr_P25;

read_int=(p20x10 ); //串行输出数据线

if(read_int==0x10 )//读取最高有效位

receive_date|=0x01;

Clr_P03;

Set_P25; //高电平时,可读取串行数据

for(I=1; i《=7; I ) )//接下来只需进行7次循环

{

Clr_P03;

Set_P03; //时钟线,上升沿有效

read_int=(p20x10 ); //串行输出数据线

if(read_int==0x10 ) )。

{

receive_date|=(0x01『《I”);

}

}

returnreceive_date;

}

基于51单片机的74HC165实验例程

****copyright(c ) cake (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * cake

=========================================================================================

==============**文件名: main.c===============main.c======文件名

===========* *作者: caken=====================作者: caken===================作者=can

===========* *版本号: v 1.0===============v 1.0版本号

==============**时间: 2014.08.16==============时间

===========* *功能说明: 74HC165实验测试=======================功能说明: 74HC165实验测试

=========================================================================================

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

#包含

#包含

//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 )

{

无符号字符;

unsignedinTIndata;

IN_PL=0; //站起来

_nop_ (); //在短时滞下产生一定宽度的脉冲

IN_PL=1; //将外部信号全部读取到锁存器

_nop_ ();

indata=0; //保存数据的变量为0

for(I=0; I‘8; I )

{

in data=in data《; //向左移动一位

if(IN_Dat==1)

indata=indata 1; 若检测到IN_Dat对高电平保存数据的变量加1

CLK=0; //时钟组0

_nop_ (); //站起来

CLK=1; //时钟组1

}

返回(in data ); //反转保存数据的变量后返回

}

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

函数名称:主函数

呼叫: main

参数:

返回值:

结果:

备注: 74HC165控制8个键

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

main () )

{

while(1)。

{

unsignedlongInput=HC165_Init (; 调用//165驱动程序

Key=Input0xff; //将数据传递给位变量

RELAY=1

P2=0xff; //清除

if(k0k0j ) )。

M0=~M0; //实现脉冲输入,大家都很清楚

K0J=~K0;

if(m0 ) {RELAY=0; P2=0x7f; //实现脉冲输入

if(K1 ) {beep; P2=0xbf; }//K1为1时打开蜂鸣器和两个灯

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; }

}

}

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