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

📄 main.c

📁 该程序是基于c8051f020的平台
💻 C
📖 第 1 页 / 共 2 页
字号:
    ADC0CF = (SYSCLK/2500000) << 3;    // ADC转换时钟2.5MHz
    ADC0CF &= ~0x07;       // PGA增益 = 1
    EIE2 &= ~0x02;         // 禁止ADC0中断
    AD0EN = 1;             // 使能ADC0
}

//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
void lcd_display(void)
{  	 
     Clr_Char_Area();
	 Clr_Graph_Area();
	 ShowChar(1,1,char1);
	 ShowChar(2,1,char2);
	 ShowChar(3,1,char3);
	 ShowChar(4,1,char4);

   	  
}
void read (void)
{  
   EA = 0;
   P1=0xf0;
   e=P1;
   if(e!=0xf0)             //有输入
     {
         delay(30,30);     //去抖
         P1=0xf0;
         e=P1;
         if(e!=0xf0)       //确认有键
           {            
               P1=0xf0;
               delay(1,10);
               H=P1&0xf0;      //读键值高4位
               P1=0x0f;
               delay(1,10);
               L=P1&0x0f;      //读键值低4位
               key=H|L;
               key=~key;
               switch(key)
                  { 
                     case 0x11 : dat='0';break;
                     case 0x21 : dat='1';break;
                     case 0x41 : dat='2';break;
                     case 0x81 : dat='3';break;   
                     case 0x12 : dat='4';break;
                     case 0x22 : dat='5';break;
                     case 0x42 : dat='6';break;
                     case 0x82 : dat='7';break;    
                     case 0x14 : dat='8';break;   
                     case 0x24 : dat='9';break;
                     case 0x44 : dat='S';break;
                     case 0x84 : dat='E';break;    
                     case 0x18 : dat='a';break;   
                     case 0x28 : dat='d';break;
                     case 0x48 : dat='A';break;    
                     case 0x88 : dat='D';break;    
                     default : break;
                  }
              P1=0xf0;
              while(P1!=0xf0);     //等待键释放
              data_deal();  
           }
      }
     EA = 1;                    
} 
void data_deal(void)
{   
    uchar a ,i,j,n,l,p;
	char m,k;
    if(dat=='S')            //功能键按下时初始化相应数据
      {  
          enable=1;
          lcd_display()	;
      }
	  if(enable==1)
      {  
		   AMX0CF = 0x00;
           AMX0SL = 0x00;	            //选用通道AIN0测试vb
		   delay(10,10);
		   adc_change();
		   vb=ADc*655L;
		   vb=vb/1000;
		   AMX0CF = 0x00;
           AMX0SL = 0x05;			    //选用通道AIN5测试vb_2
		   delay(10,10);
		   adc_change();
		   vb_2=ADc*655L;
		   vb_2=vb_2/1000;
		   AMX0CF = 0x00;
           AMX0SL = 0x02;				//选用通道AIN2测试vc
		   delay(10,10);
		   PGA();
		   vc=AD*655L;
		   vc=vc/1000;
		   AMX0CF = 0x00;
           AMX0SL = 0x03;				//选用通道AIN3测试ve
		   delay(10,10);
		   adc_change();
		   ve=ADc*655L;
		   ve=ve/1000;
		  if(dat=='1')
		   {
		    ve=ve*45;
		    Amp=ve/vb;
            aa[0]=(uchar)(Amp/100)+'0';
	        aa[1]=(uchar)((Amp/10)%10)+'0';
	        aa[2]=(uchar)(Amp%10)+'0';
			Clr_Char_Area();
		    ShowChar(1,1,char5);
			ShowChar(1,5,aa);  
		   }
          if(dat=='2')
		  {
		     if((vb_2-ve)>350)
			    {
				 Clr_Char_Area();
				 ShowChar(2,1,char6);
				 ShowChar(2,6,"Si");
				}
				else
				{
				  Clr_Char_Area();
				  ShowChar(2,1,char6);
				  ShowChar(2,6,"Zhe");
				}
		  }
		   
		  if(dat=='3')
		  {
		    Clr_Char_Area();
	        Clr_Graph_Area();
		   a=0;
		   m=0;
		   p=0;
/*描绘输出特性曲线*/
		   dac0832_1=0x00;
		   dac0832_2=0x00;
		   for(i=0;i<4;i++ )
	   		{  
			   a=0;
			   n=0;
			   dac0832_1=char7[p];
				 p=p+15;
			   for(l=0;l<200;l++)
				   {
				      delay(200,200);
				   }
               delay(100,10);
			   for(j=0;j<64;j++)
			    {
				     dac0832_2=n;
					 n=n+4;
					 AMX0CF = 0x00;
				     AMX0SL = 0x03; 
					 delay(10,10);
				     PGA();
					 ve=AD*655L;
		             ve=ve/1000;
					 ve=ve*64;
					 kk[a]=ve/1000;
					  
					 if(a==0)
					  {
					    Locat_Dot(a,kk[a]);
					  }
					 else
					  {
						  m=kk[a]-kk[a-1];
						  if(m>1)
						  {
							 for(k=0;k<m;k++)
							  {
							    Locat_Dot(a-1,kk[a-1]+k);
							  }
							 
						  }						
						  else if(m<-1)
						  {
					         for(k=m;k<0;k++)
							 {
							   Locat_Dot(a-1,kk[a-1]+k);
							 }
						  }
						 Locat_Dot(a,kk[a]);
					  }
					 a++;
			  }

	}
/* 描绘输入特性曲线*/
				  for(i=0;i<64;i++)
					  {
					  	 kk[i]=0;
					  }											 
				  dac0832_1=0x00;								 //控制Ib的电流 
		          dac0832_2=0x00;								 //控制VCE的电压
				  for(i=0;i<29; )
					  {
					       a=0;
						   dac0832_2=i;
						   i=i+10;
						    for(j=0;j<64;j++)
								{
								   dac0832_1=char7[j];
								   for(l=0;l<150;l++)
								   {
								   delay(200,200);
								   }
								   AMX0CF = 0x00;
						           AMX0SL = 0x00; 	             //选用通道AIN0测试vb
								   delay(10,10);
								   adc_change();
								   delay(10,10);
								   vb=ADc*655L;
								   vb=vb/1000.0*64;	
								   vb=vb/2000;
								   kk1[a]=vb;



								   AMX0CF = 0x00;
                                   AMX0SL = 0x05;			     //选用通道AIN5测试vb_2
								   adc_change();
								   vb_2=ADc*655L;
								   vb_2=vb_2/1000;


								   AMX0CF = 0x00;
						           AMX0SL = 0x02;				//选用通道AIN2测试vc
								   delay(10,10);
								   PGA();
								   vc = AD*655L;  
								   vc = vc/1000;

								   AMX0CF = 0x00;
						           AMX0SL = 0x03;				//选用通道AIN3测试ve
								   delay(10,10);
								   adc_change();
								   ve=ADc*753;
								   ve=ve/1000;

								   vbe = vb_2-ve;
								   vbe = vbe*64;
								   vbe=vbe/1400+64;
								   kk[a]=vbe;

								   a++;
				             }
						  for(k=0;k<63;k++)
						  {
						      Line(kk[k],kk1[k],kk[k+1],kk1[k+1]);
						  } 	
								
					   }
					   
		  }				 
		   
		  if(dat=='4')
		  {
		  
		  } 
	  } 
}
/*void error(void)                      //输入错误时提示操作
{
   enable=0;
  ShowChar(2,1,char4);
 
}*/
void adc_change()
{
    AD0INT = 0;
	AD0BUSY = 1;
	while(AD0INT==0)
	delay(10,10);
    ADc=ADC0H*256;
    ADc|=ADC0L;


}
void PGA()
{	 
     uchar h;
     dac0832=0x01;
     h=dac0832;
	 delay(10,10);
     adc_change();
	 while(ADc<0xaaf)
	 {
	   h=h+4;
	   dac0832=h;
	   delay(10,10);
	   adc_change();
	   if(h>250)
	     break;
	 }
	 
	   AD=ADc*255L;
	   AD=AD/h;
	 

}

⌨️ 快捷键说明

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