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

📄 powerlcd.c

📁 本模块是一个电源项目的显示部分包含 1602的头文件以及相关液晶处理成年公序
💻 C
字号:
//powerLcd.c : source file for the power Lcd
//

#include "power.h"
#include "powerLcd.h"

/////////////////////////////////////////////////////////////////////////////
//powerLcd

void LcdInitial(void)
{
	ksState = eNORMAL;	
	
	dVoltage = 0.00;
	dCurrent = 0.00;
	dPower = 0.00;
	dMaxVoltage = 36.00;
	dMaxPower = 180.00;	
	LcdDisplayValue(1, 0, dVoltage);
	lcd_putchar('V');
	LcdDisplayValue(8, 0, dCurrent);
	lcd_putchar('A');
	LcdDisplayValue(1, 1, dPower);
	lcd_putchar('W');
	LcdDisplay(8, 1, "OFF");
	
	
}

void LcdReflush(void)
{
	lcd_clear();
	LcdDisplayValue(1, 0, dVoltage);
	lcd_putchar('V');
	LcdDisplayValue(8, 0, dCurrent);
	lcd_putchar('A');
	if (flag.OnOff)
	{			
		dPower = dVoltage * dCurrent;		
		LcdDisplayValue(1, 1, dPower);
		lcd_putchar('W');
		LcdDisplay(8, 1, "ON ");
	}
	else
	{		
		LcdDisplayValue(1, 1, 0.00);
		lcd_putchar('W');
		LcdDisplay(8, 1, "OFF");
	}	
}

/*
****************************************************************************************************
* 函数名称:LcdProcess
* 函数功能:100ms 修改一次显示缓冲区的数据,状态改变则显示的内容改变
* 输入参数:无
* 输出参数:无
****************************************************************************************************
*/
void LcdProcess(void)
{		
	if (ucTaskID & LCD_TIME)
	{		
		ucTaskID ^= LCD_TIME;
			
		if (ksState != ksOldState)
		{
			ksOldState = ksState;
			lcd_clear();
			switch (ksState)
			{
			case eNORMAL:	
				LcdReflush();		//刷新显示				
				break;		
			case eSTORE:
				lcd_puts(" Save  1");		
				lcd_command(LCD_SHIFT_CURSOR_LEFT);
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);	
				break;				
			case eRECALL:
				lcd_puts(" Call  1");		
				lcd_command(LCD_SHIFT_CURSOR_LEFT);
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);			
				break;				
			case eVSET:	
				lcd_puts("Volt.Set= ");	
				LcdDisplayValue(10, 0, dVoltage);				
				lcd_putchar('V');
				LcdDisplay(0, 1, "New=    ");				
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);
				break;								
			case eISET:
				lcd_puts("Curr.Set= ");		
				LcdDisplayValue(10, 0, dCurrent);				
				lcd_putchar('A');
				LcdDisplay(0, 1, "New=    ");				
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);				
				break;
			case eMENU:	
				LcdDisplay(0, 0, "->MaxVoltage Set");
				LcdDisplay(2, 1, "MaxPower Set");
				break;				
			case eMAXVOLTAGE:
				lcd_puts("Max Volt.=");
				LcdDisplayValue(10, 0, dMaxVoltage);				
				lcd_putchar('V');
				LcdDisplay(0, 1, "New=    ");
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);
				break;										 
			case eMAXPOWER:
				lcd_puts("Max Power=");					
				LcdDisplayValue(10, 0, dMaxPower);
				lcd_putchar('W');
				LcdDisplay(0, 1, "New=    ");				
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);	
				break;		
			case eROTARY:
				LcdDisplay(0, 0, "->SwEnable (Def)");
				LcdDisplay(2, 1, "SwDisable");						
				break;	
			case eINITOUT:
				LcdDisplay(0, 0, "->Ini.Out Save");
				LcdDisplay(2, 1, "Ini.Clear(Def)");				
				break;			
			case eVOLTAGESAVE:
				LcdDisplay(0, 0, "->Save Out Volt");
				LcdDisplay(2, 1, "Don'tSave(Def)");									
				break;			
			case eBUDRATE:				
				LcdDisplay(0, 0, "->BaudRate 4800");
				LcdDisplay(2, 1, "BaudRate 9600");				
				break;
			case eADDRESS:
				LcdDisplay(0, 0, "Address Set= 0");				
				LcdDisplay(0, 1, "New=  ");	
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);
				break;		
			case eKEYLOCK:
				lcd_puts("Set Password:");
				lcd_gotoxy(3,1);
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);	
				break;			
			case eCLEARSAVE:
				lcd_puts("Clear  1");	
				lcd_command(LCD_SHIFT_CURSOR_LEFT);		
				lcd_command(LCD_DISP_CURSOR_ON|LCD_DISP_DISP_ON);	
				break;
			default:	
				break;	
			}//end switch	
		}
	}	
}

/*
****************************************************************************************************
* 函数名称:LcdDisplay
* 函数功能:在指定位置显示字符串
* 输入参数:ucCol:列号		ucRow:行号		cStr:ram 中字符串的地址
* 输出参数:无
****************************************************************************************************
*/
void LcdDisplay(unsigned char ucCol, unsigned char ucRow, char *cStr)
{
	lcd_gotoxy(ucCol, ucRow);
	lcd_puts(cStr);		
}

/*
****************************************************************************************************
* 函数名称:LcdDisplay_P
* 函数功能:在指定位置显示字符串
* 输入参数:ucCol:列号		ucRow:行号		cStr:flash 中字符串的地址
* 输出参数:无
****************************************************************************************************
*/
void LcdDisplay_P(unsigned char ucCol, unsigned char ucRow, prog_char *cStr)
{
	lcd_gotoxy(ucCol, ucRow);
	lcd_puts_P(cStr);
}

/*
****************************************************************************************************
* 函数名称:LcdDisplayValue
* 函数功能:在指定位置显示浮点数值
* 输入参数:ucCol:列号		ucRow:行号		dValue:浮点数的值
* 输出参数:无
****************************************************************************************************
*/
void LcdDisplayValue(unsigned char ucCol, unsigned char ucRow, double dValue)
{
	unsigned int uiH, uiL;
	char ss[5];
	
	lcd_gotoxy(ucCol, ucRow);
	
	uiH = (unsigned int)dValue;	
	
	if (uiH < 10  && uiH >=0)
	{
		uiL =(unsigned int)((dValue - uiH) * 1000);
		if (uiL >= 0 && uiL <10)
			sprintf(ss, "%d.00%d", uiH, uiL);
		else if (uiL < 100)
			sprintf(ss, "%d.0%d", uiH, uiL);
		else
			sprintf(ss, "%d.%d", uiH, uiL);
	}
	else if (uiH < 100)
	{
		uiL = (dValue - uiH) * 100;
		if (uiL >= 0 && uiL <10)
			sprintf(ss, "%d.0%d", uiH, uiL);
		else
			sprintf(ss, "%d.%d", uiH, uiL);
	}
	else
	{
		uiL = (unsigned int)((dValue - uiH) * 10);		
		sprintf(ss, "%d.%d", uiH, uiL);
	}
	
	lcd_puts(ss);	
}

/*
****************************************************************************************************
* 函数名称:StringToDouble
* 函数功能:将字符串转换为浮点数
* 输入参数:s:字符串的地址		
* 输出参数:f:浮点数的值
****************************************************************************************************
*/
double StringToDouble(char *s)
{
	unsigned int uiH,uiL;
	double f;
	
	uiH = atoi(s);	
	uiL = atoii(s);
	if (uiH > 10)
	{
		if (uiL > 100)
			uiL = uiL / 10;
		f = uiH + (double)uiL/100;
	}
	else
		f = uiH + (double)uiL/1000;
	return f;
	
}

/*
****************************************************************************************************
* 函数名称:atoii
* 函数功能:将字符串中小数点'.'后的数字字符串转换为整型值
* 输入参数:s:字符串的地址		
* 输出参数:整型值
****************************************************************************************************
*/
unsigned int atoii(char *s)
{
	
	unsigned char ucStart=0;
	
	while (*s != '\0')
	{
		if (*s == '.')
		{
			ucStart = 1;
			break;
		}	
		s++;	
	}
	
	if (ucStart)
	{
		s++;
		return atoi(s);
	}
	else
		return 0;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -