📄 program.c
字号:
LCDNUM(ABC[15],90,4); //
LCDNUM(NUM[16],74,5); //6.
LCDNUM(ABC[16],82,5); //YES.
LCDNUM(ABC[17],90,5); //
LCDNUM(NUM[17],74,6); //7.
LCDNUM(ABC[18],82,6); //HELP.
LCDNUM(ABC[19],90,6); //
LCDNUM(NUM[ADMO],110,7); //显示当前采样模式.
}
/* ***********************************************************************
** 函 数 名:void MUNMAX()
** 功能描述:采样模式界面.
************************************************************************** */
void MUNMAX()
{
LCDCLEAR(1); //清屏.
LCDCLEAR(2); //清屏.
LCDNUM(ABC[12],56,1); //标题.
LCDNUM(ABC[13],64,1); //标题.
LCDNUM(NUM[10],30,3); //0.
LCDNUM(NUM[0],48,3); //0
LCDNUM(JS,80,3); //+
LCDNUM(NUM[5],88,3); //5
LCDNUM(NUM[11],30,4); //1.
LCDNUM(JC,40,4); //-
LCDNUM(NUM[5],48,4); //5
LCDNUM(JS,80,4); //+
LCDNUM(NUM[5],88,4); //5
LCDNUM(NUM[12],30,5); //2.
LCDNUM(NUM[0],48,5); //0
LCDNUM(JS,72,5); //+
LCDNUM(NUM[1],80,5); //1
LCDNUM(NUM[0],88,5); //0
LCDNUM(NUM[13],30,6); //3.
LCDNUM(JC,40,6); //-
LCDNUM(NUM[1],48,6); //1
LCDNUM(NUM[0],56,6); //0
LCDNUM(JS,72,6); //+
LCDNUM(NUM[1],80,6); //1
LCDNUM(NUM[0],88,6); //0
}
/* ***********************************************************************
** 函 数 名:void MUNABC()
** 功能描述:双通道显示界面.
************************************************************************** */
void MUNABC()
{
LCDCLEAR(1); //清屏.
LCDCLEAR(2); //清屏.
LCDNUM(ABC[4+CHAN*2],24,0); //标题.
LCDNUM(ABC[5+CHAN*2],32,0); //标题.
LCDNUM(UB[CHAN],0,1); //U*.
LCDNUM(IB[CHAN],0,2); //I*.
LCDNUM(PB[CHAN],0,3); //P*.
LCDNUM(QB[CHAN],0,4); //Q*.
LCDNUM(SB[CHAN],0,5); //S*.
LCDNUM(LB[CHAN],0,6); //L*.
LCDNUM(FB[CHAN],0,7); //F*.
}
/* ***********************************************************************
** 函 数 名:void MUNXB()
** 功能描述:谐波显示界面.
************************************************************************** */
void MUNXB()
{
LCDCLEAR(1); //清屏.
LCDCLEAR(2); //清屏.
LCDNUM(ABC[4+CHAN*2],24,0); //标题.
LCDNUM(ABC[5+CHAN*2],32,0); //标题.
LCDNUM(UB[CHAN],20,1); //U*.
LCDNUM(IB[CHAN],80,1); //I*.
LCDNUM(BH,40,1); //符号.
LCDNUM(BH,100,1); //符号.
LCDNUM(NUM[11],0,2); //1.
LCDNUM(NUM[13],0,3); //3.
LCDNUM(NUM[15],0,4); //5.
LCDNUM(NUM[17],0,5); //7.
LCDNUM(NUM[19],0,6); //9.
}
/* ***********************************************************************
** 函 数 名:void MUNALL()
** 功能描述:多通道界面.
************************************************************************** */
void MUNALL()
{
LCDCLEAR(1); //清屏.
LCDCLEAR(2); //清屏.
LCDNUM(ABC[10],24,0); //标题.
LCDNUM(ABC[11],32,0); //标题.
LCDNUM(UB[0],0,2); //U1.
LCDNUM(IB[0],0,5); //I1.
LCDNUM(UB[1],0,3); //U2
LCDNUM(IB[1],0,6); //I2.
LCDNUM(UB[2],0,4); //U3.
LCDNUM(IB[2],0,7); //I3.
LCDNUM(PB[0],64,2); //P1.
LCDNUM(QB[0],64,5); //Q1.
LCDNUM(PB[1],64,3); //P2.
LCDNUM(QB[1],64,6); //Q2.
LCDNUM(PB[2],64,4); //P3.
LCDNUM(QB[2],64,7); //Q3.
}
/* ***********************************************************************
** 函 数 名:void MUND()
** 功能描述:单通道界面.
************************************************************************** */
void MUND()
{
LCDCLEAR(1); //清屏.
LCDCLEAR(2); //清屏.
LCDNUM(NUM[10],0,0); //标题.
LCDNUM(JJ,24,0); //符号.
LCDNUM(BH,40,0); //符号.
LCDNUM(NUM[11],0,2); //1.
LCDNUM(NUM[13],0,3); //3.
LCDNUM(NUM[15],0,4); //5.
LCDNUM(NUM[17],0,5); //7.
LCDNUM(NUM[19],0,6); //9.
}
/* ************************************************************************
** 函 数 名: void main()
** 功能描述:主函数,实现各子程序调用和流程安排.
*************************************************************************** */
void main()
{
INITIAL(); //系统初始化.
T3INIT(); //TMR3时钟初始化.
LCDINITI(1); //初始化第一片LCD.
LCDINITI(2); //初始化第二片LCD.
IPEN=1; //使能中断高低优先级.
INTCON=INTCON|0xC0; //开总中断.
TMR3ON=1; //开定时器.
MUNM(); //显示主菜单.
while(1) //一级while(1)
{
if(MAXD==1) //进入双通道数据处量.
{
MAXD=0; //标志位清零.
MUNABC(); //显示界面.
CCPINIT(); //启动获取频率数据.
while(1) //二级while(1)
{
ABCSH(); //数据显示.
ADSHOW(); //波形显示.
ADCHX(); //AD采样.
XBFX(); //谐波分析.
PLJS(); //频率计算.
if(MAXD==1) //切换采样通道.
{
MAXD=0; //标志位清零.
MUNABC(); //重新显示界面.
}
if(SURE==1) //
{
SURE=0; //标志位清零.
CYTZ(); //调整采样频率.
}
if(NEXT==1) //进入显示谐波数据显示界面.
{
NEXT=0; //标志位清零.
MUNXB(); //显示界面.
while(1) //三级while(1)
{
ADCHX(); //AD采样.
XBFX(); //谐波分析.
XBSH(); //数据显示.
if(NEXT==1) //
{
NEXT=0; //标志位清零.
CYTZ(); //调整采样频率.
}
if(MAXD==1) //切换采样通道.
{
MAXD=0; //标志位清零.
MUNXB(); //重新显示界面.
}
if(BACK==1) //
{
BACK=0; //标志位清零.
MUNABC(); //显示上级界面.
break; //退出本级.
}
if(GUID==1) //显示HELP.
{
break; //退出本级.
}
}
}
if(MAXA==1) //进入多通道数据处理.
{
break; //退出本级.
}
if(BACK==1) //
{
BACK=0; //标志位清零.
MUNM(); //显示上级界面.
break; //退出本级.
}
if(GUID==1) //显示HELP.
{
break; //退出本级.
}
}
CCP1IE=0; //关闭频率采样中断.
TMR1ON=0; //关闭频率采样时钟
}
if(MAXA==1) //进入多通道数据处理.
{
MAXA=0; //标志位清零.
MUNALL(); //显示界面.
while(1) //二级while(1)
{
ADALL(); //多通道数据采样显示.
if(MAXD==1) //切换到双通道采样.
{
break; //退出本级.
}
if(BACK==1) //
{
BACK=0; //标志位清零.
MUNM(); //显示上级界面.
break; //标志位清零.
}
if(GUID==1) //显示HELP.
{
break; //退出本级.
}
}
}
if(BACK==1) //选择采样模式.
{
BACK=0; //标志位清零.
MUNMAX(); //显示界面.
while(1) //
{
if(MAXD==1&&CHAN==0) //模式0.
{
MAXD=0; //标志位清零.
ADMO=0; //模式0.
CHX=0; //单极性.
LCDNUM(NUM[0],112,7); //显示当前采样模式.
ADCAN=0X40; //基控制字.
}
if(MAXD==1&&CHAN==1) //模式1.
{
MAXD=0; //标志位清零.
ADMO=1; //模式1.
CHX=1; //双极性.
LCDNUM(NUM[1],112,7); //显示当前采样模式.
ADCAN=0X48; //基控制字.
}
if(MAXD==1&&CHAN==2) //模式2.
{
MAXD=0; //标志位清零.
ADMO=2; //模式2.
CHX=0; //单极性.
LCDNUM(NUM[2],112,7); //显示当前采样模式.
ADCAN=0X50; //基控制字.
}
if(MAXA==1) //模式3.
{
MAXA=0; //标志位清零.
ADMO=3; //模式3.
CHX=1; //双极性.
LCDNUM(NUM[3],112,7); //显示当前采样模式.
ADCAN=0X58; //基控制字.
}
if(SURE==1) //
{
SURE=0; //标志位清零.
CHAN=0; //标志位清零.
MUNM(); //显示上级界面.
break; //退出本级.
}
}
}
if(NEXT==1) //进入单通道高速采样.
{
NEXT=0; //标志位清零.
MUND(); //显示界面.
while(1) //二级while(1).
{
ADCHD(); //数据采样处量显示.
if(BACK==1) //
{
BACK=0; //标志位清零.
MUNM(); //显示上级界面.
break; //退出本级.
}
}
}
if(SURE==1) //
{
SURE=0; //标志位清零.
MUNM(); //显示主界面.
}
if(GUID==1) //
{
GUID=0; //标志位清零.
GUIDE(); //显示HELP.
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -