📄 page2.c
字号:
#include "zimo.h"
#include "data.h"
#include "dataChange.h"
#include "spwm.h"
#include "page2.h"
#include "System.h"
int Page2_order=0; //PAGE2级数
int Page2_col=-1; //栏目
int Page2_bit=-1; //位,显示与存储脱节,应该纠正
int Hamanic_num=3; //几次谐波
int Amp_Angle[2][BitNum]={{0,1,2,3,10,4},{0,1,2,3,10,4}}; //幅度相位
int PAGE_TWO(void) {
int i,num;
num = 2;
LCDDELAY;
/* LCDPORTCMD = LCD_CSRFORM;
for(i=0;i<2;i++){ //设置块状光标
LCDDELAY;
LCDPORTDATA = PCsrBlock[i];
} */
LCDDELAY;
LCDPORTCMD = LCD_OVLAY;
LCDDELAY;
// LCDPORTDATA = 9; //设置一、为文本属性,三区为图形属性
LCDPORTDATA = 9;
LCDDELAY;
LCDPORTCMD = LCD_DISPON;
LCDDELAY;
LCDPORTDATA = 0x15; //设置一~四区开显示,三关闭
// line(312,24,312,120,LCD_SET);
// line(288,24,288,120,LCD_SET);
// line(264,24,264,120,LCD_SET);
// line(240,24,240,120,LCD_SET);
// line(240,24,312,24,LCD_SET);
// line(240,48,312,48,LCD_SET);
// line(240,72,312,72,LCD_SET);
// line(240,96,312,96,LCD_SET);
// line(240,120,312,120,LCD_SET);
// line(244,40,260,40,LCD_SET);
//***************************
// writechar(31,4,'1',0);
// writechar(34,4,'2',0);
// writechar(37,4,'3',0);
// writechar(31,7,'4',0);
// writechar(34,7,'5',0);
// writechar(37,7,'6',0);
// writechar(31,10,'7',0);
// writechar(34,10,'8',0);
// writechar(37,10,'9',0);
// writechar(31,13,'-',0);
// writechar(34,13,'0',0);
// writechar(37,13,'.',0);
//****************************
//*********************************
writechar(4,3,'P',0);
writechar(5,3,'I',0);
writechar(6,3,'D',0);
DisplyCh(56,20,char56,0);
DisplyCh(72,20,char18,0);
DisplyCh(88,20,char52,0);
DisplyCh(104,20,char48,0);
writechar(11,3,':',0);
//********************************
DisplyCh(40,46,char60,0);
DisplyCh(56,46,char61,0);
DisplyCh(72,46,char46,0);
DisplyCh(88,46,char18,0);
writechar(13,7,'K',0);
writechar(14,7,'p',0);
writechar(15,7,':',0);
// DispData(104,54,CodeVolValueA,6);
//********************************
DisplyCh(40,72,char62,0);
DisplyCh(56,72,char63,0);
DisplyCh(72,72,char46,0);
DisplyCh(88,72,char18,0);
writechar(13,10,'K',0);
writechar(14,10,'i',0);
writechar(15,10,':',0);
//*********************************
DisplyCh(40,98,char64,0);
DisplyCh(56,98,char63,0);
DisplyCh(72,98,char46,0);
DisplyCh(88,98,char18,0);
writechar(13,13,'K',0);
writechar(14,13,'d',0);
writechar(15,13,':',0);
//**********************************
// DisplyCh(24,124,char25,0); //变
// DisplyCh(40,124,char14,0);
// DisplyCh(56,124,char11,0);
// DisplyCh(72,124,char25,0);
// DisplyCh(88,124,char60,0);
// DisplyCh(104,124,char52,0);
// DisplyCh(120,124,char48,0);
// writechar(17,17,':',0);
//*********************************
// DisplyCh(40,150,char6,0);
// DisplyCh(56,150,char15,0);
// DisplyCh(72,150,char25,0);
// DisplyCh(88,150,char18,0);
// DisplyCh(104,150,char11,0);
// writechar(15,20,':',0);
//**********************************
// DisplyCh(40,176,char6,0);
// DisplyCh(56,176,char16,0);
// DisplyCh(72,176,char25,0);
// DisplyCh(88,176,char18,0);
// DisplyCh(104,176,char11,0);
// writechar(15,23,':',0);
//***********************************
//************************************
// DisplyCh(144,204,char22,0); //
// DisplyCh(160,204,char24,0); //取消按钮
DisplyCh(40,130,char1,0); //谐波次数
DisplyCh(56,130,char2,0);
DisplyCh(40,156,char68,0); //幅值
DisplyCh(56,156,char69,0);
DisplyCh(40,182,char10,0); //频率
DisplyCh(56,182,char12,0);
//默认参数
Page2_order=0; //PAGE2级数
Page2_col=-1; //栏目
Page2_bit=-1; //位
Hamanic_num=3; //几次谐波
//获取数据
Flash_Open_Data(LCD_Z);
ShowPrameter();
return(num);
}
//显示PID三个参数
void ShowPrameter()
{
int Prameter;
//显示P
Prameter=spwm_moudle.Kp;
Display_Value(130,62,Prameter,6,MaxP);
Prameter=spwm_moudle.Ki;
Display_Value(130,86,Prameter,6,MaxI);
Prameter=spwm_moudle.Kd;
Display_Value(130,104,Prameter,6,MaxD);
}
int* KeyServePage2(int code, int *CsrFlag )
{
switch(code) {
case KeyEnter:
// CLEAR();
// PageNum = LCDPAGE0();
if(Page2_order<PAGE2_DEPTH)
{
Enter_Page2_Process();
}
break;
case KeyEsc:
DispData(40,220,(unsigned int *)" ",31);
if(Page2_order>0)
{
Esc_Page2_Process();
}
else
{ //返回主界面
CLEAR();
PageNum = LCDPAGE0();
FillRect(29,201,99,223,LCD_TOG);
*CsrFlag=1;
ReCacuPWM=1; //重新计算PWM
}
break;
case KeyUp:
if(Page2_col==0 && Hamanic_num<MaxHamnic )
{
Hamanic_num+=2;
Flash_Open_Data(LCD_F);
//保存信息等
break;
}
if(Page2_order!=2)
break;
switch(Page2_col)
{
case 1:
//进行上限检查
case 2:
Amp_Angle[Page2_col-1][BitLast-Page2_bit]++;
ReCheckNum(Amp_Angle[Page2_col-1],BitNum);
ShowNum(Page2_col); //显示数据
break;
default:
break;
}
break;
case KeyDown:
if(Page2_col==0 && Hamanic_num>MinHamnic )
{
Hamanic_num-=2;
Flash_Open_Data(LCD_F);
//保存信息等
break;
}
if(Page2_order!=2)
break;
switch(Page2_col)
{
case 1:
case 2:
Amp_Angle[Page2_col-1][BitLast-Page2_bit]--;
ReCheckNum(Amp_Angle[Page2_col-1],BitNum);
ShowNum(Page2_col); //显示数据
break;
default:
break;
}
break;
case KeyLeft:
if(Page2_order==1)
{
SelectCol(LCD_TOG);
Page2_col=(Page2_col+2)%3; //位置为0,1,2
SelectCol(LCD_TOG);
}
else
if(Page2_order==2)
{
if(Page2_bit<BitLast-1)
{
if(++Page2_bit==1) //小数点
Page2_bit++;
ShowNum(Page2_col);
}
}
break;
case KeyRight:
if(Page2_order==1)
{
SelectCol(LCD_TOG);
Page2_col=(Page2_col+1)%3;
SelectCol(LCD_TOG);
}
else
if(Page2_order==2)
{
if(Page2_bit>0)
{
if(--Page2_bit==1) //小数点
Page2_bit--;
ShowNum(Page2_col);
}
}
break;
default:
break;
}
return(CsrFlag);
}
void Enter_Page2_Process()
{
switch(Page2_order++)
{
case 0:
Page2_col=0;
SelectCol(LCD_TOG);
break; //默认选中区域1,谐波次数
case 1:
if(Page2_col==0)
{
//保存数据
//上限检测 360度
if(Limitation(Amp_Angle[0],BitNum,MaxSetV,0)!=0 || Limitation(Amp_Angle[1],BitNum,3600,0)!=0)
{
//提示越界
Page2_order=1;
DispData(40,220,(unsigned int *)"limition error,please reinput!",31);
}
else
{
spwm_moudle.Ample[(Hamanic_num>>1)-1]=DataToFloat((unsigned int *)Amp_Angle[0],BitNum ,InvMaxHam) ;
spwm_moudle.Angle[(Hamanic_num>>1)-1]=DataToFloat((unsigned int *)Amp_Angle[1],BitNum ,InvMaxAngle) ;
Page2_order=0;
SelectCol(LCD_TOG);
}
}
else
{
Page2_bit=0;
ShowNum(Page2_col);
}
break;
}
}
void Esc_Page2_Process()
{
switch(Page2_order)
{
case 2:
Page2_bit=-1;
Page2_order--;
ShowNum(Page2_col);
SelectCol(LCD_TOG);
break; //默认选中区域1,谐波次数
case 1:
break; //隐藏选中
}
}
void SelectCol(int flag) //选中栏
{
switch(Page2_col)
{
case 0:
FillRect(136,130,143,145,flag);
break;
case 1:
FillRect(136,156,175,171,flag);
break;
case 2:
FillRect(136,182,175,197,flag);
break;
}
}
void ShowNum(int col) //显示数据
{
int i;
for(i=1;i<BitNum;i++) //第1位符号位省去
{
if((i==BitLast-Page2_bit)||(i==BitPoint)) //1为符号位
DisplyBigNum(128+i*8,130+col*26,int0[Amp_Angle[col-1][i]],LCD_F);
else
DisplyBigNum(128+i*8,130+col*26,int0[Amp_Angle[col-1][i]],LCD_Z);
}
}
int ReCheckNum(int *Array,int num)
{
int i=0,flag=0;
int *pdata=Array+num-1; //指向个位
for(;i<num-1;i++) //不包括符号位
{
if(i==1) //小数点
{
pdata--;
continue;
}
*pdata+=flag;
flag=0; //进位
if(*pdata>=10)
{
*pdata-=10;
flag=1;
}
else
if(*pdata<0)
{
*pdata+=10;
flag=-1;
}
pdata--;
}
//下限处理
if(flag==-1)
{
pdata++;
for(i=0;i<num;i++)
{
if(i!=(num-3))
*pdata=0;
pdata++;
}
}
return 0;
}
//限幅处理
int Limitation(int *Array,int num,int Uplimit,int Lowlimit)
{
int sum=SumArray((unsigned int*)Array,num);
if(sum>=Uplimit)
return ERROR_UPLIMIT;
else
if(sum<Lowlimit)
return ERROR_DOWNLIMIT;
else
return 0;
}
void Flash_Open_Data(int mode)
{
DataChange(spwm_moudle.Ample[(Hamanic_num>>1)-1],(unsigned int *)Amp_Angle[0], BitNum,MaxHamanicVout);
//
DataChange(spwm_moudle.Angle[(Hamanic_num>>1)-1],(unsigned int *)Amp_Angle[1], BitNum,360);
//
DisplyBigNum(136,130,int0[Hamanic_num],mode);
ReCheckNum(Amp_Angle[0],BitNum);
ShowNum(1);
ReCheckNum(Amp_Angle[1],BitNum);
ShowNum(2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -