⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 带有24C02的红外数据接收程序
💻 C
字号:
#include <AT89X52.H>
#define USE_WATCHDOG
#include "User.H"
#include "24CXX.H"

#define SA	0x08
#define SB  0x04
#define SC  0x02
#define SD	0x40

#define SE	0x01
#define SF	0x80
#define SG	0x10
#define SH	0x20

struct {
	byte x[8];
	byte Min[8]; 
	byte Max[8];
}Gate;

void InitMaxMin()
{
	byte i;

	for(i=0; i<8; i++)
	{
		Gate.Min[i]=255;
		Gate.Max[i]=0;
	}
}

void GetCurrentToX()
{
	byte i,k;

	for(i=0; i<8; i++)
	{
		Gate.x[i]=255;	
		for(k=0; k<255; k++)
		{
			P2=k; Delay10us();
			if(P1&(0x01<<i))
			{ 
				Gate.x[i]=k;
				break;
			}
		}
	}
}

void UpdateMaxMin()
{
	byte i;
	for(i=0; i<8; i++)
	{
		if(Gate.x[i]>Gate.Max[i])
			Gate.Max[i]=Gate.x[i];
		if(Gate.x[i]<Gate.Min[i])
			Gate.Min[i]=Gate.x[i];
	}
}

void SetGate()
{
	byte i;
	for(i=0; i<8; i++)
		Gate.x[i] = Gate.Min[i]/2 + Gate.Max[i]/2;
}

void LoadGate(byte *buffer)
{
	Read24CXX(0,buffer,4);
	Sleep(10);
	Read24CXX(4,buffer+4,4);
	Sleep(10);
}

void SaveGate(byte *buffer)
{
	Write24CXX(0,buffer,4);
	Sleep(10);
	Write24CXX(4,buffer+4,4);
	Sleep(10);
}

byte ReadIOPort()
{
	byte i, IO_Port=0x00;
	for(i=0; i<8; i++)
	{
		P2=Gate.x[i];
		Delay10us();
		IO_Port|=P1&(0x01<<i);
	}
	return IO_Port;
}

byte Convert(byte x)
{
	byte temp=0;

	if(x&SA) temp|=0x01;
	if(x&SB) temp|=0x02;
	if(x&SC) temp|=0x04;
	if(x&SD) temp|=0x08;
	if(x&SE) temp|=0x10;
	if(x&SF) temp|=0x20;
	if(x&SG) temp|=0x40;
	if(x&SH) temp|=0x80;

	return ~temp;	
}

void InitTimer(void)
{
 	TMOD=0x1;
 	TH0=0xd8;
 	TL0=0xf0;
 	TR0=1;
	ET0=1;
	EA=1;
}

void Timer0(void) interrupt 1
{
 	TH0=0xd8;
 	TL0=0xf0;

	FeedDog();
}


void main()
{
	static byte Port,History=0xFF;
	InitTimer();
	LoadGate(Gate.x);

	while(1)
	{
		if(P3_2==0)
 	    {
			P0=0xAA;
			InitMaxMin();
			while(P3_2==0)
			{
				GetCurrentToX();
				UpdateMaxMin();
			}
			SetGate();
			SaveGate(Gate.x);
		}
		Port=Convert(ReadIOPort());
		if(Port!=History);
			P0=Port;			
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -