⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 AVR单片机ATMEGA32驱动240*128LCD程序
💻 C
📖 第 1 页 / 共 3 页
字号:
				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 + -