📄 main.c
字号:
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 + -