当前位置:文档之家› EX_MSP430F5529的液晶显示中文函数

EX_MSP430F5529的液晶显示中文函数

/*******************************************************************************
*函数名称:Dogs102x6_Font8x12DrawXY(x, y, f, style)
*功能描述:Dogs102x6液晶上显示12x12字体
*参数说明:x-坐标(0 - 101),y-坐标(0 - 63) 注意:当y>52时,字体都显示在液晶的最下面一行
*参数说明:p_f-字符指针,style-(0-正常显示,1-反白显示);无返回参数.
******************************************************************************/
void Dogs102x6_Font12x12DrawXY(uint8_t x, uint8_t y, const uint8_t *p_f, uint8_t style)
{
uint8_t b, row;
uint8_t desired_char[36];

// make sure we won't be writing off the screen
if (x >= 102)
{
x = 101;
}
if (y >= 53)//字体是12x12,(63-52)+1=12
{
y = 52;
}

// Check if there is a remainder
row = y >> 3; // identical to: row = y / 8;

if (style == DOGS102x6_DRAW_NORMAL)
{
for (b = 0; b < 12; b++)
{
desired_char[b] =
(*(p_f + b) >> (y % 8)) | dogs102x6Memory[2 + (row * 102) + x + b];//
desired_char[b + 12] =
*(p_f + b) << (8 - y % 8) | (*(p_f + 12 + b) >> (y % 8)) | dogs102x6Memory[2 + ((row + 1) * 102) + x + b];
if((y % 8) > 4)
{
desired_char[b + 24] = *(p_f + 12 + b) << (8 - y % 8) | dogs102x6Memory[2 + ((row + 2) * 102) + x + b];
}
}
}
else
{
for (b = 0; b < 12; b++)
{
desired_char[b] =
(*(p_f + b) ^ 0xFF) >> (y % 8) | dogs102x6Memory[2 + (row * 102) + x + b];
desired_char[b + 12] =
(*(p_f + b) ^ 0xFF) << (8 - y % 8) | (*(p_f + 12 + b) ^ 0xF0) >> (y % 8) |dogs102x6Memory[2 + ((row + 1) * 102) + x + b];
if((y & 0x07) > 4)
{
desired_char[b + 24] =
((*(p_f + 12 + b) ^ 0xF0) << (8 - y % 8)) | dogs102x6Memory[2 + ((row + 2) * 102) + x + b];
}
}
}

Dogs102x6_setAddress(row, x);
Dogs102x6_writeData(desired_char, 12);
Dogs102x6_setAddress(row + 1, x);
Dogs102x6_writeData(desired_char + 12, 12);
if((y % 8) > 4)
{
Dogs102x6_setAddress(row + 2, x);
Dogs102x6_writeData(desired_char + 24, 12);
}
}
/*******************************************************************************
*函数名称:Dogs102x6_chinesecharDrawXY(x, y, cchar, style)
*功能描述:Dogs102x6液晶上显示汉字体
*参数说明:x-坐标(0 - 101),y-坐标(0 - 63)
*参数说明:cchar-汉字符指针,style-(0-正常显示,1-反白显示);无返回参数.
******************************************************************************/
void Dogs102x6_chinesecharDrawXY(uint8_t x, uint8_t y, char *cchar, uint8_t style)
{
uint8_t k;

for (k = 0; k < GB_12_num; k ++) //GB_12_num - (sizeof(GB_12) / 26)
{
if ((GB_12[k].Index[0] == *cchar) && (GB_12[k].Index[1] == *(cchar + 1)))
{
Dogs102x6_Font12x12DrawXY(x,y,GB_12[k].Msk,style);
}
}
}
/*******************************************************************************
*

函数名称:Dogs102x6_chinesefontsDrawXY(x, y, word, style)
*功能描述:Dogs102x6液晶上连续显示汉字体(每行少于9个)
*参数说明:x-坐标(0 - 101),y-坐标(0 - 63)
*参数说明:word-汉字符指针,style-(0-正常显示,1-反白显示);无返回参数.
******************************************************************************/
void Dogs102x6_chinesefontsDrawXY(uint8_t x, uint8_t y, char *word, uint8_t style)
{
while (*word)
{
// Draw a character
Dogs102x6_chinesecharDrawXY(x, y, word, style);

// Update location
x += 12;

// Text wrapping
if (x >= 102)
{
x = 0;
if (y + 12 < 64)
y += 12;
else
y = 0;
}

word += 2;
}
}

相关主题
文本预览
相关文档 最新文档