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

📄 mainold.c

📁 自动检测电容值
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg52.h>
//#include <string.h>
#include <intrins.h>
#include <stdio.h>
#include <borad.h> 
#include <SERIAL.H>


#define uint  unsigned int
#define uchar unsigned char
#define CYCLE (-50000)

//#include  "VI2C_C51.h"
//#include "ocm4x8c串.h"

//#define Debugging 1


sbit  Rf=P3^2;
sbit  Cf=P3^3;

sbit  BELL=P3^5;

sbit  DAT=P1^0;
sbit  CLK=P1^1;
sbit  CS=P1^2;

sbit  LCM_CS=P1^5;
sbit  LCM_STD=P1^6;
sbit  LCM_SCLK=P1^7;
sbit  LCM_RST=P1^4;

sbit  RA=P2^0;
sbit  RB=P2^1;
sbit  RC=P2^2;
sbit  CA=P2^3;
sbit  CB=P2^4;

sbit  STEP=P0^1;
sbit  AUTOSTEP=P0^2;

sbit  Mouse1=P0^5;
sbit  Mouse2=P0^6;
sbit  Mouse3=P0^7;

sbit  MD=P0^4;

bit   TestModel;

uchar OKLED;
uchar NGLED;

#define OK 33
#define NG 44
uchar   Test_timer;
uchar   Test_OKNG;
uchar   Test_012;

 
uchar Test_Order;
uchar STEP_check;
uchar cycle;
uchar BELL_temp;
uchar BELL_Flash;
#define BELL_timer 6
uint R1,R2,R3,R4,C1,C2;
bit StartTest=1;
uchar tdTH,tdTL;
uint tn;
char CtrlP=0;

uint RC_timer;
uint RCr_timer;


#define FN 12
//uint RCtemp[FN];


//LED显示
/*void  LEDshow(void) 
{
   uchar i;
 

   for(i=0;i<7;i++)
	{
	 if((NGLED>>(6-i))&1) DAT=1;  
     else  DAT=0; 
	  delay (5); 	 
     CLK=1;
	 delay (5);   
     CLK=0;
	 delay (5);
	}

	for(i=0;i<7;i++)
	{
	  if((OKLED>>(6-i))&1)DAT=1;   //判断发送位
       else  DAT=0;  
	  delay (5);   
     CLK=1;
	delay (5);  
     CLK=0;
	delay (5); 
	}
     CS=1;
	 delay (5);
     CS=0;
}*/


/*
//串口初始化
void init_serialcomm(void)
{
    SCON  = 0x50;       //串口模式:  模式1 接收允许
    TMOD |= 0x20;       //定时器模式:定时器工作在模式2
    PCON |= 0x80;       //SMOD=1; 倍波特率
    TH1   = 0xF3;       //Baud:9600fosc=24MHz
   // ES    = 1;          //串行中断允许
    TI = 1;
    TR1   = 1;          //定时器1启动 
*/
/*	SCON = 0x50; //串口方式1,允许接收
	TMOD = 0x20; //定时器1定时方式2
	TCON = 0x40; //设定时器1开始计数
	TH1 = 0xE8;	//11.0592MHz 1200波特率
	TL1 = 0xE8;
	
	TR1 = 1; //启动定时器	*/

//}	



//初始化定时器
/*void init_timer(void)
{
  TH0=0;
  TL0=0;

//  TMOD|=0x01; //工作方式1 16位计数方式
//  ET0=1;     //定时器0中断允许
 // TR0=1;     //定时器0启动
  
}


//定时器0中断
/*void timer0(void) interrupt 1 using 1
{
  if(++Test_timer>30) //超时1秒 
  {
    IE0=0;
    IE1=0;
    TF0=0;

	EX0=0;
    EX1=0;
    TR0=0;
    Test_OKNG=NG;

 	}



   if(BELL_temp>0)
	{
      Test_timer=0;
	 if(--BELL_temp==0) 
     { 
	    if(BELL_Flash>0)
		 {
		    BELL_Flash--;
            BELL_temp=BELL_timer;
			BELL=~BELL;
		  }
	  else	
	  {
	    BELL=1;
		TR0=0;
		}
      }
	 }
	 else  BELL=1;
 
}	 */
 

//初始外部中断
/*void init_int(void)
{
   IT0=1;  //外部中断0边沿触发
//	EX0=1;  //外部中断0允许中断

	IT1=1;
 //  EX1=1;

} */

//外部中断0
void int0(void) interrupt 0 using 2
{
	if(StartTest)
  	{
	  	StartTest=0;
		TH0=0;
		TL0=0;
		TR0=ET0=1;
		tn=0;
  	}
  	else
  	{
		do
		{
			tdTH=TH0;
			tdTL=TL0;
		}
		while(tdTH!=TH0);
		tn++;
  	}   
}
void Time32ms (void) interrupt TIMER0INT using 1
{
	uint re;
	re=tdTH;
	re=(re<<8)+tdTL-tn/2;
	re/=tn;
	re++;
	switch(CtrlP)
	{
		case 0:R1=re;break;
		case 1:R2=re;break;
		case 2:R3=re;break;
		case 3:R4=re;break;
	}
	re=0;
	//Next Component
	CtrlP++;
	CtrlP&=0x3;
	P2=CtrlP;
	StartTest=1;
}
//外部中断1
/*void int1(void) interrupt 2 using 3
{
  uint temp;

  temp=TH0;
  temp=(temp<<8)+TL0; 
  TH0=0;
  TL0=0;

   cycle++;
   if(cycle>=50)
   {
     RCtemp[cycle-50]=temp;
	 if(cycle==(FN+50-1))
	 { 
	   TF0=0;
	   IE1=0;
	   TR0=0;
       EX1=0; 
 	   cycle=0;
       Test_OKNG=OK;
	 }
   } 
}
*/
/*
void TEST_GO(void)
{
  
  BELL=1;
  BELL_Flash=0;
  BELL_temp=0;

  Test_timer=0;
  Test_OKNG=0;
  cycle=0;

  IE0=0;
  IE1=0;
  TF0=0;
  
  if(Test_Order<5) EX0=1;
  else             EX1=1;

  TH0=0;
  TL0=0;
  TR0=1;
}

void BB(uchar i)
{
 
  BELL=0;
  TH0=0;
  TL0=0;
  TR0=1; 
   
  if(i==OK)
	 {
	   BELL_temp=BELL_timer*2; 
	 }
   else 
   {
	  BELL_temp=BELL_timer;
	  BELL_Flash=2;
	 }
 
}

uint Filtering(uint *RCi)
{
	 unsigned long  temp;
	 uchar i,j;

	for (j=0;j<FN-1;j++)
	{
		for (i=0;i<FN-j;i++)
		{
			if (RCi[i]>RCi[i+1])
			{
			  temp=RCi[i];
			  RCi[i]=RCi[i+1]; 
			  RCi[i]=temp;
			}
		}
	}
	temp=0;
	for(i=2;i<FN-2;i++)	temp+=RCi[i];
	return (uint)(temp>>3);
  
}


uint code RCmaxmin[6][2]= //上下限
{
  {12672,8448},  //10560  +-20%
  {12672,8448},  //
  {12672,8448}, //
  {12672,8448},	//
  {700, 300},   //500   +-40%
  {700, 300}    //
};   

#define  Rr 10000
#define  Cr 497
#define  Cc 30

void TEST(uchar Order)
{
    unsigned long  temp;
	uchar  LCM_ASCII[16];
	static uchar Ti; 

	 if(Test_OKNG==NG)
		{
	//	 P2=0xff;
		 Test_012=2;
         NGLED&=~(1<<(Order-1));
         Test_OKNG=0;

           if(TestModel==0) BB(NG);

           if(Order==6)
			   {
                if(OKLED==0xc0) 
				   { 
					   OKLED&=~(1<<6);
				    	if(TestModel==1) BB(OK);                 
					 }
				  else           
				    { 
			          NGLED&=~(1<<6);
                   if(TestModel==1)  BB(NG);             
				    }
			   }
		   LEDshow();
		   
		 
		   switch(Order)
	         {
	          case 1: 
			         //printf("R1:∞K NG\n");//测试
					 //chn_disp3("R1:∞K NG\n",0x80);
			  break;
			  case 2: 
			         //printf("R2:∞K NG\n");//测试
					 //chn_disp3("R2:∞K NG\n",0x90);
			  break;
			  case 3: 
			         //printf("R3:∞K NG\n");//测试
					 //chn_disp3("R3:∞K NG\n",0x88);
			  break;
			  case 4: 
			         //printf("R4:∞K NG\n");//测试
					 //chn_disp3("R4:∞K NG\n",0x98);
			  break;
			  case 5: 
			         //clrram();
					 //printf("C5:0p NG\n");//测试
					 //chn_disp3("C5:0p NG\n",0x80);
			  break;
			  case 6: 
			         //printf("C6:0p NG\n");//测试
					 //chn_disp3("C6:0p NG\n",0x90);
					 //printf("\n");
			  break;
		     }

       }



	        if(Test_OKNG==OK)
			  {
			     // P2=0xff;
				  Test_OKNG=0;

					switch(Test_012)
	              {
	               case 0:			
							 
						//	 RCr_timer=Filtering(RCtemp);
						     RCr_timer=((unsigned long)RCr_timer+Filtering(RCtemp))>>1;

							 if(++Ti>10)
							 {
							  // if(Order<5) P2=Order|0xf8;
                              // else        P2=((Order-4)<<3)|0xe7;
							  // Test_012=1;
							   Ti=0;
							   P2=0;
							   Test_012=0;

							   //printf("%u,\n" ,RCr_timer);//测试 
							  }
							  else
							  {
								P2=0;
							    Test_012=0;
							  }
							  TEST_GO();
				      break;
					  case 1:
                               Test_012=2; 
							  RC_timer=Filtering(RCtemp); 
		            
								if(Order<5)  temp=RC_timer*Rr/RCr_timer;
								else        
								{
								   temp=RC_timer*(Cr+Cc)/RCr_timer;
								   if(temp>Cc) temp-=Cc;
                                   else temp=0;
								  }
   
                               if((RCmaxmin[Order-1][0]>=temp)&&(temp>=RCmaxmin[Order-1][1])) 
								         {
								               OKLED&=~(1<<(Order-1));
                                               if(TestModel==0) BB(OK);                  //BB 

											   switch(Order)
											   {
											    case 1:
												      //printf("R1:%uK OK\n",(uint)temp);//测试
													  //sprintf(LCM_ASCII,"R1:%uK OK\n",(uint)temp);
													  //chn_disp3(LCM_ASCII,0x80);  
											    break;
											    case 2:
												      //printf("R2:%uK OK\n",(uint)temp);//测试

⌨️ 快捷键说明

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