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

📄 key.c

📁 8051单片机的运放测试仪电子大赛程序。
💻 C
字号:
//#include<reg51.h>
#include<yh.h>
#include<absacc.h>
#include<math.h>
//按键响应函数 
float V0,VI0;              // 电压比较值,失调电压值   
float VL0,VL1;             // K1,K2闭合或断开时测得的辅助运放的输出电压 
float II0;                 // 失调电流值 
float AVD;					// 测试交流差模开环电压增益AVD 
float KCMR;		     	    //交流共模抑制比KCMR
uint VIB;                   //电压采集测量值 
uchar sw,gw,xsw1,xsw2;
extern uchar key_value ;   //外部中断返回键值  
xdata  float ad_buf[50];

//AD0809转换函数 

void ad_tran(void)  
{
  adbusy=1; 		 
  AD0809=0;                                 // 启动A/D转换 
  while(adbusy==1);                        // 待转换结束 
  delay(10);
  VIB=AD0809;	 
//   VIB=0xaa	;   			   
  V0=(float)((float)VIB/0xff)*5  ;        //	十进制转换	成比较值 

// VI0=(float)((float)VIB/0xff)*5  ;	//  测 试   

}
 
//输出数值转换
void in_tran(float tt)  
{
  
  sw=(uchar)tt/10;			  //转换得出十位的值 
  gw=(uchar)tt%10;			  //转换得出个位的值 
  xsw1=(uchar)(tt*10)%10;	  //转换得出小数点后第一位的值	 
  xsw2=(uchar)(tt*100)%10;	  //转换得出小数点后第二位的值	 
}

 //led显示错误 EFF 
void led_showEFF(void)  
{
  COM8279=0x87;			   // 写显示器RAM	000H 
  DAT8279=table[15];	   // 显示 F  
  COM8279=0x86;			   //  001H 
  DAT8279=table[15];       // 显示 F 
  COM8279=0x85;			   //  002H 
  DAT8279=table[14];	   // 显示 E  
}

//led显示	  
void led_show(void)
{
  COM8279=0X87;
  DAT8279=table[xsw2];
  COM8279=0x86;			   // 写显示器RAM	000H 
  DAT8279=table[xsw1];	   // 显示小数位
  COM8279=0x85;			   //  001H 
  DAT8279=table[gw]|0x80;  // 显示各位并小数点	 
  COM8279=0x84;			   //  002H 
  DAT8279=table[sw];	   // 显示十位
}
/*
//取采样出来的最大值 
void cy_max(void)
{
   uchar i;
   for(i=0;i<50;i++)
	 {
	   ad_tran();		   //	ad采样 50次 
	   ad_buf[i]=V0;	   //  把计算完后的比较值送给数组 
	   delay(10);		   //	延时10ms 
     }
   for(i=1;i<50;i++)
	   if(ad_buf[0]<ad_buf[i])
	       ad_buf[0]=ad_buf[i];	//取采样出来的最大值 
   V0=ad_buf[0];	
}
 */
//取采样平均值 
void cy_ary(void)
{
   uchar i;
   for(i=0;i<50;i++)
	 {
	   ad_tran();		   //	ad采样 50次 
	   ad_buf[i]=V0;	   //  把计算完后的比较值送给数组 
	   delay(10);		   //	延时10ms 
     }
   for(i=0;i<50;i++)
   {
     V0=V0+ad_buf[i];
   }
   V0=V0/50;
}


//测试失调电压VI0    		  
void key0(void)    
{
    PA8255=0x00;//相应的继电器设置     1000	
	delay(1000);		            //延时 100ms
	cy_ary();			        //取出采样50次的最大值 
	VI0=V0;		//计算出失调电压 
	/*
	if(VI0>4)					//如果大于4则再一次进行采样 
	{
	  	PA8255=0x40;//相应的继电器设置  	 100	
	    delay(100);		        //延时 
    	cy_ary();
		VI0=V0*10;
		if(VI0>40)
		{ 
	  		PA8255=0x00;//关闭所有继电器 
			delay(100);
	  		led_showEFF();
			goto loop0;
		}

    }	
	*/
	in_tran(VI0);
	led_show();
//loop0:
   	COM8279=0x80;
	DAT8279=table[1];  	
	//	PC8255=;		  //显示单位LED灯   mV   
//	  VI0=(float)23.22;		  //	 测试 
//    ad_tran();				  //    测试 	

}

//测试失调电流  II0
void key1(void)
{
  //while(!){
 	PA8255=0x00;//0~0.4uA的继电器设置 
	delay(1000);
	cy_ary();
	VL0=V0;
	PA8255=0x30;//0~0.4uA的继电器的设置 
	delay(1000);
	cy_ary();
	VL1=V0;
	II0=VL1-VL0;           //uA	 0uA~0.4uA 
	/*
	if(II0>0.4)
	{
	    PA8255=0x40;//0.4uA~4uA的继电器设置 
	    delay(100);
	    cy_ary();
		VL0=V0;
		PA8255=0x70;//0.4uA~4uA的继电器的设置 
		delay(100);
		cy_ary();
		VL1=V0;
		II0=VL1-VL0;        // uA  0.4uA~4uA
		if(II0>4)
		{
		  PA8255=0x00;//关闭所有继电器 
		  delay(100);
		  led_showEFF();
		  goto loop1;

		}
		
	}	
	*/
	 in_tran(II0);
     led_show();
//loop1:
   	 COM8279=0x80;
	 DAT8279=table[2];
			//	PC8255=;		  //显示单位LED灯 	 uA
			
}

//测试交流差模开环电压增益AVD 
void key2(void)
{
 	//相应继电器的设置 
	delay(100);
	cy_ary();//采样最大值 
	VL0=2*V0*0.707;//求出有效值 
	if(VL0>4)//VL0大于4V则错误 
	{
	 //关闭所有继电器 
	 delay(100);
	 led_showEFF();
	 goto loop2;
	}

	  AVD=20*log((4/VL0)*1000);
	  in_tran(AVD);
      led_show();
loop2:	  
   	  COM8279=0x80;
	  DAT8279=table[3];
	  //	PC8255=;	


}

//交流共模抑制比KCMR	 
void key3(void)
{ 
/* 	//相应继电器的设置 
	delay(100);
	cy_ary();//采样最大值 
	VL0=2*V0*0.707;//求出有效值 
	if(VL0>4)//VL0大于4V则错误 
	{
	 //关闭所有继电器 
	 delay(100);
	 led_showEFF();
	 goto  loop3;
	}

	
	  KCMR=20*log((4/VL0)*1000);
	  in_tran(KCMR);
      led_show();
loop3:	  	   
   	  COM8279=0x80;
	  DAT8279=table[4];
	  //	PC8255=;	
*/	
	 while(1)
	{
	cy_ary();
	//V0=V0-1.06;
	in_tran(V0);
	led_show();
	delay(100);
	}
}

//测试单位增益带宽BWG
void key4(void)
{ 
  
   uchar i,a,b,c;
 	PC8255=0x00;
	a=0x00;
	b=0x87;
	
	for(i=0;i<8;i++)
	{ 
	  c=a&0x01;
	  COM8279=b;
	  DAT8279=table[a];
	  a=a>>1;
	  b--;
	}


		
/*	uchar i,a,b,c;
	a=0xff;
	b=0x87;
	for(i=0;i<8;i++)
	{ 
	  c=a&0x01;
	  COM8279=b;
	  DAT8279=table[c];
      a=a>>1;
	  b--;
	  }	  */

	  
}


//用于测试采集的信号 
void key5(void)
{ /*
	while(1)
	{
	cy_ary();
	V0=V0-1.06;
	in_tran(V0);
	led_show();
	delay(100);
    }	   */
   while(1){
	//测试8255;
	uchar i,a,b,c;
 	PC8255=0xff;
/*	delay(500);
	PA8255=0x00;
	delay(500);
	*/
	a=0xff;
	b=0x87;
	for(i=0;i<8;i++)
	{ 
	  c=a&0x01;
	  COM8279=b;
	  DAT8279=table[c];
      a=a>>1;
	  b--;
	}
	 } 
/*	while(1)
	{
	ad_tran();
	in_tran(V0);
	led_show();
	COM8279=0x80;
	DAT8279=table[6];
	delay(100);
	}
	*/
}

//大概延时1ms
void delay(uchar x)
{
  uchar i;
  while(x--)
  {	
    for(i=0;i<53;i++)
	{}
  }
}	 

⌨️ 快捷键说明

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