74HC165 并入串出

74HC165 并入串出_第1张图片

/******************************************************** 
程序名:main.C
版  本:Ver1.0
芯  片:AT89C51或STC89C51
晶  体:片外12MHz
编  程: Joey
日  期:2023-11-13
描	 述:通过 74HC165 对 16 按键输入进行扩展
C编译器:Keil C51
注意事项:
重要事项:
						
********************************************************/
#include "REG51.h"

#define u8 unsigned char
#define u16 unsigned int

/***************************************************************************/
sbit DIN=P1^0;
sbit CLK=P1^2;
sbit SH =P1^1;

/***************************************************************************/
void Delay(u16 x)
{
	while(x--);
}
u16 Read_74HC165D(void)
{
	u16 i,ReadKey=0;
	
	DIN=1;
	CLK=1;
	/**** load the data for D0-D7 at onece**/
	SH =0;
	SH =1;
	
	
	//read form first level to the second level
	//first level: the directly output level
	for(i=0;i<16;i++)
	{
		ReadKey<<=1;	//the first level data will be moved to the fist 8 bit
		CLK=1;
		
		if(DIN)	//read the data output from the first level
			ReadKey++;
		Delay(10);
		CLK=0;
	}
	return ReadKey;
}
/***************************************************************************/
void main(void)
{
	static u16 temp,templast;
	
	while(1)
	{
		temp=Read_74HC165D();
		if(temp != templast)
		{
			if(temp != 0xFFFF)
			{
				P2=temp&0xFF;		//second level to the P2
				P3=(temp>>8)&0xFF;	//first level to the P3
			}
			templast=temp&0xFFFF;
		}
		else
		{
			P2=temp&0xFF;
			P3=(temp>>8)&0xFF;
		}
		Delay(100000);
	}
}
/***************************************************************************/

你可能感兴趣的:(单片机,嵌入式硬件,74hc165)