博士
最后登录1970-1-1
在线时间 小时
注册时间2014-10-31
|
发表于 2015-3-7 08:34:41
|
显示全部楼层
本帖最后由 11kxmx 于 2015-3-7 09:04 编辑
例程中字符显示程序并不适合24*12的字模,不管你是一维数组或二维数组,字模代码存放的顺序是一样的,就是字节数不一样,24*12字模占48字节,水平像素非8的整数倍,还需补齐,字模扫描顺序和生成格式都可以自行设置,自己制字模,自己编程序,更容易弄清原理 多试, 无非就是会左右颠倒,上不颠倒 或两个半边字 最坏的是根本看不出字形 根据现象基本能够判断问题出在哪里
我制作的32*16字模格式如下,不可能刚好是这个样子,经过简单编辑
const unsigned char asc2_3216[95][64]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/* ! */
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,
0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x00,0x01,0x00,0x01,0x00,
0xFF,0xFF,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,
0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/* " */
......
显示程序如下:
//* 显示32*16的字符*/ 逐行扫描 可用逐列扫描的数据代替上面表格看显示的是什么样子
void LCD_DispChar3216(uint16_t x, uint16_t y, uint8_t ascii, uint16_t color)
{
uint16_t page, column,temp1,temp2, i;
i = ascii - ' ';
LCD_OpenWindow(x, y, 16, 32); //16 *32
LCD_ILI9341_CMD(0X2C);
for( page=0; page < 64; page+=2 )//每个字占64字节,一行需2个字节
{
temp1 = asc2_3216;
temp2 = asc2_3216[page+1];//可尝试将page+1变到temp1看是会么现象
for( column=0; column < 8; column++ )
{
if( temp1 & 0x80 )//高位在前,若低位在前应该temp1 & 0x01
{
LCD_WR_Data( color );
}
else
{
LCD_WR_Data( BACKGROUND );
}
temp1<<= 1; //高位在前,若低位在前应该右移
}/* 一行写完 */
for( column=0; column < 8; column++ )
{
if( temp2 & 0x80 )
{
LCD_WR_Data( color );
}
else
{
LCD_WR_Data( BACKGROUND );
}
temp2<<= 1;
}/* 一行写完 */
}/* 全部写完 */
}
|
|