📄 main.c
字号:
#include<c8051f020.h>
#include "initial.h"
#define sysclk 22118400 // SYSCLK frequency in Hz
xdata long uint value,value1;
xdata long uint i=0;
uchar t,stop0;
uint AD_num,AD_num2;
uint relay_A;
uchar pga_A;
uchar keynum;
xdata long uint I_I,Y;
bit isnewdata,flag_f;
sbit relay0=P0^0;
sbit relay1=P0^1;
sbit relay2=P0^2;
sbit relay3=P0^3;
/*sbit A0=P3^4;
sbit A1=P3^5;
sbit A2=P3^6;
sbit A3=P3^7;*/
uchar code table2[]={'0','1','2','3',
'4','5','6','7',
'8','9'};
uchar data0,data1,data2,data3;
uchar code str1[]="welcome to ADC0 test!";//8
uchar code str2[]="test key V:";//12
uchar code str3[]="test key I:";
uchar code str4[]="V true RMS is:";//9
uchar code str5[]="I true RMS is:";
void main( )
{
SYSTEM_Init(); //系统初始化
PORT_Init(); //端口初始化
Lcd1602_Initial( ); //Lcd初始化 ]
delay(10);
AD9851_Init();
Lcd1602_Write_String(1,1,"DDS Begin-> 'F' ");
while(1)
{
/* keynum=KeyEn();
if(keynum==12) //dds C
{
f_add();
}
if(keynum==13)
{
flag_f=0;
select_f();
}
if(keynum==14) //ad
{
relay_begin();
// pga_begin();
process_ADC00();
process_ADC00();
change_relay();
// process_ADC00();
// change_pga();
process_ADC00(); //测电流变电压的电压
process_ADC01(); //测导纳网络本身的电压
measure_Y();
Y_display();
}
if(keynum==15)
{ */
angle_measure();
// }
}
}
void display_f(long fre)
{
Lcd1602_Clear_All( );
delay(10);
if(fre<1000)
{
Lcd1602_Write_String(1,0,"Fre: Hz ");
Lcd1602_Write_Data(1,4,fre/100+0x30);
Lcd1602_Write_Data(1,5,fre%100/10+0x30);
Lcd1602_Write_Data(1,6,fre%10+0x30);
}
if(fre>999)
{
Lcd1602_Write_String(1,0,"Fre: . kHz");
Lcd1602_Write_Data(1,4,fre/100000+0x30);
Lcd1602_Write_Data(1,5,fre%100000/10000+0x30);
Lcd1602_Write_Data(1,6,fre%10000/1000+0x30);
Lcd1602_Write_Data(1,8,fre%1000/100+0x30);
}
}
void process_ADC00()
{
uchar DataH,DataL;
Lcd1602_Clear_Line(1);
Lcd1602_Write_String(1,0,str2);
ADC00Initial();
ADC0begin();
DataH=ADC0H;
DataL=ADC0L;
AD_num=DataH*256+DataL;
AD0INT=0;
onshow_data(AD_num);
}
void process_ADC01()
{
uchar DataH,DataL;
Lcd1602_Clear_Line(1);
Lcd1602_Write_String(1,0,str3);
ADC01Initial();
ADC0begin();
DataH=ADC0H;
DataL=ADC0L;
AD_num2=DataH*256+DataL;
AD0INT=0;
onshow_data(AD_num2);
}
void onshow_data(uint AD_x)
{
long uint V_RMS;
V_RMS=AD_x*0.59326171875;
data2=V_RMS%1000/100;
data3=V_RMS/1000;
data1=V_RMS%1000%100/10;
data0=V_RMS%1000%100%10;
Lcd1602_Write_Data(2,10,table2[data3]);
Lcd1602_Write_Data(2,11,'.');
Lcd1602_Write_Data(2,12,table2[data2]);
Lcd1602_Write_Data(2,13,table2[data1]);
Lcd1602_Write_Data(2,14,table2[data0]);
}
void relay_begin()
{
relay0=0;
relay1=1; //10倍 R=10
relay2=0;
relay3=0;
}
/*void pga_begin()
{
A0=0; //选择放大倍数为1
A0=0;
A0=0;
A0=0;
} */
void change_relay()
{
if(AD_num>=0&&AD_num<1012)
{
relay0=0;
relay1=0; //10倍 R=1000
relay2=0;
relay3=1;
relay_A=1000;
}
if(AD_num>=1013&&AD_num<2022)
{
relay0=0;
relay1=0; //10倍 R=100
relay2=1;
relay3=0;
relay_A=100;
}
if(AD_num>=2023&&AD_num<3034)
{
relay0=0;
relay1=1; //10倍 R=10
relay2=0;
relay3=0;
relay_A=10;
}
if(AD_num>=3035)
{
relay0=1;
relay1=0; //10倍 R=1
relay2=0;
relay3=0;
relay_A=1;
}
}
/*void change_pga()
{
if(AD_num>0&&AD_num<400)
{
A0=1; //放大10倍
A1=0;
A2=0;
A3=0;
pga_A=10;
}
if(AD_num>400)
{
A0=0; //放大1倍
A1=0;
A2=0;
A3=0;
pga_A=1;
}
} */
void measure_Y()
{
//I=AD_num*0.59326171875/10/relay_A/pga_A;
//Y=I/(AD_num*0.59326171875);
// I_I=100000*AD_num/relay_A/pga_A; //仪表放大十倍
I_I=100000*AD_num/relay_A; //仪表放大十倍
Y=I_I/(AD_num2*1.00);
}
void Y_display()
{
uchar y5,y4,y3,y2,y1,y0;
y5=Y/100000;
y4=Y%100000/10000;
y3=Y%100000%10000/1000;
y2=Y%100000%10000%1000/100;
y1=Y%100000%10000%1000%100/10;
y0=Y%100000%10000%1000%100%10;
}
void select_f()
{
Lcd1602_Clear_All( );
delay(10);
display_selection();
while(!flag_f)
{
keynum=KeyEn();
if(keynum==1)
{
display_f(100);
AD9851_DDS_Control(100,0);
}
if(keynum==2)
{
display_f(300);
AD9851_DDS_Control(300,0);
}
if(keynum==3)
{
display_f(1000);
AD9851_DDS_Control(1000,0);
}
if(keynum==4)
{
display_f(3000);
AD9851_DDS_Control(3000,0);
}
if(keynum==5)
{
display_f(10000);
AD9851_DDS_Control(10000,0);
}
if(keynum==6)
{
flag_f=1;
}
}
}
void f_add()
{
Lcd1602_Clear_All( );
stop0=0;
while(!stop0)
{
for(i=0;i<20;i++)
{
keynum=KeyEn(); //i=2;
display_f(100*i+100);
AD9851_DDS_Control(100*i+100,0);
delay(2000); //while(1);
if(keynum==2)
{
stop0=1;
break;
}
}
}
Lcd1602_Write_String(1,12,"stop");
}
void display_selection()
{
Lcd1602_Write_String(1,0,"1-100");
Lcd1602_Write_String(1,6,"2-300");
Lcd1602_Write_String(1,12,"3-1K");
Lcd1602_Write_String(2,0,"4-3K");
Lcd1602_Write_String(2,5,"5-10K");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -