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

📄 function tester.c

📁 此程序为本人在公司开发的继电器功能测试仪
💻 C
字号:
	#include "w77e58.h"
	//#include "reg52.h"
	#include <absacc.h>
	#include <intrins.h>
	#include "i2c.h"
	#include "lcd.h"
	#include "main.h"
	#include "kb.h"
	#include "screen.h"
	#include "ad.h"
	unsigned char idata SetP_Data[11]={0},TestP_Data[5]={0},Comp_Data_T[3]={0};
	unsigned int idata Comp_Data[25]={0},Test_Data[12]={0};
	unsigned char code Display_Code[18]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,
								0x58,0xFB,0x20,0x2B,0x2D};//  X,   对, 空, +, -,
						  		//0,   1,   2,   3,   4,    5,    6,   7,  8,   9,  A,    B,   C,
	unsigned char code Loc_X[13][11]={{0x0F,0x10,0x11,0x13,0x17,0x18,0x19,0x1B},//线圈电阻设定
									{0x0F,0x10,0x11,0x13,0x17,0x18,0x19,0x1B,0x1F,0x20,0x22},
									{0x0F,0x10,0x11,0x13,0x17,0x18,0x19,0x1B},//接触电阻设定
									{0x0F,0x10,0x11,0x13,0x17,0x18,0x19,0x1B},
									{0x0F,0x10,0x12,0x13,0x17,0x18,0x1A,0x1B},//电压设定
									{0x0F,0x10,0x12,0x13,0x17,0x18,0x1A,0x1B},
									{0x0F,0x10,0x12,0x13,0x17,0x18,0x1A,0x1B},
									{0x0F,0x10,0x12,0x13,0x17,0x18,0x1A,0x1B},
									{0x0F,0x10,0x12,0x17,0x18,0x1A},//吸合时间设定
									{0x0F,0x10,0x12,0x17,0x18,0x1A},
									{0x0F,0x10,0x12,0x17,0x18,0x1A},
									{0x0F,0x10,0x12,0x17,0x18,0x1A},
									{0x09,0x0A,0x17,0x19,0x1A,0x23,0x24}};//线圈电压设定
	unsigned char code Loc_Y[13]={0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xA0,0xbB0,0xC0,0xD0,0xE0};
	unsigned char code Test_X[12][5]={{0x1F,0x20,0x21,0x23,0x27},//线圈电阻测试数据
									{0},
									{0x1F,0x20,0x21,0x23,0x27},//接触电阻测试数据
									{0x1F,0x20,0x21,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27},//电压时间测试数据
									{0x1F,0x20,0x22,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27},//
									{0x1F,0x20,0x22,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27},
									{0x1F,0x20,0x22,0x23,0x27}};
	unsigned char code Test_X_1[5]={0x13,0x14,0x15,0x17,0x1A};
	unsigned char code Test_X_2[2][5]={{0x16,0x17,0x18,0x1A,0x1E},{0x16,0x17,0x18,0x1A,0x1E}};
	unsigned char code Test_X_3[4][5]={{0x13,0x14,0x16,0x17,0x1A},
										{0x13,0x14,0x16,0x17,0x1A},
										{0x13,0x14,0x16,0x17,0x1A},
										{0x13,0x14,0x16,0x17,0x1A}};
	unsigned char code Test_X_4[4][5]={{0x12,0x13,0x15,0x16,0x19},
										{0x12,0x13,0x15,0x16,0x19},
										{0x12,0x13,0x15,0x16,0x19},
										{0x12,0x13,0x15,0x16,0x19}};
	unsigned char code Set_X_1[4][8]={{0x11,0x12,0x13,0x15,0x1D,0x1E,0x1F,0x21},
	                                   {0x11,0x12,0x13,0x15,0x1D,0x1E,0x1F,0x21},
									   {0},//{0x12,0x13,0x14,0x16},
									   {0x0B,0x0C,0x0E}};
	unsigned char code Set_X_2[3][8]={{0x12,0x13,0x14,0x16,0x1E,0x1F,0x20,0x22},
	                                  {0x12,0x13,0x14,0x16,0x1E,0x1F,0x20,0x22},
								      {0x09,0x0A,0x0B,0x1D}};
								
	unsigned char code Set_X_3[5][8]={{0x11,0x12,0x14,0x15,0x1C,0x1D,0x1F,0x20},
	                                  {0x11,0x12,0x14,0x15,0x1C,0x1D,0x1F,0x20},
										{0x11,0x12,0x14,0x15,0x1C,0x1D,0x1F,0x20},
										{0x11,0x12,0x14,0x15,0x1C,0x1D,0x1F,0x20},
								      {0x09,0x0A}};
								
	unsigned char code Set_X_4[4][6]={{0x12,0x13,0x15,0x1D,0x1E,0x20},
	                                  {0x12,0x13,0x15,0x1D,0x1E,0x20},
								      {0x12,0x13,0x15,0x1D,0x1E,0x20},
									  {0x12,0x13,0x15,0x1D,0x1E,0x20}};
	unsigned char code Adjust[2][4]={{0x15,0x16,0x18,0x19},
	                                  {0x12,0x13,0x14,0x16}};	
	unsigned char code ASK_Value[2]={0x11,0x01};						 
	unsigned char data Unit_Addr_H=0,Unit_Addr_L=0;
	unsigned char data Dis_X=0,Dis_Y=0,Num_Now=1,Page_Val=0;
	bit data SetK_Flag=0;
	unsigned int data V_Value=0;//d_v=0;
	bit V_Up=0;
	bit TH_Flag=0,Receive_OK=0,MK_Slow_Test_OK=0,Test_Screen_OK=0,Connect_ok_ask=0;
	bit F=1,Test_Flag=0,Connect_ok=0;
	unsigned int T_Count=0,SR_V_0=0,SR_V_1=0;
	unsigned char xdata Receive_Data[48]={0};
	unsigned char Receive_Len=0;
	//unsigned char code Send_head=0x22;
	unsigned int p_v=0;
	main(void)
	{
		unsigned int j;
		
		
		AD_COM=0x92;//a is method 0 and input;b is method 0 and input;c is output;
		DA_COM=0x88;
		IO_COM=0x80;
		IT0=1;
		PX0=1;
		TMOD=0x21;//T1 IS Method 2; T0 is method 1;
		TH0=T0_Time/256;//1ms
		TL0=T0_Time%256;
		SCON=0x70;//UART method 1;recieved enable.
		PCON=0x80;//Boud Double;
		TH1=0xF3;//4800b;
		TL1=0xF3;
		TR1=1;
		ES=1;
		ET0=0;
		EA=1;
		AD_C=0xC1;
		//AD_C=0x01;
		DA_A=0;
		DA_B=0;
		DA_C=0xFF;
		IO_A=0xFF;
		IO_B=0xFF;
		IO_C=0x3F;
//		DA_Convert(0);//0,2048,4095
		for(j=0;j<200;j++)
		{
			Delay_1(250);
		}
		LCD_Reset();
		LCD_Initial();
		LCD_Clear();
		Fun_Screen_Main();
		for(j=0;j<3000;j++)
		{
			Delay_1(250);
		}
		LCD_Clear();
		Screen_Setting(Page_Val);
		Screen_Read(Page_Val);	
		PMR|=0x01;
		while(1)
		{
			KB_Proc();
			if(Connect_ok)
			{
				if(Test_Flag)
				{
					unsigned char r;
					Key_Test();	
					ES=0;
					SBUF=0x22;
					while(!TI);
					TI=0;
					for(r=0;r<12;r++)
					{
						IntToByte(Test_Data[r]);
					}
					ES=1;
					Test_Flag=0;
				}
				if(Receive_OK)
				{
					//Handle_Pro(Receive_Data);
					unsigned char m;

					Handle_Pro();
					Receive_OK=0;
					for(m=0;m<48;m++)
					{
						Receive_Data[m]=0;
					}
				}
				if(MK_Slow_Test_OK)
				{
					MK_Slow_Test();
					MK_Slow_Test_OK=0;
				}
				if(Test_Screen_OK)
				{
					Test_Screen();
					Test_Screen_OK=0;
				}
				if(Connect_ok_ask)
				{
					Send_Pro(ASK_Value,2);
					Connect_ok_ask=0;
				}
			}
		}
	
	}
	void IntToByte(unsigned int Val)
	{
		unsigned char Temp[2]={0};
		Temp[0]=Val/256;
		Temp[1]=Val%256;
		Send_Pro(Temp,2);
	}

	void Send_Pro(unsigned char *e,unsigned char NUM)
	{
		unsigned char k_1;
		ES=0;
		for(k_1=0;k_1<NUM;k_1++)
		{
			SBUF=e[k_1];
			while(!TI);
			TI=0;
		}
		ES=1;
	}
	void Num_Convert_1(unsigned int Val,unsigned char Num)
    {
		unsigned char Temp_Val[4]={0};
		unsigned char i_1;
		unsigned int y_1=1;	
		for(i_1=0;i_1<Num-1;i_1++)
		{
			y_1*=10;
		}
		for(i_1=0;i_1<Num;i_1++)
		{
			Temp_Val[i_1]=Val/y_1;
			Val%=y_1;
			y_1/=10;
		}
		//Send_Pro(Temp_Val,Num);
		for(i_1=0;i_1<8;i_1++) Delay_1(250);
		//Delay_1(250);
		//Delay_1(250);
		WRITEDATAARRAY(Num,0xA0,Unit_Addr_H,Unit_Addr_L,Temp_Val);
		Unit_Addr_H=0;
		Unit_Addr_L+=Num;
		/*for(i_1=0;i_1<Num;i_1++)
		{
			WRITEBYTE(0xA0,Unit_Addr_H,Unit_Addr_L,Temp_Val[i_1]);
			Unit_Addr_L++;
		}*/
	}

	void Handle_Pro(void)
	{
		unsigned int xdata Re_Set_Data[22]={0};
		unsigned char a=0,b=0;//Conv_Data[86];
		for(b=0;b<22;b++)
		{
			a=b*2+1;
			Re_Set_Data[b]=Receive_Data[a]*256+Receive_Data[a+1];
		}
		//a=Unit_Addr_H;
		//b=Unit_Addr_L;
		//for(b=0;b<22;b++) IntToByte(Re_Set_Data[b]);
		
		Unit_Addr_H=0;
		Unit_Addr_L=0;
		for(b=0;b<14;b++)
		{
			Num_Convert_1(Re_Set_Data[b],4);
		}
		for(b=14;b<22;b++)
		{
			Num_Convert_1(Re_Set_Data[b],3);
		}
		Num_Convert_1(Receive_Data[45],2);
		Num_Convert_1(Receive_Data[46],3);
		Num_Convert_1(Receive_Data[47],1);
		//Unit_Addr_H=a;
		//Unit_Addr_L=b;
		IO_C&=0xFB;
		for(b=0;b<250;b++) Delay_1(250);
		Screen_Read(Page_Val);
		for(b=0;b<250;b++) Delay_1(250);
		for(b=0;b<250;b++) Delay_1(250);
		for(b=0;b<250;b++) Delay_1(250);
		//for(b=0;b<250;b++) Delay_1(250);
		IO_C|=0x04;
	}
	void MK_Slow_Test(void)
	{
		IO_B=0xFF;
		DA_Convert(0);
		SetK_Flag=0;
		LCD_Clear();
		Page_Val=0;		
		Screen_Setting(Page_Val);
		Screen_Read(Page_Val);
	}
	void Test_Screen(void)
	{
		SetK_Flag=1;
		IO_B=0xFF;
		DA_Convert(0);
		Num_Now=1;
		//Page_Val=6;	
		LCD_Clear();
		Screen_Setting(Page_Val);
		Screen_Read(Page_Val);

	}
	

	void Series_Pro(void) interrupt 4 using 1
	{
		
		
		if(RI)
		{
			RI=0;
			Receive_Data[Receive_Len]=SBUF;
			//if(Receive_Len==0)
			switch(Receive_Data[0])
			{
				case 0xEE://receive data
				{
					//IntToByte(Receive_Data[Receive_Len]);
					Receive_Len++;
					if(Receive_Len==48)
					{
						//Handle_Pro(Receive_Data);
						Receive_OK=1;
						Receive_Len=0;
					}
				} break;
				case 0xFF://receive command
				{
					Receive_Len++;
					//Connect_ok=1;
					switch(Receive_Data[1])
					{
						case 0x01://test
						{
							//Key_Test();
							Test_Flag=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x02: //connect
						{
							Connect_ok=1;
							Connect_ok_ask=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x03:// microk slow test
						{
							//MK_Slow_Test();
							MK_Slow_Test_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x04:// srf slow test
						{
							Page_Val=6;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x05://fast test
						{
							Page_Val=5;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x06://coil resistor test
						{
							Page_Val=1;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x07://contact resistor test
						{
							Page_Val=2;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x08://voltage test
						{
							Page_Val=3;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x09://time test
						{
							Page_Val=4;
							//Test_Screen();
							Test_Screen_OK=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
						case 0x10://disconnact
						{
							Connect_ok=0;
							//Connect_ok_ask=1;
							Receive_Len=0;
							Receive_Data[0]=0;
							Receive_Data[1]=0;
						} break;
					}
					
				} break;
				
			}

		}
	}

	void INT0_Pro(void) interrupt 0 using 0
	{
		unsigned char i;
		//static unsigned int p_v=0;//d_v=0;
		TR0=0;
		if(V_Up==0)
		{
/*			if(F)
			{
				p_v=V_Value-REPAIR;
				Test_Data[3]=(float)p_v*2.4*MULTI_V/4.095;
				F=0;			
			}
			else 
			{*/
				if(Page_Val==6)
				{
					Test_Data[4]=(float)(V_Value-REPAIR)*2.4*MULTI_V/4.095;
				}
				else
				{
					p_v=V_Value-REPAIR-p_v;
					Test_Data[4]=(float)p_v*2.4*MULTI_V/4.095;
				}
				//F=1;
				TH_Flag=1;				
			//}
		}
		else
		{
/*			if(F)
			{
				if(Page_Val==6)
				{
					Test_Data[5]=(float)(V_Value+REPAIR_1)*2.4*MULTI_V/4.095;
				}	
				else
				{
					p_v=V_Value+REPAIR_1;				
					Test_Data[6]=(float)p_v*2.4*MULTI_V/4.095;
				}
				F=0;			
			}
			else
			{*/
				if(Page_Val==6)
				{
					Test_Data[6]=(float)(V_Value+REPAIR_1)*2.4*MULTI_V/4.095;
				}
				else
				{
					p_v=p_v-(V_Value+REPAIR_1);
					Test_Data[6]=(float)(V_Value+REPAIR_1)*2.4*MULTI_V/4.095;
					Test_Data[5]=(float)p_v*2.4*MULTI_V/4.095;
				}
				//F=1;
				TH_Flag=1;	
			//}
		}
		for(i=0;i<30;i++) Delay_1(250);//15ms;0.5ms/pcs;
		TR0=1;
		//IE=0;
	}


⌨️ 快捷键说明

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