📄 sample_main.i
字号:
while (*Str)
{
LCD_WriteData(*Str);
Str++;
}
}
/*******************************************************************************
** 函数名称: LCD_WriteCGRAM **
** 功能描述: 往LCD的CGRAM中写入特殊字符图形 **
** 输入参数: BYTE Text : CGRAM对应的字符,也就是字符图形在flash中的位置 **
** BYTE DDRAM : 要写入的DDRAM的位置,一般是0~15有效。 **
** BYTE REVERSE : 掩模反色,0~7分别对应字符图形的0~7行,位1表示反色. **
** 输出参数: 无 **
*******************************************************************************/
void LCD_WriteCGRAM(flash unsigned char *Font, unsigned char DDRAM, unsigned char Reverse)
{
unsigned char Buf[5];
unsigned char Buf2[8];
unsigned char k = 0;
unsigned char l = 0;
LCD_WriteCtrl((1 << (6)) + DDRAM * 8);
Font = Font+4;
for (l = 0; l < 8; l++)
{
Buf2[l] = 0;
}
for (k = 0; k < 5; k++)
{
Buf[k] = *Font--;
for (l = 0; l < 8; l++)
{
Buf2[l] |= ((Buf[k] & (1 << l)) >> l) << k;
}
}
for (l = 0; l < 8; l++)
{
if (Reverse & (1 << l))
{
LCD_WriteData(~Buf2[l]);
}
else
{
LCD_WriteData(Buf2[l]);
}
}
}
/*******************************************************************************
** 函数名称: LCD_Init **
** 功能描述: 初始化LCD显示模块 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void LCD_Init(void)
{
DDRA |= (1 << (6 ));
DDRA |= (1 << (7 ));
LCD_WriteCtrl((1 << (5))|(1 << (4))|(1 << (3))|0x00);
delay_us(1500);
LCD_WriteCtrl((1 << (2))|(1 << (1))|0x00);
delay_us(1500);
LCD_HideCursor();
LCD_Clear();
LCD_CursorPos = 1;
}
/*******************************************************************************
** 函数名称: KEY_GetChar **
** 功能描述: 取得用户的输入 **
** 输入参数: 无 **
** 输出参数: BYTE:键盘码 **
*******************************************************************************/
unsigned char KEY_GetChar(void)
{
unsigned char Result = 0;
Result = (~PINB) & 0xFF;
return Result;
}
/*******************************************************************************
** 函数名称: KEY_Init **
** 功能描述: KEY初始化 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void KEY_Init(void)
{
DDRB &= ~0xFF;
PORTB |= 0xFF;
}
/*******************************************************************************
** 外部变量和函数导入 **
*******************************************************************************/
extern void ExecuteMenu(void);
extern void GetManualValue(unsigned char ValueID, unsigned int * Value);
extern void SetManualValue(unsigned char ValueID, unsigned int * Value);
/*******************************************************************************
** 函数名称: GUI_Push_Stack **
** 功能描述: GUI变量压栈,保存当前的GUI变量 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_Push_Stack(void)
{
unsigned char *pMenuGui = &(MenuGui);
unsigned char i;
for (i=0; i<5; i++)
{
MENU_Stack[MENU_StackIndex++] = *pMenuGui++;
}
}
/*******************************************************************************
** 函数名称: GUI_Pop_Stack **
** 功能描述: GUI变量出栈,恢复当前的GUI变量 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_Pop_Stack(void)
{
unsigned char *pMenuGui = &(MenuGui.ItemCount);
unsigned char i;
for (i=0; i<5; i++)
{
*pMenuGui-- = MENU_Stack[--MENU_StackIndex];
}
}
/*******************************************************************************
** 函数名称: IntToStr **
** 功能描述: 把数值转换成字符串,并返回长度 **
** 输入参数: BYTE *Buffer : 字符串缓冲区 **
** WORD Value : 需要转换的值 **
** 输出参数: BYTE : 字符串长度 **
*******************************************************************************/
unsigned char IntToStr(unsigned char *Buffer, unsigned int Value)
{
unsigned int V[5]={10000,1000,100,10,1};
unsigned char i,j;
j=0;
for (i=0; i<5 - 1; i++)
{
Buffer[j]='0';
while (Value >= V[i])
{
Buffer[j]++;
Value -= V[i];
}
if (Buffer[0]>'0')
{
j++;
}
}
Buffer[j]='0' + Value;
return (j+1);
}
/*******************************************************************************
** 函数名称: GetIntLen **
** 功能描述: 计算数值的长度 **
** 输入参数: WORD Value : 需要计算的数值 **
** 输出参数: BYTE : 数值的长度 **
*******************************************************************************/
unsigned char GetIntLen(unsigned int Value)
{
unsigned int V[5]={10000,1000,100,10,1};
unsigned char i,j;
j=1;
for (i=0; i<5; i++)
{
if (Value >= V[i])
{
j = 5 - i;
break;
}
}
return (j);
}
/*******************************************************************************
** 函数名称: GUI_GetControlValue **
** 功能描述: 将菜单项所对应的控制项的值取出到全局变量MENU_Result里 **
** 输入参数: BYTE MENU_ID : 对应的菜单项ID **
** 输出参数: 控制值的大小(1 = 8Bit, 2 = 16Bit) **
*******************************************************************************/
unsigned char GUI_GetControlValue(unsigned char MENU_ID)
{
flash unsigned char *SubMenuDefine;
unsigned char Type;
unsigned char ControlValue;
unsigned char ControlWidth;
SubMenuDefine = &MenuData[Menu[MENU_ID]];
Type = SubMenuDefine[0x00] & 0x0F;
if (Type == 0x05)
{
ControlValue = SubMenuDefine[0x01];
ControlWidth = SubMenuDefine[0x02];
}
else if (Type == 0x03)
{
ControlValue = SubMenuDefine[0x03];
ControlWidth = 1;
}
else
{
ControlValue = 0;
ControlWidth = 2;
}
if (ControlValue == 0 )
{
MENU_Result.Word = 0;
GetManualValue(MENU_ID, (unsigned int*)(&MENU_Result));
}
else if (ControlValue < 1 + 1)
{
if (ControlWidth == 1)
{
MENU_Result.Word = 0;
MENU_Result.Byte = MENU_Control[ControlValue];
}
else if (ControlWidth == 2)
{
MENU_Result.Word = *(unsigned int *)(&MENU_Control[ControlValue]);
}
else
{
MENU_Result.Word = 0;
}
}
else
{
MENU_Result.Word = 0;
}
return ControlWidth;
}
/*******************************************************************************
** 函数名称: GUI_SetControlValue **
** 功能描述: 将全局变量MENU_Result里的值保存到菜单项所对应的控制项内存里 **
** 输入参数: BYTE MENU_ID : 对应的菜单项ID **
** 输出参数: 无 **
*******************************************************************************/
void GUI_SetControlValue(unsigned char MENU_ID)
{
flash unsigned char *SubMenuDefine;
unsigned char Type;
unsigned char ControlValue;
unsigned char ControlWidth;
SubMenuDefine = &MenuData[Menu[MENU_ID]];
Type = SubMenuDefine[0x00] & 0x0F;
if (Type == 0x05)
{
ControlValue = SubMenuDefine[0x01];
ControlWidth = SubMenuDefine[0x02];
}
else if (Type == 0x03)
{
ControlValue = SubMenuDefine[0x03];
ControlWidth = 1;
}
else
{
ControlValue = 0;
ControlWidth = 2;
}
if (ControlValue == 0 )
{
SetManualValue(MENU_ID, (unsigned int*)(&MENU_Result));
}
else if (ControlValue < 1 + 1)
{
if (ControlWidth == 1)
{
MENU_Control[ControlValue] = MENU_Result.Byte;
}
else if (ControlWidth == 2)
{
*(unsigned int *)(&MENU_Control[ControlValue]) = MENU_Result.Word;
}
}
}
void GUI_SaveControlStatus(unsigned char Flag1, unsigned char Flag2)
{
if ((MENU_Control[0] & 0xF0) == Flag1)
{
MENU_Control[0]++;
if ((MENU_Control[0] & 0x0F) == 0x03)
{
MENU_Control[0] = Flag2;
}
}
else
{
MENU_Control[0] = 0x00;
}
}
/*******************************************************************************
** 函数名称: GUI_WriteCaption **
** 功能描述: 显示菜单项的标题文字 **
** 输入参数: BYTE MenuItemID : 菜单名称ID **
** BYTE WriteSpace : 是否要填充后面的空白 **
** 输出参数: BYTE : Caption的长度 **
*******************************************************************************/
unsigned char GUI_WriteCaption(unsigned char MenuItemID,unsigned char Format)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -