将32字节汉字缓冲区数据写入外部函数指定的扇区
/************拷贝从第二个汉字开始N个字到第八扇区***********/
void CopyTwoFontEeprom(uint iapeeprom_add)
{
uchar fonti,fontj,fontdata; //
for(fonti=0;fonti<total;) //15个字
{
for(fontj=0;fontj<32;) //一个字32字节
{
fontdata=IapReadByte(iapeeprom_add+fonti*32+fontj);//从目标扇区读出代码
IapProgramByte(IAP_ADDE+fonti*32+fontj,fontdata); //将代码写入第八缓冲区
fontj++; //32位文字偏移量加1.
}
fonti++; //15个文字偏移量加1.
dis_ValCopy(fonti); //显示拷贝数
Delay_50ms(2);
}
}
/************粘贴第二个开始到总数结束汉字到目标扇区***********/
void PasteTwoFontEeprom(uint iapeeprom_add)
{
uchar fonti,fontj,fontdata; //文字个数变量文字字节变量字符数据
for(fonti=0;fonti<total;) //文字个数变量最大为15个
{
for(fontj=0;fontj<32;) //每个字32个字符
{
fontdata=IapReadByte(IAP_ADDE+fonti*32+fontj); //从第八缓冲区读出代码基址+一个文字变量+字符变量
IapProgramByte(iapeeprom_add+fonti*32+fontj,fontdata);//将代码写入目标扇区
fontj++; //32位文字偏移量加1.
}
fonti++; //15个文字偏移量加1.
}
}
Avalue=0XD0; //“许”的代码
Bvalue=0XED;
edit(18,Avalue,Bvalue); //第18个字位置重新编辑字节0XD0;0XED;“许”的代码
/***编辑文字按数据大小分配扇区,16个字为一个扇区**************/
/***函数名称: edit 功能: 计算编辑修改文字的位置******/
/***输入函数: font_address 功能: 编辑修改文字的地址 ***/
/***输出函数: IAP_ADDX(X=A......H) 功能:扇区地址 *******/
/***输出函数: editadd 功能: 扇区下第X个字 *******/
/***输入函数: A_value,B_value编辑修改目标文字的高低字节******/
void edit(uchar font_address,Hvalue,Lvalue)//
{
uchar editadd; //编辑EEPROM地址
if(font_address>0&&font_address<17)
{
editadd=font_address-1; //编辑文字位置为前进后退值减1为0-16
editfont(IAP_ADDA,editadd,Hvalue,Lvalue); //在IAP_ADDA 位置编辑第一扇区
}
if(font_address>16&&font_address<33)
{
editadd=font_address-17; //编辑文字位置为前进后退值减17为0-16
editfont(IAP_ADDB,editadd,Hvalue,Lvalue); //在IAP_ADDB 位置编辑第二扇区
}
if(font_address>32&&font_address<49)
{
editadd=font_address-33; //编辑文字位置为前进后退值减33为0-16
editfont(IAP_ADDC,editadd,Hvalue,Lvalue); //在IAP_ADDC 位置编辑第三扇区
}
if(font_address>48&&font_address<65)
{
editadd=font_address-49; //编辑文字位置为前进后退值减49为0-16
editfont(IAP_ADDD,editadd,Hvalue,Lvalue); //在IAP_ADDD 位置编辑第四扇区
}
}
/************拷贝局部汉字到第五扇区***********/
void CopyEepromsome(uchar Edit_add,uint iapeeprom_add) //拷贝除当前输入文字以前的文字。
{
uchar fonti,fontj,fontdata; //
for(fonti=0;fonti<Edit_add;)
{
for(fontj=0;fontj<32;)
{
fontdata=IapReadByte(iapeeprom_add+fonti*32+fontj);//从目标扇区加文字加字节偏移量读出代码
IapProgramByte(IAP_ADDE+fonti*32+fontj,fontdata); //将代码写入第五缓冲区
fontj++; //32位文字偏移量加1.
}
fonti++; //15个文字偏移量加1.
}
for(fonti=0;fonti<16-(Edit_add+1);) //拷贝除当前输入文字以后的文字。
{
for(fontj=0;fontj<32;)
{
fontdata=IapReadByte(iapeeprom_add+(fonti+Edit_add+1)*32+fontj);//从目标扇区读出代码
IapProgramByte(IAP_ADDE+(fonti+Edit_add+1)*32+fontj,fontdata); //将代码写入第五缓冲区
fontj++; //32位文字偏移量加1.
}
fonti++; //15个文字偏移量加1.
}
}
editfont(IAP_ADDB,editadd,Hvalue,Lvalue); //在IAP_ADDB 位置编辑第二扇区 扇区下第editadd个字 高低字节
else if(edit_add>0&&edit_add<15) //如果编辑的文字在第二到第十五之间。
{
for(copyadd=0;copyadd<edit_add;) //拷贝0-editadd(当前)个文字
{
IapEraseSector(IAP_ADDE); //删除第五扇区
CopyEepromsome(edit_add,iap_eepromadd); //将目标 扇区局部内容拷贝到第五扇区。
IapEraseSector(iap_eepromadd); //删除目标扇区
PasteEepromsome(edit_add,iap_eepromadd); //将第五扇区局部内容拷贝到目标扇区并写入当前文字和后面余下的共计16个文字。
copyadd++;
}
}