📄 test.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 + -