#include <reg52.h>
#include <intrins.h>
#include"I2C.h"
#define uint unsigned int
#define uchar unsigned char
sbit BIT8=P3^5; //拨码开关8位
sbit BIT4=P3^4; //拨码开关4位
sbit BIT2=P3^3; //拨码开关2位
sbit BIT1=P3^2; //拨码开关1位
uint a1,b1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uchar code test[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //测试用数组
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void delay(unsigned int xms)
{
uint x,y;
for(x=xms;x>0;x--) //延时函数
for(y=112;y>0;y--);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void portinit()
{ //I/O全部置高,初始化状态
P0=0xff;
P3=0xff;
P2=0xff;
PCF8574_Write(0xff,0);
PCF8574_Write(0xff,1);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void portinit2()
{ //I/O全部置高,初始化状态
P0=0xff;
P3=0xff;
P2=0xff;
PCF8574_Write(0xff,1);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void threetimes()
{
uint a;
for(a=3;a>0;a--) //开机响三次
{
PCF8574_Write(0xf0,0);
delay(200);
PCF8574_Write(0xff,0);
delay(200);
}
}
////////////////////////////////////////////2根线功能测试////////////////////////////////////////////////////////////
bit fun2()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0; //机种防呆部分
}
P0=0X00;
delay(10);
if(P1!=0xfc)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<2;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i]) //测试部分
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////3根线功能测试////////////////////////////////////////////////////////////
bit fun3()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0; ////机种防呆部分
}
P0=0X00;
delay(10);
if(P1!=0xf8)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<3;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i]) //测试部分
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////4根线功能测试////////////////////////////////////////////////////////////
bit fun4()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0; //机种防呆部分
}
P0=0X00;
delay(10);
if(P1!=0xf0)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<4;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i]) //测试部分
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////5根线功能测试////////////////////////////////////////////////////////////
bit fun5()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0; //机种防呆部分
}
P0=0X00;
delay(10);
if(P1!=0xe0)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<5;i++)
{
P0=test[i];
delay(10); //测试部分
if(P1!=test[i])
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////6根线功能测试////////////////////////////////////////////////////////////
bit fun6()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0;
} //机种防呆部分
P0=0X00;
delay(10);
if(P1!=0xc0)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<6;i++)
{
P0=test[i];
delay(10); //测试部分
if(P1!=test[i])
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////7根线功能测试////////////////////////////////////////////////////////////
bit fun7()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0;
}
P0=0X00; //机种防呆部分
delay(10);
if(P1!=0x80)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<7;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i]) //测试部分
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////8根线功能测试////////////////////////////////////////////////////////////
bit fun8()
{
uchar i;
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFF)
{
return 0; //机种防呆部分
}
P0=0X00;
delay(10);
if(P1!=0x00)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<8;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i]) //测试部分
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////9根线功能测试////////////////////////////////////////////////////////////
bit fun9()
{
uchar i,j;
P0=0X00;
delay(10);
if(P1!=0x00)
{
return 0;
} //机种防呆部分
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XFE)
{
return 0;
}
portinit2();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<8;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i])
{
return 0;
}
} //测试部分
for(j=0;j<1;j++)
{
P2=test[j];
b1=PCF8574_Read(1);
delay(10);
if(b1!=test[j])
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////10根线功能测试////////////////////////////////////////////////////////////
bit fun10()
{
uchar i,j;
P0=0X00;
delay(10);
if(P1!=0x00)
{
return 0;
}
PCF8574_Write(0x00,1); //机种防呆部分
delay(10);
if(P2!=0XFc)
{
return 0;
}
portinit2();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<8;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i])
{
return 0;
}
}
for(j=0;j<2;j++)
{
P2=test[j]; //测试部分
b1=PCF8574_Read(1);
delay(10);
if(b1!=test[j])
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////11根线功能测试////////////////////////////////////////////////////////////
bit fun11()
{
uchar i,j;
P0=0X00;
delay(10);
if(P1!=0x00)
{
return 0;
} //机种防呆部分
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XF8)
{
return 0;
}
portinit2();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(i=0;i<8;i++)
{
P0=test[i];
delay(10);
if(P1!=test[i])
{
return 0;
}
} //测试部分
for(j=0;j<3;j++)
{
P2=test[j];
b1=PCF8574_Read(1);
delay(10);
if(b1!=test[j])
{
return 0;
}
}
return 1;
}
////////////////////////////////////////////12根线功能测试////////////////////////////////////////////////////////////
bit fun12()
{
uchar i,j;
P0=0X00;
delay(10);
if(P1!=0x00)
{
return 0;
} //机种防呆部分
PCF8574_Write(0x00,1);
delay(10);
if(P2!=0XF0)
{