3片74HC165级联,读取按键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3片74HC165级联,读取按键相关的知识,希望对你有一定的参考价值。

static Read74hc165( void )

unsigned int i, j ;
unsigned int KeyAddress[3];
unsigned int ReadReturn;
PL = 0 ; //锁存并行数据开始
IN = 1 ; //准备读串行数据(也起到延时作用)
PL = 1 ; //锁存并行数据结束
for( j = 0 ; j < 3 ; j++ )

for( i = 8 ; i >= 1 ; i-- )

CLK = 0 ; //时钟拉低
if( IN == 0 )break ; //有键按下,数据为1
CLK = 1 ; //时钟拉高

KeyAddress[ j ] = i ; //有键压下,则i的取值在1~8之间,无键压下,i = 0

//////////////////////////////////////////////////////////////////按正常理解,这段是 第一片 74HC165优先读取
for( j = 0 ; j < 3 ; j++ )

if( KeyAddress[ j ] == 0 ) ReadReturn = 0x00 ;
else

ReadReturn = KeyAddress[ j ] + j * 8 ;
break ;



//****************************************************************按正常理解,这段是 第三片 74HC165优先读取
for( j = 2 ; j >=0 ; j-- ) 此段代码是反过来

if( KeyAddress[ j ] == 0 ) ReadReturn = 0x00 ;
else

ReadReturn = KeyAddress[ j ] + j * 8 ;
break ;



//************************************************************************
return ReadReturn;

前面两段每次只执行一段
但是测试的,第一片优先读取是正确的,但是第三片优先读取测试的时候就不对了?求解???

参考技术A 逻辑不对,把变量从新整理追问

哪些变量需重新整理?

基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间

基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间


  • Proteus仿真

实例代码

#include "at89x52.h"
/**74hc595引脚定义**/
sbit SHCP =P0^1; 	  //  移位寄存器的时钟输入
sbit STCP =P0^2	;	  //	存储寄存器的时钟输入
sbit DS  

以上是关于3片74HC165级联,读取按键的主要内容,如果未能解决你的问题,请参考以下文章

74HC165数据错误很多

74hc165原理

51单片机:IO口扩展芯片用法(74HC165,74HC595)

74HC165丢失数据怎么办?

单片机用74HC165扩展的相关问题

关于单片机串口转并口芯片74HC165的编程问题。