atmega8 例程:FLASH版5110

今天试试把数组存到flash里,再读出来,就在原先5110的工程上进行修改,能看出来我改在哪里了吗?

uint8 Chinese_Font[][25]PROGMEM =   
{
/*-- 文字: 芜 --*/
/*-- 楷体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
{
0x00,0x48,0x48,0xDE,0xFE,0xF4,0xFE,0x76,0x24,0x04,0x04,0x00,0x00,0x02,0x03,0x03,
0x01,0x03,0x03,0x02,0x02,0x02,0x03,0x00
},

//省略其它定义


需要修改的两个文件:

/*********************************************************** 
** 名 称:void LCD_Write_Char(uint8 c)
** 功 能:写一个字符
** 入口参数:c 要写入的字符
** 出口参数:无
** 使用说明:无
*********************************************************
*/

void LCD_Write_Char(uint8 c)
{
uint8 line = 0;

c -= 32;

for (line = 0; line < 6; line++)
{
LCD_Write_Byte(pgm_read_byte(&ASSIC_Font[c][line]), 1);
}
}
/*********************************************************** 
** 名 称:void LCD_Write_Chinese_String(uint8 X, uint8 Y,uint8 ch_with,
** uint8 num,uint8 s[][],uint8 line,uint8 row)
** 功 能:向指定坐标写入中文句子
** 入口参数:X,Y 设置的坐标
** ch_with 汉字的宽度
** num 汉字的数量
** s 数组
** line 从第几行开始
** row 字与字间的宽度
** 出口参数:无
** 使用说明:无
*********************************************************
*/

void LCD_Write_Chinese_String(uint8 X, uint8 Y,uint8 ch_with,
uint8 num,uint8 s[][],uint8 line,uint8 row)
{
uint8 i = 0;
uint8 n = 0;
uint8 (*catch)[25] = s;

LCD_Set_XY(X,Y);
/*写字符串*/
for (i = 0;i < num;)
{
for (n = 0; n < ch_with * 2; n++)
{
if (n == ch_with)
{
if (i == 0)
{
LCD_Set_XY(X,Y + 1);
}
else
{
LCD_Set_XY((X + (ch_with + row) *i),Y + 1);
}
}
//从flash里读取数据
LCD_Write_Byte(pgm_read_byte(&catch[line + i][n] ),1);

}
i++;
LCD_Set_XY((X + (ch_with + row) * i),Y);
}
}




 

原文地址:https://www.cnblogs.com/pang123hui/p/2309871.html