📄 back.c
字号:
}
}break;
case 0x11://等待确认启动
{
if(key==ENTER)//已确定启动
{
WorkStatus = 0x12;//工作!
Work_commend=0x00ff;
vWork();
}
else
{
WorkStatus = 0x10;//待机
vStop();
}
}break;
case 0x12://工作
{
if(key==ROUND)//停止,需要等待确认
{
WorkStatus = 0x13;//确认后停止
vWait2Ensure();
}
if(key==TRIANGEL)
{
WorkStatus = 0x14;//查询工作参数
vCheck();
}
}break;
case 0x13://等待确认停止
{
if(key==ENTER)//已确定停止
{
WorkStatus = 0x10;
Work_commend=0xff00;
vStop();
}
else
{
WorkStatus = 0x12;
vWork();
}
}break;
case 0x14://显示工作参数态,按任意键返回工作界面
{
WorkStatus = 0x12;
vDisplay();
vWork();
}break;
case 0x20:
{
if(key==ENTER)//进入编辑模式
{
WorkStatus = 0x21;//编辑电压
vSetup();
}
else//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
}
}break;
case 0x21://电压设置
{
if(key==ROUND)//时间设置
{
WorkStatus = 0x24;
}
if(key==TRIANGEL)//电压设置
{
WorkStatus = 0x22;
}
if(key==CANCEL)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x22;//编辑电压
if(TempCVoltage>V_MAX)TempCVoltage = 0;
CVoltage = TempCVoltage;
EEPROM_write(0,CVoltage%256);
EEPROM_write(1,CVoltage/256);
}
vGetInt(key);
}break;
case 0x22://电流设置
{
if(key==ROUND)//电压设置
{
WorkStatus = 0x21;
}
if(key==TRIANGEL)//温度设置
{
WorkStatus = 0x23;
}
if(key==CANCEL)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x23;//编辑电压
if(TempCCurrent>A_MAX)TempCCurrent = 0;
CCurrent = TempCCurrent;
EEPROM_write(2,CCurrent%256);
EEPROM_write(3,CCurrent/256);
}
vGetInt(key);
}break;
case 0x23://温度设置
{
if(key==ROUND)//电流设置
{
WorkStatus = 0x22;
}
if(key==TRIANGEL)//时间设置
{
WorkStatus = 0x24;
}
if(key==CANCEL)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
WorkStatus = 0x24;//编辑电压
if(TempTemp>TE_MAX)TempTemp = 0;
StopTemp = TempTemp;
EEPROM_write(4,StopTemp%256);
EEPROM_write(5,StopTemp/256);
}
vGetInt(key);
}break;
case 0x24://时间设置
{
if(key==ROUND)//温度设置
{
WorkStatus = 0x23;
}
if(key==TRIANGEL)//电压设置
{
WorkStatus = 0x21;
}
if(key==CANCEL)//取消,进入主界面
{
WorkStatus = 0x10;
vStop();
}
if(key==ENTER)//编辑有效,检查是否可用参数
{
if(TempTime>TI_MAX)TempTime = 0;
StopTime = TempTime;
WorkStatus = 0x10;//回主界面
EEPROM_write(6,StopTime%256);
EEPROM_write(7,StopTime/256);
vStop();
}
vGetInt(key);
}break;
default:break;
}
}
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();
return(-1);
}
char LCD_FILL(unsigned char page,unsigned char dat)
{
unsigned int i = 0;
if(LCD_WriteData((page*0x780)%256)==0)return(0);
if(LCD_WriteData((page*0x780)/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*8;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*0x780)%256)==0)return(0);
if(LCD_WriteData((page*0x780)/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*8;i++)
{
dat = pgm_read_byte(p++);
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_PutChar(unsigned char page,unsigned int position,const unsigned char *hz)
{
unsigned char i = 0,k = 0;
unsigned char dat = 0;
unsigned char x = 0,y = 0;
x = position % 256;
y = position / 256;
position = y * 240;
position += x;// * 2;
position += page * 0x780;
for(k=0;k<16;k++)
{
position += 30;
x = position % 256;
y = position / 256;
if(LCD_WriteData(x)==0)return(0);
if(LCD_WriteData(y)==0)return(0);
if(LCD_WriteCommand(LCD_ADD_POS)==0)return(0);
for(i=0;i<2;i++)
{
dat = pgm_read_byte(hz++);
if(LCD_WriteData(dat)==0)return(0);
if(LCD_WriteCommand(LCD_INC_WR)==0)return(0);
}
}
return(-1);
}
char LCD_PutEng(unsigned char page,unsigned int position,const unsigned char *eng)
{
unsigned char i = 0;
unsigned char dat = 0;
unsigned char x = 0,y = 0;
x = position % 256;
y = position / 256;
position = y * 240;
position += x;// * 2;
position += page * 0x780;
for(i=0;i<16;i++)
{
position += 30;
x = position % 256;
y = position / 256;
if(LCD_WriteData(x)==0)return(0);
if(LCD_WriteData(y)==0)return(0);
if(LCD_WriteCommand(LCD_ADD_POS)==0)return(0);
dat = pgm_read_byte(eng++);
if(LCD_WriteData(dat)==0)return(0);
if(LCD_WriteCommand(LCD_INC_WR)==0)return(0);
}
return(-1);
}
char LCD_PutAnyThing(unsigned char page,unsigned int position,unsigned char dat)
{
position += page * 0x780;
if(LCD_WriteData(position%256)==0)return(0);
if(LCD_WriteData(position/256)==0)return(0);
if(LCD_WriteCommand(LCD_ADD_POS)==0)return(0);
if(LCD_WriteData(dat)==0)return(0);
if(LCD_WriteCommand(LCD_NOC_WR)==0)return(0);
return(-1);
}
char LCD_Case(unsigned char page)
{
unsigned int i=0;
unsigned char x=0;
for(i=0;i<60;i++)
{
if(LCD_PutAnyThing(page,0x0000+i,0xff)==0)return(0);
}
for(i=1860;i<1920;i++)
{
if(LCD_PutAnyThing(page,0x0000+i,0xff)==0)return(0);
}
i = 30;
for(x=2;x<62;x++)
{
i += 30;
if(LCD_PutAnyThing(page,i,0xc0)==0)return(0);
if(LCD_PutAnyThing(page,i+29,0x03)==0)return(0);
}
return(-1);
}
void vLCD_Page_Change(unsigned char page)
{
unsigned int pos = 0;
unsigned null = 0;
// CurrentPage = page;
pos = page*0x780;
null = LCD_WriteData(pos%256);
null = LCD_WriteData(pos/256);
null = LCD_WriteCommand(LCD_GRH_STP);
}
void LCD_page0(void)
{
char null = 0;
unsigned char i = 0;
unsigned char page = 0;
const unsigned char *p = name;
null = LCD_FILL(page,00);
for(i=2;i<28;i+=2)
{
null = LCD_PutChar(page,0x0100+i,p);
p += 32;
}
p = web;
for(i=4;i<26;i++)
{
null = LCD_PutEng(page,0x0300+i,p);
p += 16;
}
p = phone;
null = LCD_PutChar(page,0x0502,p);
p += 32;
null = LCD_PutChar(page,0x0504,p);
p = pnum;
for(i=6;i<28;i++)
{
null = LCD_PutEng(page,0x0500+i,p);
p += 16;
}
null = LCD_Case(page);
}
void LCD_page1(void)
{
volatile unsigned char null = 0;
unsigned char page = 1;
const unsigned char *p = name;
page = 1;
null = LCD_FILL(page,0);
vLCD_Page_Change(page);
p = ctrl;
p += 32*32;
null = LCD_Case(page);
null = LCD_PutChar(page,0x0101,p);//状
p += 32;
null = LCD_PutChar(page,0x0103,p);//态
p = web;
p += 4*16;
null = LCD_PutEng(page,0x0105,p);//:
null = LCD_PutEng(page,0x0305,p);//:
null = LCD_PutEng(page,0x0505,p);//:
null = LCD_PutEng(page,0x0311,p);//:
null = LCD_PutEng(page,0x0511,p);//:
//null = LCD_PutEng(page,0x0510,p);//:
//null = LCD_PutEng(page,0x0513,p);//:
p = ctrl;
p += 24*32;
null = LCD_PutChar(page,0x0301,p);//电
p += 32;
null = LCD_PutChar(page,0x0303,p);//压
p += 32;
null = LCD_PutChar(page,0x0501,p);//电
p += 32;
null = LCD_PutChar(page,0x0503,p);//流
p = ctrl;
p += 30*32;
null = LCD_PutChar(page,0x030d,p);//温
p +=32;
null = LCD_PutChar(page,0x030f,p);//度
p = ctrl;
p += 36*32;
null = LCD_PutChar(page,0x0316,p);//℃
p = ctrl;
p += 40*32;
null = LCD_PutChar(page,0x0516,p);//分
p = ctrl;
p += 14*32;
null = LCD_PutChar(page,0x050d,p);//时
p +=32;
null = LCD_PutChar(page,0x050f,p);//间
}
unsigned char cKeyScan(void)
{
unsigned char k = 0x00;
PORTD = 0x30;
DDRD = 0x30;
PORTC = 0x0fc;
DDRC = 0x00;
DDRD = 0x3f;
vWait(10);
if(KEYPIN4 == 0){k = 0x40;KEYDIR4 = 1;}
if(KEYPIN5 == 0){k = 0x50;KEYDIR5 = 1;}
if(KEYPIN6 == 0){k = 0x60;KEYDIR6 = 1;}
if(KEYPIN7 == 0){k = 0x70;KEYDIR7 = 1;}
DDRD &= 0xf0;
vWait(10);
k |= ((~PIND)&0x0f);
KEYDIR4 = 0;
KEYDIR5 = 0;
KEYDIR6 = 0;
KEYDIR7 = 0;
return(k);
}
unsigned char cKey(unsigned char keyval)
{
switch(keyval)
{
case 0x41:return(10);
break;
case 0x42:return(11);
break;
case 0x44:return(12);
break;
case 0x48:return(13);
break;
case 0x51:return(0);
break;
case 0x52:return(3);
break;
case 0x54:return(2);
break;
case 0x58:return(1);
break;
case 0x61:return(14);
break;
case 0x62:return(6);
break;
case 0x64:return(5);
break;
case 0x68:return(4);
break;
case 0x71:return(15);
break;
case 0x72:return(9);
break;
case 0x74:return(8);
break;
case 0x78:return(7);
break;
default:return(0x0ff);
break;
}
}
/////////////////////////////////////////////////////////////////////////
//系统函数区/////////////////////////////////////////////////////////////
void vInit(void)
{
vPortInit();
vTimer0Init();
if(MCUCSR&(1<<WDRF));//wdt rest
if(MCUCSR&(1<<BORF));//brown out
if(MCUCSR&(1<<PORF));//power on
MCUCR = 0x00;
SREG |= 0x80;
vOCR1Init();
vSpiInit();
}
void vPortInit(void)
{
PORTA = 0x0ff;
DDRA = 0x00;
PORTB = 0x0ff;
DDRB = 0x4f;
PORTC = 0x0ff;
DDRC = 0x00;
PORTD = 0x0ff;
DDRD = 0x30;
}
void vTimer0Init(void)
{
OCR0 = 249;
TCCR0 = 0x0b;
}
void vOCR1Init(void)
{
OCR1A = 0x0000;
OCR1B = 0x0000;
TCCR1A = 0x0f2;
TCCR1B = 0x19;
ICR1 = 0x03e7;
}
void vSpiInit(void)
{
SPCR = 0xce;
SPSR = 0x00;
}
/////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -