数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 336|回复: 18

[C51] 老王家液晶屏点亮记1:FPC印字VM1521250CT6;主控IST3931;64X32

[复制链接]
发表于 昨天 11:55 | 显示全部楼层 |阅读模式
本帖最后由 zj97czb 于 2025-9-23 12:08 编辑

         老王家没资料的屏,是不是都是定制屏?买了好几款,觉得都不简单。比如这款:





主控评论区说的是IST3931,IIC通信。但手册对于IIC驱动就写得很简单。等到能点亮了,又发现清屏又是个奇怪活,把清屏搞好,写字符又是个难题。


这个是屏的引脚定义,排线在下,屏 行的 排列,想不明白它为什么要隔行排列。




字库工具就用它


写一条命令
  1. //写一个命令到ist3931中uchar address,uchar ch
  2. void Write_ist3931_com(uchar cd)
  3. {
  4. iic_start();
  5. IICSendByte(0x7e);
  6. check_ACK();
  7. IICSendByte(0x80);//写命令
  8. check_ACK();
  9. IICSendByte(cd);
  10. check_ACK();
  11. iic_stop();
  12. //delay_iic(2);//24c02片内写数据时间        (10毫秒)
  13. }
复制代码

写一个数据
  1. /写一个数据到ist3931中uchar address,uchar ch
  2. void Write_ist3931_dat(uchar dat)
  3. {
  4.         iic_start();
  5.         IICSendByte(0x7e);
  6.         check_ACK();
  7.         IICSendByte(0xc0);//写数据
  8.         check_ACK();
  9.         IICSendByte(dat);
  10.         check_ACK();
  11.         iic_stop();        
  12. }
复制代码



初始化
  1. //ist3931初始化
  2. void Write_ist3931_init1()
  3. {

  4. Write_ist3931_com(0x3a);// 开启时钟振荡P27(命令5)
  5. Write_ist3931_com(0x61);//行排列方式【正常(默认)】P39(命令28
  6. Write_ist3931_com(0x2f);//升压器开P27;P44(2)
  7. Write_ist3931_com(0xb1);//设置升压电压P32(17)
  8. Write_ist3931_com(200);//设置升压电压值(对比度)【0-255】P32(17)
  9. Write_ist3931_com(0x34);//LCD Blass(亮度)[0X30-0X37]P27(3)
  10. Write_ist3931_com(0x62);//行、列方向,全亮,正反显【当前全亮(0x60为正常)】P28(8)
  11. //delay_iic(20);//
  12. //Write_ist3931_two(0xa2,0x90);//占空比高3位,占空比低4位
  13. Write_ist3931_com(0x91);//占空比低4位P29(10)//用到多少行,占空比就写多少
  14. Write_ist3931_com(0xa2);//占空比高3位P29(10)//当前设为【 0x21(33)】
  15. //Write_ist3931_two(0x41,0x52);
  16. Write_ist3931_com(0x40);//低4位P28(7)起始行对应硬件的com,用于行没有达到64行的应用场景
  17. Write_ist3931_com(0x50);//高3位P28(7)起始行对应硬件的com,用于行没有达到64行的应用场景
  18. Write_ist3931_com(0x3d);//开显示
  19. //delay_iic(20);//
  20. }
复制代码
初始化中点亮了所有的点,所以要在清屏前或后,灭掉
  1. Write_ist3931_com(0x60);//行、列方向,全亮,正反显【当前正常(0x60为正常)】P28(8)
  2.         
复制代码


清屏
  1. void ist3931_disp_clear(void)   //清屏()
  2. {
  3.         uint i,j;
  4.         Write_ist3931_com(0x10);//设置行地址,高3位(Y)P27(1)
  5.                 Write_ist3931_com(0x00);//设置行地址,低4位(Y)P27(1)
  6.                 Write_ist3931_com(0xc0);//设置列地址,8个列为一个地址,故地址小于17,P30(11)
  7.                
  8.                 for(i=0;i<1170;i++)//18个(8位,一个字节)数组列,65行 P23
  9.                 {
  10.                         Write_ist3931_dat(0x00);//
  11.                 }
  12.         
  13. }        
复制代码


写一个16X8字符 //水平扫描,从左到右,从上到下,高位在前
  1. void ist3931_font16x8(uchar x,uchar y,uchar num)   //写一个16x16汉字
  2. {                                                                                                                                        //y取值8-0;
  3.         uchar xx,yy,i,j;
  4.         for(i=0;i<16;i++)
  5.         {
  6.                 if(i%2==0)
  7.                 {
  8.                         yy=24-i/2+y;
  9.                         Write_ist3931_com(0x10+yy/16);//设置行地址,高3位(Y)P27(1)
  10.                         Write_ist3931_com(0x00+yy%16);//设置行地址,低4位(Y)P27(1)
  11.                         Write_ist3931_com(0xc0+x);//设置列地址,8个列为一个地址,故地址小于17,P30(11)
  12.                         
  13.                         Write_ist3931_dat(font16x8[num][i]);//
  14.                         
  15.                 }
  16.                 else
  17.                 {
  18.                         yy=7-i/2+y;
  19.                         Write_ist3931_com(0x10+yy/16);//设置行地址,高3位(Y)P27(1)
  20.                         Write_ist3931_com(0x00+yy%16);//设置行地址,低4位(Y)P27(1)
  21.                         Write_ist3931_com(0xc0+x);//设置列地址,8个列为一个地址,故地址小于17,P30(11)
  22.                                 
  23.                         Write_ist3931_dat(font16x8[num][i]);//
  24.                         
  25.                 }
  26.         }
  27.         
  28. }
复制代码
写一个16x16汉字//水平扫描,从左到右,从上到下,高位在前

  1. void ist3931_hanzi16x16(uchar x,uchar y,uchar num)   //写一个16x16汉字
  2. {                                                                                                                                        //y取值8-0;
  3.         uchar xx,yy,i,j;
  4.         for(i=0;i<16;i++)
  5.         {
  6.                 if(i%2==0)
  7.                 {
  8.                         yy=24-i/2+y;
  9.                         Write_ist3931_com(0x10+yy/16);//设置行地址,高3位(Y)P27(1)
  10.                         Write_ist3931_com(0x00+yy%16);//设置行地址,低4位(Y)P27(1)
  11.                         Write_ist3931_com(0xc0+x);//设置列地址,8个列为一个地址,故地址小于17,P30(11)
  12.                         
  13.                
  14.                         Write_ist3931_dat(hanzi16x16[num][i*2]);//
  15.                         Write_ist3931_dat(hanzi16x16[num][i*2+1]);//
  16.                 }
  17.                 else
  18.                 {
  19.                         yy=7-i/2+y;
  20.                         Write_ist3931_com(0x10+yy/16);//设置行地址,高3位(Y)P27(1)
  21.                         Write_ist3931_com(0x00+yy%16);//设置行地址,低4位(Y)P27(1)
  22.                         Write_ist3931_com(0xc0+x);//设置列地址,8个列为一个地址,故地址小于17,P30(11)
  23.                         
  24.                         
  25.                         Write_ist3931_dat(hanzi16x16[num][i*2]);//
  26.                         Write_ist3931_dat(hanzi16x16[num][i*2+1]);//
  27.                 }
  28.         }
  29.         
  30. }        
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 4家元 +180 收起 理由
jf201006 + 30 謝謝分享
飞向狙沙 + 30 謝謝分享
nokia5320 + 30
家睦 + 90

查看全部打赏

发表于 昨天 12:07 | 显示全部楼层
楼主牛人!单片机学习我开始了无数次,又结束了无数次,每次都意外中断,坚持不下来。
回复 支持 反对

使用道具 举报

发表于 昨天 12:11 | 显示全部楼层
楼主有一个精华潜质帖。
回复 支持 反对

使用道具 举报

发表于 昨天 12:29 | 显示全部楼层
LZ的技术真不错,又为码友谋到福利了.
回复 支持 反对

使用道具 举报

发表于 昨天 12:50 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 昨天 13:12 | 显示全部楼层
二十多个屏,够用一辈子了
收藏备用
回复 支持 反对

使用道具 举报

发表于 昨天 14:36 | 显示全部楼层
这种屏实在是太难用了。买了,吃灰。
回复 支持 反对

使用道具 举报

发表于 昨天 14:42 | 显示全部楼层
软件支持不支持 台湾 BIG5 汉字系统?
回复 支持 反对

使用道具 举报

发表于 昨天 14:57 | 显示全部楼层
bh4qix 发表于 2025-9-23 14:42
软件支持不支持 台湾 BIG5 汉字系统?

难道是湾湾来的卧底
回复 支持 反对

使用道具 举报

发表于 昨天 14:58 | 显示全部楼层
bh4qix 发表于 2025-9-23 14:42
软件支持不支持 台湾 BIG5 汉字系统?

都要转换字库吧,把字符转成点阵...


二○二五年九月二十三日
回复 支持 反对

使用道具 举报

发表于 昨天 15:15 | 显示全部楼层
技术不 错,点亮屏幕可玩性大增
回复 支持 反对

使用道具 举报

发表于 昨天 15:27 | 显示全部楼层
邪恶海盗 发表于 2025-9-23 14:58
都要转换字库吧,把字符转成点阵...

一个是横排,一个是竖排,GB 汉字和 台湾 BIG5 汉字点阵 方向差 90 度。
回复 支持 反对

使用道具 举报

发表于 昨天 15:42 | 显示全部楼层
bh4qix 发表于 2025-9-23 15:27
一个是横排,一个是竖排,GB 汉字和 台湾 BIG5 汉字点阵 方向差 90 度。

还有这个说法???


二○二五年九月二十三日
回复 支持 反对

使用道具 举报

发表于 昨天 16:17 | 显示全部楼层
邪恶海盗 发表于 2025-9-23 15:42
还有这个说法???

是的,以前玩单板机 LCD 显示,就要用软件 从字库里提取 软件里需要的有限个汉字,
把那些汉字点阵信息保存在 程序里。提取汉字点阵软件,就要区分汉字编码。
回复 支持 反对

使用道具 举报

发表于 昨天 17:01 | 显示全部楼层
bh4qix 发表于 2025-9-23 16:17
是的,以前玩单板机 LCD 显示,就要用软件 从字库里提取 软件里需要的有限个汉字,
把那些汉字点阵信息保 ...

这就超出我的认知范围了,我只知道有看到过专门的点阵字库...


二○二五年九月二十三日
回复 支持 反对

使用道具 举报

发表于 昨天 19:38 | 显示全部楼层
好小的液晶
回复 支持 反对

使用道具 举报

发表于 昨天 20:44 | 显示全部楼层
邪恶海盗 发表于 2025-9-23 17:01
这就超出我的认知范围了,我只知道有看到过专门的点阵字库...

早期的 EPSON 打印机,有一款税务专用的,好像是 160K , 最后的字母,K 表示带汉字库,所有的汉字,都集成在一个 EPROM 芯片里,好像是 8001, 8M位, 1M 字节。
单片机系统,内存有限,但有时候有必要显示汉字。这时候的办法就是,用到哪些汉字,就把那些汉字的点阵读取出来,以 DB 形式硬编码到 汇编程序里。这样既达到了目的,又不受内存大小约束, 可以说是一种巧妙的方法。
回复 支持 反对

使用道具 举报

发表于 昨天 20:57 | 显示全部楼层
本帖最后由 邪恶海盗 于 2025-9-23 20:59 编辑
bh4qix 发表于 2025-9-23 20:44
早期的 EPSON 打印机,有一款税务专用的,好像是 160K , 最后的字母,K 表示带汉字库,所有的汉字,都集成 ...

原来带K的是带汉字库的啊,以前见过非常多630K、730K...


二○二五年九月二十三日
回复 支持 反对

使用道具 举报

发表于 昨天 21:14 | 显示全部楼层
邪恶海盗 发表于 2025-9-23 20:57
原来带K的是带汉字库的啊,以前见过非常多630K、730K...

1600K 是宽行, 630K 是窄行, 都是针式票据打印机,90 年代主流打印机。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-24 07:45 , Processed in 0.218400 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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