找回密码
 立即注册
查看: 135|回复: 2

字模数据导出到EEPROM,节省程序空间

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:602
  • 最近打卡:2026-07-04 12:49:10

8

主题

28

回帖

1847

积分

金牌会员

积分
1847
发表于 2026-5-30 20:44:53 | 显示全部楼层 |阅读模式
最近让豆包帮我搞了个Python程序,可以将各个字模数据导出为BIN和HEX文件,然后再上传到STC ISP软件的EEPROM里。

这样可以让程序通过IAP读写函数调用字模数据,这样可以节省几K的程序空间。
运行方法:
dos窗口走到fonts.py文件路径后运行
python .\fonts.py

运行后会提示各字模数组的起始地址和长度。
运行结果.jpg
ISP软件里点击“打开EEPROM文件”按钮,选择font_all.bin或font_all.hex均可。
打开EEPROM文件.jpg
我程序里的IAP读函数(示例):

uint8 IAP_ReadByte(uint16 addr) {
  uint8 dat;
  IAP_CONTR = 0x80;  // 使能IAP
  IAP_TPS = 12;      // 设置等待参数(12MHz)
  IAP_CMD = 1;       // 设置IAP读命令
  IAP_ADDRH = addr >> 8;
  IAP_ADDRL = addr & 0xFF;
  IAP_TRIG = 0x5A;
  IAP_TRIG = 0xA5;
  _nop_();
  dat = IAP_DATA;
  IAP_Idle();
  return dat;
}



// 显示标准8x16字符
void OLED_ShowChar(uint8 x, uint8 y, uint8 chr) {
  unsigned char c = 0, i = 0;
    unsigned long base_addr;  // 32位地址,和你大数字格式保持一致
  c = chr - ' ';
  base_addr = 0x02C0;  

  OLED_Set_Pos(x, y);
  for (i = 0; i < 8; i++)
    OLED_WR_Byte( IAP_ReadByte(base_addr + (uint16)c * 16 + i), OLED_DATA );
  OLED_Set_Pos(x, y + 1);
  for (i = 0; i < 8; i++)
      OLED_WR_Byte( IAP_ReadByte(base_addr + (uint16)c * 16 + i + 8), OLED_DATA );
}


在显示某字符函数里先定义
base_addr = 0x02C0;//字模起始地址
然后OLED_WR_Byte( IAP_ReadByte(base_addr + (uint16)c * 16 + i), OLED_DATA );

附上PY程序,里面的字模数组替换为自己需要的就行,注意字模数组要放在程序的两个""" 字符串中间:
"""
字模数组
"""
fonts.py (15.5 KB, 下载次数: 4)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:299
  • 最近打卡:2026-07-04 00:01:55
已绑定手机

66

主题

808

回帖

3037

积分

论坛元老

DIY玩家

积分
3037
发表于 2026-5-30 22:40:51 | 显示全部楼层
常用eeprom存储参数
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:602
  • 最近打卡:2026-07-04 12:49:10

8

主题

28

回帖

1847

积分

金牌会员

积分
1847
发表于 2026-6-1 19:18:21 | 显示全部楼层
又让豆包改进了一下,将程序与数组分开了,数组名作为命令行参数传递给程序。
fonts.py (4.95 KB, 下载次数: 7)
使用举例:
python fonts.py oledfont.h 0x0100
程序后面跟字模名称,可以再跟偏移量(可选):
运行结果2.jpg
输出文件:
  • oledfont.hex (EEPROM烧录文件)
  • oledfont.map (地址对照表)


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 07:47 , Processed in 0.067572 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表