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

📄 main.c

📁 测试手机用马达性能及好坏
💻 C
字号:
#include <reg52.h>
#define uint  unsigned int
#define uchar unsigned char

#include "ICL7135.h"
#include "ocm4x8c串.h"


#define Ver 1000
#define Vm  27000-378
//#define Vm  27000-400



sbit STARP=P3^7;
sbit MOTORON=P3^0;
sbit NGLED=P3^5;
sbit OKLED=P3^4;
sbit BELL=P3^6;


uint  MOT_R;
uchar STARP_ON;
uchar STARP_OFF;
uint  Test_tim;
uchar BCD_i;
uchar AD_ok;
uchar AD_i;
uint  LCD_tim;
uchar Rmaxmin[8];
uint  Rmax;
uint  Rmin;
uint  Ur[4];
uint  Test;
uint  BELL_tim;
uint  LCD_flash_tim;
uchar LCD_flash;
uchar LCD_flash_ONOFF;

uint  NG_tim;
uint  OK_tim;


uchar code tab1[]={
"Rmax:         Ω"
"Rtes:         Ω"
"Rmin:         Ω"
"                "
};

uchar code tab2[]={
"                "
"                "
"手机马达电阻测试"
"        Ver:1.00"
};


/////////////////////////////////////////////////////////////////////////
// Bitmap点阵数据表                                                    //
// 图片: D:\..\晶研力信.bmp,横向取模左高位,数据排列:从左到右从上到下   //
// 图片尺寸: 128 * 64                                                  //
/////////////////////////////////////////////////////////////////////////
unsigned char code nBitmapDot[] =                  // 数据表
{
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x01,0xFF,0x80,0x00,0x00,0x70,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x1B,0xF7,0x80,0x00,0x08,0xF8,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x1E,0x07,0x80,0x00,0x0F,0xF8,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0C,0x07,0x80,0x00,0x07,0xF8,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0E,0xF7,0x80,0x00,0x03,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0F,0xF7,0x00,0x00,0x01,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0F,0xF7,0x00,0x00,0x03,0xC0,0x35,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0F,0x07,0x00,0x00,0x03,0x80,0x69,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0E,0x07,0x00,0x00,0x07,0x70,0xCB,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0F,0xFF,0x00,0x00,0x0E,0xF9,0xDF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x0F,0xFE,0x00,0x00,0x1F,0xFA,0xDF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x07,0xCE,0x00,0x00,0x1C,0x7D,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x02,0x0D,0xF0,0x00,0x3E,0x77,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x07,0x07,0xF8,0x00,0x3E,0xF3,0xE3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x1F,0x9F,0x78,0x00,0x77,0xE3,0xE3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x01,0x3F,0x98,0x78,0x00,0xE7,0xF0,0xE3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x01,0xC3,0x98,0x78,0x01,0xE7,0xC0,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x01,0xC3,0x9B,0x78,0x01,0xC3,0x01,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xDF,0x9F,0xF8,0x01,0xC0,0x01,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xFF,0x98,0x78,0x00,0x00,0x01,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xE3,0x98,0x78,0x00,0x00,0x00,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xC3,0x98,0x78,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xCF,0x9F,0xF8,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xFF,0x9F,0xF0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x73,0x0C,0x70,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x43,0x00,0x70,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x04,0x07,0xC0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x70,0x00,0x00,0x07,0x03,0xE0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x78,0x00,0x00,0x07,0x81,0xF0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0xF0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x0F,0x81,0xEF,0x80,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x0F,0x03,0xFF,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x1E,0x1F,0xCF,0xC0,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xC0,0x00,0x1E,0xFF,0x1F,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF1,0xE0,0x00,0x3C,0xFC,0x30,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF1,0xE0,0x00,0x78,0x78,0xF8,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE1,0xE0,0x00,0xF8,0x00,0x78,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE1,0xE0,0x01,0xFC,0x01,0xF8,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x01,0xEC,0x0F,0xE0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC1,0xC0,0x01,0xCC,0x07,0x9C,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x81,0xC0,0x01,0x8C,0x01,0xFC,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x83,0xC0,0x01,0x0C,0x0F,0xFC,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x03,0xC0,0x00,0x0C,0x1F,0xE0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x03,0xC0,0x00,0x0C,0x1E,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x03,0x80,0x00,0x0C,0x08,0x3C,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0x87,0x80,0x00,0x0C,0x09,0xFC,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3D,0xC7,0x80,0x00,0x0C,0x0F,0xFE,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xFF,0x00,0x00,0x0C,0x0F,0xFE,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xFF,0x00,0x00,0x0C,0x0F,0x1C,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0x00,0x00,0x1C,0x0E,0x1C,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x7C,0x00,0x00,0x1C,0x06,0x38,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x3C,0x00,0x00,0x0C,0x07,0xFC,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x38,0x00,0x00,0x0C,0x07,0xFC,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};



/********** HEX转BCD******/
/***bcd_data(<0x255,>0)***/
/*
unsigned char BCD2HEX(unsigned int bcd_data)
{
unsigned char temp;
temp=((bcd_data>>8)*100)|((bcd_data>>4)*10)|(bcd_data&0x0f);
return temp;
}*/
/********** HEX转BCD******/
/***hex_data(<0xff,>0)****/
/*
unsigned int HEX2BCD(unsigned char hex_data)
{
unsigned int bcd_data;
unsigned char temp;
temp=hex_data%100;
bcd_data=((unsigned int)hex_data)/100<<8;
bcd_data=bcd_data|temp/10<<4;
bcd_data=bcd_data|temp%10;
return bcd_data;
}
*/





void main(void)
{
  uchar i,Rx;
  uint  Rmax_old,Rmin_old,Ur_tem;
  uchar MOT_R_BCD[4];

  init_lcd();
  img_disp (nBitmapDot); //显示公司标志
  OKLED=0;
  NGLED=0;
  MOTORON=0;
  BELL=0;
  delay1 (4000);
  OKLED=1;
  NGLED=1;
  MOTORON=1;
  BELL=1;
  clrram ();
  chn_disp(tab2); 
  delay1 (4000);
  clrram ();	
  chn_disp(tab1);


  TH0=(0xffff-5000)>>8;   //5ms
  TL0=(0xffff-5000)&0xff;
  ET0=1;
  TMOD=0x01;
  TR0=1;
  

  EX0=1;
  IT0=1;
  EA=1;
  	   
  	

 while(1)
 {


   for(i=0;i<8;i++)
   { 
      P2&=0xf0;
	  P2|=i;
	  Rx=0;

	 switch(P0)
	 {
	  case ~(1<<0): Rx=0;
	  break;
	  case ~(1<<1): Rx=1;
	  break;
	  case ~(1<<2): Rx=2;
	  break;
	  case ~(1<<3): Rx=3;
	  break;
	  case ~(1<<4): Rx=4;
	  break;
	  case ~(1<<5): Rx=5;
	  break;
	  case ~(1<<6): Rx=6;
	  break;
	  case ~(1<<7): Rx=7;
	  break;
	 }	 

	 switch(P1&0x30)
	 {
	  case  0x20: Rx=8;
	  break;
	  case  0x10: Rx=9; 
	  break;
	  }

	 Rmaxmin[i]=Rx;
	}

  	Rmax_old=Rmax;
	Rmin_old=Rmin;

    Rmin=Rmaxmin[0]*1000+Rmaxmin[1]*100+Rmaxmin[2]*10+Rmaxmin[3];	
    Rmax=Rmaxmin[4]*1000+Rmaxmin[5]*100+Rmaxmin[6]*10+Rmaxmin[7];
  	
	for(i=0;i<8;i++) Rmaxmin[i]+=0x30;


	for(i=0;((i<3)&&(Rmaxmin[i]==0x30));i++) Rmaxmin[i]=' ';
	for(i=4;((i<7)&&(Rmaxmin[i]==0x30));i++) Rmaxmin[i]=' ';


    if((Rmax_old!=Rmax)||(Rmin_old!=Rmin))
	{
      if(Rmax<Rmin)
	  {
	   chn_disp2(" Err    ",0x83,4);
	   chn_disp2(" Err    ",0x93,4);
	  } 
	  else 
    {
	   //	if(Rmax>35)   chn_disp2(" Err    ",0x83,4);
	   //	else		  
		chn_disp2(&Rmaxmin[4],0x83,2);
	  
	   // if(Rmin<25)   chn_disp2(" Err    ",0x93,4); 
	   // else		  
		chn_disp2(Rmaxmin,0x93,2);
	 }

	}
   

  
///////////////////////////////////////////////////////
/*
Test=0  请放入测试件
Test=1  测试中
Test=2  合格
Test=3  不合格

*/
    if((STARP==1)&&(++STARP_OFF>5))
	 {
	   STARP_ON=0;
	   STARP_OFF=0;
       Test=0;
	   BELL=1;
	   chn_disp2("    准备测试    ",0x98,8);
	 //chn_disp2("  请放入测试件  ",0x98,8);
		chn_disp2("        ",0x8b,4);
	 }

    switch(Test)
	 {
	  case 0:
	        Test_tim=0;
	        if((STARP==0)&&(++STARP_ON>5))
            {
              STARP_ON=0;
	           STARP_OFF=0;
				  Test=1;
				  Test_tim=200; //测试时间 1s
				  chn_disp2("    测试中..... ",0x98,8);
            }
				OKLED=1;
				NGLED=1;
				MOTORON=1;
	  break;
     case 1: 
            MOTORON=0;  
	  break;
	  case 2: 
            OKLED=0;
				NGLED=1;
	         MOTORON=1;
	  break;
	  case 3: 
            OKLED=1;
				NGLED=0;
	         MOTORON=1;

			if(LCD_flash_ONOFF==0)
				{
				  if((LCD_flash&0x1)==0) chn_disp2("    不合格      ",0x98,8);
				  else                  
				  {
				    wr_lcd (comm,0x30);
                    wr_lcd (comm,0x98);
                    for (i=0;i<8;i++)
					{
					  wr_lcd (dat,0xa1);
					  wr_lcd (dat,0xf6);
					  } 

				    }
 				  LCD_flash_ONOFF=1;
				  }
				
			break;
     }
      /*
	  if(LCD_tim==0) //定时全刷屏
	  {
	     init_lcd();
	    chn_disp(tab1);
		 chn_disp2(&Rmaxmin[4],0x83,2);
	    chn_disp2(Rmaxmin,0x93,2);
       switch(Test)
	    {
	     case 0: chn_disp2("  请放入测试件  ",0x98,8);
		  break;
		  case 1: chn_disp2("    测试中..... ",0x98,8);
		  break;
		  case 2: chn_disp2("      合格      ",0x98,8);
		  break;
		  case 3: 
		          if(LCD_flash_ONOFF==0)
			    	 {
		           if((LCD_flash&0x1)==0) chn_disp2("    不合格      ",0x98,8);
			        else                  chn_disp2("                ",0x98,8);
		             LCD_flash_ONOFF=1;
					  }
		  break;
		 }
		 LCD_tim=1000; 
		 
	  }	 */
    


////////////////////////////////////////////////////////////////   
   
   if(AD_ok)
   {
	 Ur[AD_i]=(uint)ICL7135_BCD[0]*10000+(uint)ICL7135_BCD[1]*1000+(uint)ICL7135_BCD[2]*100+ICL7135_BCD[3]*10+ICL7135_BCD[4];
	 ICL7135_BCD[5]=' ';

//	 chn_disp2(ICL7135_BCD,0x8B,3); //显示电压

    if(++AD_i>2) AD_i=0;
    AD_ok=0;
   }
   

   if((Test_tim==0)&&(Test==1))
	{
    MOTORON=1;

    Ur_tem=0;
	 for(i=0;i<2;i++) Ur_tem+=Ur[i];
	 Ur_tem>>=1;
//	 Ur_tem=(long)Ur_tem*981/1000;
     Ur_tem=(long)Ur_tem*1158/1000;
	if(Ur_tem>0) MOT_R=(Vm-Ur_tem)/Ur_tem;



    else         MOT_R=10000;

	 if((MOT_R>Rmax)||(MOT_R<Rmin)) 
	  {
	    Test=3;
		chn_disp2("    不合格      ",0x98,8);
		LCD_flash=0;
	    LCD_flash_tim=0;
	    LCD_flash_ONOFF=1;
		}
     if((MOT_R>=Rmin)&&(MOT_R<=Rmax)) 
	  {
	    Test=2;
		chn_disp2("      合格      ",0x98,8);
		}
    
	 if(MOT_R>9999)
	 {
	  chn_disp2("  ∞    ",0x8b,4);
	 }
	 else
	 {

      MOT_R_BCD[0]=MOT_R/1000+0x30;
      MOT_R%=1000;
	  MOT_R_BCD[1]=MOT_R/100+0x30;
      MOT_R%=100;
	  MOT_R_BCD[2]=MOT_R/10+0x30;
	  MOT_R_BCD[3]=MOT_R%10+0x30; 

     for(i=0;((i<3)&&(MOT_R_BCD[i]==0x30));i++) MOT_R_BCD[i]=' ';
     chn_disp2(MOT_R_BCD,0x8b,2);
	 }

	}

  }
}

void timer0(void) interrupt 1 using 1
{
  TH0=(0xffff-5000)>>8;
  TL0=(0xffff-5000)&0xff;
  if(Test_tim) Test_tim--;


   if(Test==3)
  {
    if(++BELL_tim>15)
	 {
	   BELL_tim=0;
	  if(++NG_tim<4) BELL=!BELL; 
      else   BELL=1;
	 }
	 if(++LCD_flash_tim>100)
	 {
	  LCD_flash++;
	  LCD_flash_tim=0;
	  LCD_flash_ONOFF=0;
	 }
  }
  else 
  {
	LCD_flash_tim=0;
    LCD_flash=0;
	LCD_flash_ONOFF=0;
	NG_tim=0;
  }
  if(Test==2)
  {
      if(++OK_tim<(5*15)) BELL=0; 
      else   BELL=1;
  }
  else   OK_tim=0;
  

	if(LCD_tim>0) LCD_tim--;
 

}
 

void intersvr0(void) interrupt 0 using 1
{ 
  if(AD_ok==0)
  {
  if(ICL7135_D5A==1) BCD_i=0;
  ICL7135_BCD[BCD_i]=P1&0x0f;
  if(++BCD_i>4) 
   {
	  BCD_i=0;
     AD_ok=1;
	 }
	}
}

⌨️ 快捷键说明

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