📄 main.c
字号:
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==F4)//
{
S_state++;
if(S_state>=6)
{
S_state=0;
}
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x21;//恒压
XS_state[number] = S_state;
EEPROM_write((number+102),XS_state[number]%256);
//vDisplay();
TempValue = XVoltage[number];
break;
}
vSet_state(S_state);
}break;
case 0x21://恒压设置
{
if(key==RIGHT)//下一页
{
if(number>=10)
{
number=10;
break;
}
number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x22;//恒流
if(TempValue>V_MAX)TempValue = 0;
CVoltage = TempValue;
XVoltage[number] = TempValue;
EEPROM_write((2*number),XVoltage[number]%256);
EEPROM_write((2*number+1),XVoltage[number]/256);
//vDisplay();
TempValue = XCurrent[number];
break;
}
vGetInt(key);
DisNum(TempValue,5);
}break;
case 0x22://恒流
{
if(key==RIGHT)//下一页
{
if(number>=10)
{
number=10;
break;
} number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x23;//涓流
if(TempValue>A_MAX)TempValue = 0;
CCurrent = TempValue;
XCurrent[number] = TempValue;
EEPROM_write((2*number+20),XCurrent[number]%256);
EEPROM_write((2*number+21),XCurrent[number]/256);
//vDisplay();
TempValue = XStopCurrent[number];
break;
}
vGetInt(key);
DisNum(TempValue,6);//TempValue
}break;
case 0x23://涓流
{
if(key==RIGHT)//下一页
{
if(number>=10)
{
number=10;
break;
}
number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x24;//时间
if(TempValue>A_MAX)TempValue = 0;
StopCurrent = TempValue;
XStopCurrent[number] = TempValue;
EEPROM_write((2*number+40),XStopCurrent[number]%256);
EEPROM_write((2*number+41),XStopCurrent[number]/256);
//vDisplay();
TempValue = XStopTime[number];
break;
}
vGetInt(key);
DisNum(TempValue,7);
}break;
case 0x24://时间
{
if(key==RIGHT)//下一页
{
if(number>=10)
{
number=10;
break;
}
number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x25;//容量
if(TempValue>TE_MAX)TempValue = 0;
StopTime = TempValue;
XStopTime[number] = TempValue;
EEPROM_write((2*number+60),XStopTime[number]%256);
EEPROM_write((2*number+61),XStopTime[number]/256);
//vDisplay();
TempValue = XStopCapacitor[number];
break;
}
vGetInt(key);
DisNum(TempValue,8);
}break;
case 0x25://容量
{
if(key==RIGHT)//下一页
{
if(number>=10)
{
number=10;
break;
}
number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x27;//恒压
if(TempValue>TE_MAX)TempValue = 0;
StopCapacitor = TempValue;
XStopCapacitor[number] = TempValue;
EEPROM_write((2*number+80),XStopCapacitor[number]%256);
EEPROM_write((2*number+81),XStopCapacitor[number]/256);
//vDisplay();
TempValue = S_number[number];
break;
}
vGetInt(key);
DisNum(TempValue,9);
}break;
case 0x27://循环
{
if(key==RIGHT)//下一页
{
if(number>=10)break;
number++;
vDisplay();
vSetup();
break;
}
if(key==LIFT)//上一页
{
if(number<=1)break;
number--;
vDisplay();
vSetup();
break;
}
if(key==ESC)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
dis_fige=0;
vLCD_Page_Change(1);//切换数据显示页面
m_page=1;
break;
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x26;//恒压
if(TempValue>10)TempValue = 0;
S_number[number] = TempValue;
EEPROM_write((number+112),S_number[number]%256);
S_state =XS_state[number];
break;
}
vGetInt(key);
DisNum(TempValue,10);
}break;
default:break;
}
}
void vSet_state(unsigned char op)
{
const unsigned char *p = ctrl;
switch(op)
{
case 0:
{
LCD_PutChar(2,0x030a,p+63*32);//结
LCD_PutChar(2,0x030c,p+64*32);//束
}break;
case 1:
{
LCD_PutChar(2,0x030a,p+46*32);//恒
LCD_PutChar(2,0x030c,p+37*32);//压
}break;
case 2:
{
LCD_PutChar(2,0x030a,p+46*32);//恒
LCD_PutChar(2,0x030c,p+39*32);//流
}break;
case 3:
{
LCD_PutChar(2,0x030a,p+61*32);//放
LCD_PutChar(2,0x030c,p+18*32);//电
}break;
case 4:
{
LCD_PutChar(2,0x030a,p+62*32);//暂
LCD_PutChar(2,0x030c,p+8*32);//停
}break;
case 5:
{
LCD_PutChar(2,0x030a,p+52*32);//循
LCD_PutChar(2,0x030c,p+53*32);//环
}break;
}
}
void vSetPara(void)
{
const unsigned char *p = ctrl;
switch(WorkStatus)
{
case 0x14:
{
LCD_PutChar(2,0x0106,p+14*32);//设
LCD_PutChar(2,0x0108,p+15*32);//置
LCD_PutChar(2,0x010a,p+16*32);//查
LCD_PutChar(2,0x010c,p+17*32);//询
}break;
case 0x21:
{
LCD_PutChar(2,0x0106,p+46*32);//恒
LCD_PutChar(2,0x0108,p+37*32);//压
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x22:
{
LCD_PutChar(2,0x0106,p+46*32);//恒
LCD_PutChar(2,0x0108,p+39*32);//流
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x23:
{
LCD_PutChar(2,0x0106,p+38*32);//涓
LCD_PutChar(2,0x0108,p+39*32);//流
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x24:
{
LCD_PutChar(2,0x0106,p+24*32);//时
LCD_PutChar(2,0x0108,p+25*32);//间
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x25:
{
LCD_PutChar(2,0x0106,p+28*32);//容
LCD_PutChar(2,0x0108,p+29*32);//量
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x26:
{
LCD_PutChar(2,0x0106,p+6*32);//状
LCD_PutChar(2,0x0108,p+7*32);//态
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
case 0x27:
{
LCD_PutChar(2,0x0106,p+52*32);//循
LCD_PutChar(2,0x0108,p+53*32);//环
LCD_PutChar(2,0x010a,p+14*32);//设
LCD_PutChar(2,0x010c,p+15*32);//置
}break;
default:
{
p = zero;
LCD_PutChar(2,0x0106,p);//
LCD_PutChar(2,0x0108,p);//
LCD_PutChar(2,0x010a,p);//
LCD_PutChar(2,0x010c,p);//
return;
}break;
}
}
void vWork(void)
{
const unsigned char *p = ctrl;
p = ctrl;
LCD_PutChar(1,0x0b11,p+8*32);//停
LCD_PutChar(1,0x0b13,p+9*32);//止
LCD_PutChar(1,0x0b06,p+16*32);//查
LCD_PutChar(1,0x0b08,p+17*32);//询
LCD_PutChar(1,0x0106,p+10*32);//工
LCD_PutChar(1,0x0108,p+11*32);//作
switch(NS_state)
{
case 0:
{
LCD_PutChar(1,0x0106,p+63*32);//结
LCD_PutChar(1,0x0108,p+64*32);//束
}break;
case 1:
{
LCD_PutChar(1,0x0106,p+46*32);//恒
LCD_PutChar(1,0x0108,p+37*32);//压
}break;
case 2:
{
LCD_PutChar(1,0x0106,p+46*32);//恒
LCD_PutChar(1,0x0108,p+39*32);//流
}break;
case 3:
{
LCD_PutChar(1,0x0106,p+61*32);//放
LCD_PutChar(1,0x0108,p+18*32);//电
}break;
case 4:
{
LCD_PutChar(1,0x0106,p+62*32);//暂
LCD_PutChar(1,0x0108,p+8*32);//停
}break;
case 5:
{
LCD_PutChar(1,0x0106,p+52*32);//循
LCD_PutChar(1,0x0108,p+53*32);//环
}break;
}
p = zero;
LCD_PutChar(1,0x010a,p);//
p = english;
LCD_PutEng(1,0x0b04,p+0*16);//F1_F
LCD_PutEng(1,0x0b0f,p+0*16);//F2_F
p = nen;
LCD_PutEng(1,0x0b05,p+1*16);//1
LCD_PutEng(1,0x0b10,p+3*16);//2
}
void vStop(void)
{
const unsigned char *p = ctrl;
p = ctrl;
LCD_PutChar(1,0x0106,p+8*32);//停
LCD_PutChar(1,0x0108,p+9*32);//止
LCD_PutChar(1,0x0b11,p+12*32);//启
LCD_PutChar(1,0x0b13,p+13*32);//动
LCD_PutChar(1,0x0b06,p+14*32);//设
LCD_PutChar(1,0x0b08,p+15*32);//置
p = english;
LCD_PutEng(1,0x0b04,p+0*16);//F1_F
LCD_PutEng(1,0x0b0f,p+0*16);//F2_F
p = nen;
LCD_PutEng(1,0x0b05,p+1*16);//1
LCD_PutEng(1,0x0b10,p+2*16);//2
p = zero;
LCD_PutChar(1,0x010a,p);//
}
void vWait2Ensure(void)
{
const unsigned char *p = ctrl;
p = ctrl;
LCD_PutChar(1,0x0106,p+32*32);//等
LCD_PutChar(1,0x0108,p+33*32);//待
LCD_PutChar(1,0x010a,p+48*32);//确
/*p = zero;
LCD_PutChar(1,0x0119,p);//
LCD_PutChar(1,0x011b,p);//
LCD_PutChar(1,0x0519,p);//
LCD_PutChar(1,0x051b,p);//*/
}
void vSetup(void)
{
unsigned int np = 0;
unsigned char page = 2;
const unsigned char *p = nen;
p = nen;
np = number/10;
np %= 10;
LCD_PutEng(page,0x0311,p+np*16);//xxXx
np = number/1;
np %= 10;
LCD_PutEng(page,0x0312,p+np*16);//xxxX
}
void vCheck(void)
{
// const unsigned char *p = ctrl;
/* p = ctrl;
LCD_PutChar(2,0x0106,p+16*32);//查询
LCD_PutChar(2,0x0108,p+17*32);//查询
LCD_PutChar(3,0x0106,p+16*32);//查询
LCD_PutChar(3,0x0108,p+17*32);//查询
LCD_PutChar(2,0x0119,p+40*32);//换页
LCD_PutChar(2,0x011b,p+41*32);//换页
LCD_PutChar(3,0x0119,p+40*32);//换页
LCD_PutChar(3,0x011b,p+41*32);//换页
LCD_PutChar(2,0x0519,p+42*32);//退出
LCD_PutChar(2,0x051b,p+43*32);//退出
LCD_PutChar(3,0x0519,p+42*32);//退出
LCD_PutChar(3,0x051b,p+43*32);//退出
p = zero;
LCD_PutChar(1,0x010a,p);//*/
}
void vWait(unsigned int us)
{
unsigned int i = 0;
{
for(i=0;i<us;i++)
{
__asm__(" WDR");
__asm__(" WDR");
__asm__(" WDR");
__asm__(" WDR");
__asm__(" WDR");
__asm__(" WDR");
__asm__(" WDR");
}
}
}
void vWrite(unsigned char data)
{
PORTA = data;
DDRA = 0x0ff;
vWait(2);
LCD_WR = 0;
vWait(2);
LCD_WR = 1;
}
unsigned char ucRead(void)
{
unsigned char rt = 0;
LCD_RD = 0;
vWait(2);
rt = PINA;
LCD_RD = 1;
vWait(2);
return(rt);
}
char LCD_StatusCheck(unsigned char mask) /*check if mask equer to status*/
{
unsigned int i = 0;
while(((LCD_ReadStatus()&mask)!=mask)&&(i++<1500))
{
if(i==500)__asm__(" WDR");
if(i>1000)
{
LCD_RST = 0;
vWait(1);
LCD_RST = 1;
return(0);
}
}
return(-1);
}
char LCD_WriteCommand(unsigned char cmd)
{
if(LCD_StatusCheck(LCD_CC)==0)return(0);
LCD_CMD;
vWrite(cmd);
return(-1);
}
char LCD_WriteData(unsigned char dat)
{
if(LCD_StatusCheck(LCD_CC)==0)return(0);
LCD_DATA;
vWrite(dat);
return(-1);
}
char LCD_AutoWriteData(unsigned char dat)
{
if(LCD_StatusCheck(LCD_DATA_CW_EN)==0)return(0);
LCD_DATA;
vWrite(dat);
return(-1);
}
unsigned char LCD_ReadStatus(void)
{
LCD_CMD;
return(ucRead());
}
unsigned char LCD_ReadData(void)
{
if(LCD_StatusCheck(LCD_CC)==0)return(0);
LCD_DATA;
return(ucRead());
}
unsigned char LCD_AutoReadData(void)
{
if(LCD_StatusCheck(LCD_DATA_CR_EN)==0)return(0);
LCD_DATA;
return(ucRead());
}
char LCD_INIT(void)
{
OCR1A = 500;//背光0-999
LCD_RST = 0;
vWait(10);
LCD_RST = 1;
if(LCD_WriteCommand(LCD_MOD_XOR)==0)return(0);
if(LCD_WriteCommand(LCD_GRA_ON)==0)return(0);
if(LCD_WriteData(0x1e)==0)return(0);
if(LCD_WriteData(0x00)==0)return(0);
if(LCD_WriteCommand(LCD_GRH_WID)==0)return(0);
if(LCD_WriteData(0x00)==0)return(0);
if(LCD_WriteData(0x00)==0)return(0);
if(LCD_WriteCommand(LCD_GRH_STP)==0)return(0);
LCD_page0();
LCD_page1();
LCD_page2();
// LCD_page3();
return(-1);
}
char LCD_FILL(unsigned char page,unsigned char dat)
{
unsigned int i = 0;
if(LCD_WriteData((page*0xF00)%256)==0)return(0);
if(LCD_WriteData((page*0xF00)/256)==0)return(0);
if(LCD_WriteCommand(LCD_ADD_POS)==0)return(0);
if(LCD_WriteCommand(LCD_AUT_WR)==0)return(0);
if(LCD_StatusCheck(LCD_CC)==0)return(0);
for(i=0;i<240*16;i++)
{
if(LCD_AutoWriteData(dat)==0)
{
i = LCD_INIT();
return(0);
}
}
if(LCD_WriteCommand(LCD_AUT_OVR)==0)
{
i =LCD_INIT();
return(0);
}
return(-1);
}
char LCD_LOAD_PAGE(unsigned char page,const unsigned char *p)
{
unsigned int i = 0;
unsigned char dat = 0;
if(LCD_WriteData((page*0XF00)%256)==0)return(0);
if(LCD_WriteData((page*0XF00)/256)==0)return(0);
if(LCD_WriteCommand(LCD_ADD_POS)==0)return(0);
if(LCD_WriteCommand(LCD_AUT_WR)==0)return(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -