📄 main.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 + -