📄 powerlcd.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 + -