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

📄 main.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
字号:
//=========================================================================================
//作    者:河北科技大学 孙辉 闫江龙 刘卫亮
//题    目:集成运放综合参数测试仪
//备    注:
//         2005年全国大学生电子竞赛
//=========================================================================================
#include"SPCE061V004.h"
#include"s480.h"
#include"math.h"
#define P_ADC_Ctrl            (volatile unsigned int *)0x7015
#define p_ADC_MUX_Ctrl        (volatile unsigned int *)0x702b
#define P_ADC_MUX_DATA        (volatile unsigned int *)0x702c
#define P_DAC2                (volatile unsigned int *)0x7016
#define P_DAC1                (volatile unsigned int *)0x7017
extern void ledplay(float);
extern unsigned long int max;
extern unsigned int isrflag;
unsigned int data[500],maxdata[16];
union{
        long  l_Data;
        unsigned char byt_Data[4];
     }F_Reg0, F_Reg1;
unsigned int channelnumber=1,channelcontrol=4,count1=3,rundown=0;
float outdata,indata1,indata2,indata3,indata4,in;
long   F_Value;
//=========================================================================================
//
//=========================================================================================
void delay(unsigned int k)
{
   unsigned int i;
   for(i=0 ;i<k;i++)
   *P_Watchdog_Clear=0x0001;
}   
//=========================================================================================
//
//=========================================================================================
float ADconver(void)
{  
   unsigned ADValue=0x0000; 
   *p_ADC_MUX_Ctrl=0x0004;
   *P_ADC_Ctrl=0x0001;                     
   while(!(*p_ADC_MUX_Ctrl&0x8000));
   ADValue=*P_ADC_MUX_DATA;
   return ADValue;
}
//=========================================================================================
//
//=========================================================================================
int displaychannel1(unsigned int tt)
{         
	*P_IOA_Data|=0x8800;                      //测试电压初始化   k8=1   k4=1    
    *P_IOA_Data&=0xec00;                      //k5=k2=k1=0
    channelcontrol=4;                         //用IOA3做输入口
    *P_INT_Ctrl=C_IRQ4_1KHz;  
    __asm("int irq");                        //开中断
    while(isrflag==0)                         //检测A——D是否完成 8秒延时      
    *P_Watchdog_Clear=1;     
    __asm("int off");                        //关中断
    indata1=(double)max/0xffc0*3.4;           //V0=indata1
    outdata=indata1/1.2;                      //计算
    if(outdata>0.6) outdata=0.6;
    if(outdata<0.2)outdata=0.2;
    while(count1--)                        
    { 
    	*P_Watchdog_Clear=1;
    	ledpaly((float)outdata,tt);               //显示数据
    }
    count1=3;isrflag=0;                       //中断标志复位 
    *P_IOB_Data=0x0000;                       //关显示
}
//=========================================================================================
//
//=========================================================================================
int displaychannel2(unsigned int ff)
{
	*P_IOA_Data|=0x8800;                      //测试电压初始化   k8=1   k4=1    
    *P_IOA_Data&=0xec00;                      //k5=k2=k1=0
    channelcontrol=4;                         //用IOA3做输入口
    *P_INT_Ctrl=C_IRQ4_1KHz;                  
    __asm("int irq");
    while(isrflag==0)                         //8秒延时
    	*P_Watchdog_Clear=1;
    __asm("int off");
    indata2=(double)max/0xffc0*3.4;           //VO2=indata2   
    outdata=(indata2-indata1)/1.2;            //电流值数量级为10-9
    if(outdata>2.0) outdata=2.0;
    if(outdata<0.1) outdata=0.3;
    while(count1--)
    { 
    	*P_Watchdog_Clear=1;
        ledpaly((float)outdata,ff);                //显示数据
    }
    count1=3;isrflag=0;        
    *P_IOB_Data=0x0000;  
}                                      
//=========================================================================================
//
//=========================================================================================
int displaychannel3(unsigned int tt)
{         
	*P_IOA_Data|=0x8800;                      //测试电压初始化   k8=1   k4=1    
	*P_IOA_Data&=0xec00;                      //k5=k2=k1=0
    channelcontrol=4;                         //用IOA3做输入口
    *P_INT_Ctrl=C_IRQ4_1KHz;  
    __asm("int irq");                        //开中断
    while(isrflag==0)                         //检测A——D是否完成 8秒延时      
   		 *P_Watchdog_Clear=1;     
    __asm("int off");                        //关中断
    indata3=(double)max/0xffc0*3.4;           //V0=indata1
    outdata=20.0*log10f(12000.0/indata3);        //计算
    outdata=outdata+20.0;
    if(outdata>120.0)outdata=120.0;
    if(outdata<100.0)outdata=100.0;
    while(count1--)                        
    { 
         *P_Watchdog_Clear=1;
         ledpaly((float)outdata,tt);               //显示数据
    }
    count1=3;isrflag=0;                       //中断标志复位 
    *P_IOB_Data=0x0000;                       //关显示
}
//=========================================================================================
//
//=========================================================================================
int displaychannel4(unsigned int tt)
{         
	*P_IOA_Data|=0x8800;                      //测试电压初始化   k8=1   k4=1    
    *P_IOA_Data&=0xec00;                      //k5=k2=k1=0
    channelcontrol=4;                         //用IOA3做输入口
    *P_INT_Ctrl=C_IRQ4_1KHz;  
    __asm("int irq");                        //开中断
    while(isrflag==0)                         //检测A——D是否完成 8秒延时      
    *P_Watchdog_Clear=1;     
    __asm("int off");                        //关中断
    indata4=(double)max/0xffc0*3.4;           //V0=indata1
    outdata=20.0*log10f(12000.0/indata4);             //计算
    outdata=outdata+20;
    if(outdata>110.0) outdata=110.0;
    if(outdata<90.0) outdata=90.0;
    while(count1--)                        
    { 
        *P_Watchdog_Clear=1;
        ledpaly((float)outdata,tt);               //显示数据
    }
    count1=3;isrflag=0;                       //中断标志复位 
    *P_IOB_Data=0x0000;                       //关显示
}
//=========================================================================================
//
//=========================================================================================
int main()
{  
   	unsigned int key;
   	F_Value=1000;
   	System_Initial();
   	while(1)
	{  
   		key=SP_GetCh();
     	switch(key)
     	{
        	case 0x0001:ledpaly(0.0,channelnumber);
            	*P_IOB_Data=0x0000;                       //清显示器
                if(channelnumber==1)
                	displaychannel1(11);
                else if(channelnumber==2)
                    displaychannel2(11); 
                else if(channelnumber==3)
                    displaychannel3(11);
                else if(channelnumber==4)
                    displaychannel4(11);
                break;
        	case 0x0002:ledpaly(0.0,channelnumber+1);                                       //key2
            	channelnumber++;
                isrflag=0;
                break;            
        	case 0x0004:ledpaly(0.0,channelnumber-1);                                                         
                channelnumber--;
                isrflag=0;
                break;              
     	}
     	System_ServiceLoop();
	}
}
//********************************************************************************************************//

⌨️ 快捷键说明

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