数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1564|回复: 27

[C51] 老王家液晶屏点亮记2:FPC印字YF1512832CS6;主控UC1701e;128X32

[复制链接]
发表于 2025-9-24 15:31:23 | 显示全部楼层 |阅读模式
本帖最后由 zj97czb 于 2025-9-24 15:41 编辑

这个屏,能玩转的不多,评论区说主控是UC1701e。这个 UC1701e就是一个定制货,和UC1701C、UC1701x 的指令不一样,也就和常用的ST7567不一样。


常用芯片初始化中,写的都是命令,但UC1701e,命令后面带的是数据。还好是通用的SPI通信




初始化,注意有两条是数据
  1. void lcd12864_uc1701e_init(void)//
  2. {
  3.         write_cmd(0xe2);//软复位
  4.         delay_nms(15);
  5.         write_cmd(0x24);//温度补偿P11
  6.         write_cmd(0x2d);// 升压控制P12
  7.         write_cmd(0xa6);// LCD屏设置(行、列方向和时钟频率)P12
  8.         write_cmd(0xea);//regulation ratio=5.0屏工作电压(升压电压)P13
  9.         
  10.         write_cmd(0x81);//设置对比度P12
  11.         write_dat(70);//对比度0-127
  12.         
  13.         write_cmd(0xc9);//开关机P12
  14.         write_dat(0xaf);//开机
  15. }
复制代码


由于屏只接了奇数行,我用的是硬件SPI,所以要 驱动它就要按64行来写,字库可以与ST7657通用,上贴中的取模软件的取模方式为://垂直扫描,从左到右,从上到下,低位在前

  1. unsigned char xdata uc1701e_ziti32x16[64];
  2. unsigned char xdata uc1701e_ziti32x08[32];
复制代码
将16个字模数据转换成32个
  1. void uc1701e_16to32(unsigned char weihao)//将16个数据转换成32个
  2. {
  3.         unsigned char        i,j,temp;
  4.         unsigned int temp1;
  5.         for(i=0;i<16;i++)
  6.         {
  7.                 temp=uc1701e_ziti1608[weihao][i];
  8.                 for(j=0;j<8;j++)
  9.                 {
  10.                         temp1>>=2;        //
  11.                          if(temp&0x01)
  12.                                 {
  13.                                         temp1+=0x4000;//
  14.                                 }
  15.                                 temp>>=1;
  16.                 }
  17.                 if(i<8)
  18.                 {
  19.                         uc1701e_ziti32x08[i]=temp1%256;
  20.                         uc1701e_ziti32x08[i+8]=temp1/256;
  21.                 }
  22.                 else
  23.                 {
  24.                         uc1701e_ziti32x08[i+8]=temp1%256;
  25.                         uc1701e_ziti32x08[i+16]=temp1/256;
  26.                 }
  27.                
  28.          }
  29. }        

复制代码


写一个字符
  1. void        disp_uc1701e_hanzi16x8(unsigned char lie,unsigned char hang,unsigned char weihao)   //写字符
  2. {
  3.         unsigned char        i,j;
  4.         
  5.         uc1701e_16to32(weihao);
  6.         for(i=0;i<4;i++)
  7.         {
  8.           write_cmd(0xb0+hang+i);//行地址
  9.           write_cmd(0x04);//设置列地址
  10.                 write_dat(lie);//列地址数据
  11.                 write_cmd(0x01);//写数据
  12.                 for(j=0;j<8;j++)
  13.          {
  14.                  write_dat(uc1701e_ziti32x08[i*8+j]);
  15.           }
  16.         }
  17. }
复制代码


将32个字模数据转换成64个
  1. void uc1701e_32to64(unsigned char weihao)//将32个数据转换成64个
  2. {
  3.         unsigned char        i,j,temp;
  4.         unsigned int temp1;
  5.         for(i=0;i<32;i++)
  6.         {
  7.                 temp=uc1701e_ziti1616[weihao][i];
  8.                 for(j=0;j<8;j++)
  9.                 {
  10.                         temp1>>=2;        //
  11.                          if(temp&0x01)
  12.                                 {
  13.                                         temp1+=0x4000;//
  14.                                 }
  15.                                 temp>>=1;
  16.                 }
  17.                 if(i<16)
  18.                 {
  19.                         uc1701e_ziti32x16[i]=temp1%256;
  20.                         uc1701e_ziti32x16[i+16]=temp1/256;
  21.                 }
  22.                 else
  23.                 {
  24.                         uc1701e_ziti32x16[i+16]=temp1%256;
  25.                         uc1701e_ziti32x16[i+32]=temp1/256;
  26.                 }
  27.                
  28.          }
  29. }        
复制代码
写一个16X16i汉字
  1. void        disp_uc1701e_hanzi16x16(unsigned char lie,unsigned char hang,unsigned char weihao)   //写汉字
  2. {
  3.         unsigned char        i,j;
  4.         
  5.         uc1701e_32to64(weihao);
  6.         for(i=0;i<4;i++)
  7.         {
  8.           write_cmd(0xb0+hang+i);//行地址
  9.           write_cmd(0x04);//设置列地址
  10.                 write_dat(lie);//列地址数据
  11.                 write_cmd(0x01);//写数据
  12.                 for(j=0;j<16;j++)
  13.          {
  14.                  write_dat(uc1701e_ziti32x16[i*16+j]);
  15.           }
  16.         }
  17. }
复制代码


本帖子中包含更多资源

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

x

打赏

参与人数 5家元 +240 收起 理由
慕名而来 + 30 原創內容
海上生明月丶 + 30 謝謝分享
jf201006 + 30 謝謝分享
飞向狙沙 + 30 謝謝分享
家睦 + 120

查看全部打赏

发表于 2025-9-24 16:21:54 | 显示全部楼层
牛,我现在都不碰这些异形屏了,费劲点亮了真设计东西时还得专门画封装,搞完了也不能批量,完了别人想一块玩也不行,各种操蛋。有便宜用得到的通用屏就撸点,没有就直接买全新,实际上DIY用一两个单价五块跟单价两块没区别
回复 支持 1 反对 0

使用道具 举报

发表于 2025-9-24 18:18:19 | 显示全部楼层
初始化,注意有两条是数据----厉害厉害,我就纳闷LZ是怎么研究出来的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-24 18:28:07 | 显示全部楼层
21cnsound 发表于 2025-9-24 18:18
初始化,注意有两条是数据----厉害厉害,我就纳闷LZ是怎么研究出来的? ...

看手册,手册用必应一搜就有
回复 支持 反对

使用道具 举报

发表于 2025-9-24 23:33:19 | 显示全部楼层
“常用芯片初始化中,写的都是命令,但UC1701e,命令后面带的是数据。” --- 不知道怎么来的结论,几乎都有命令带数据的,不然设置偏移这些怎么搞?
回复 支持 反对

使用道具 举报

发表于 2025-9-25 07:39:18 | 显示全部楼层
老王家有些货确实还不错,玩玩还行
回复 支持 反对

使用道具 举报

发表于 2025-9-25 07:56:53 | 显示全部楼层
LZ威武啊,估计这个屏要涨价了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-25 09:33:44 | 显示全部楼层
kpj001 发表于 2025-9-24 23:33
“常用芯片初始化中,写的都是命令,但UC1701e,命令后面带的是数据。” --- 不知道怎么来的结论,几乎都有 ...

别的芯片是命令本身就带数据,就算不带,下一条也会是以命令的方式输入 。但UC1701e有几个命令是不带数据的,要另起说这个是命令的数据,不是命令的形式
回复 支持 反对

使用道具 举报

发表于 2025-9-25 10:13:26 | 显示全部楼层
厉害,最怕是玩没有资料的货
回复 支持 反对

使用道具 举报

发表于 2025-9-25 11:39:34 | 显示全部楼层
为什么原理图的线上标注的是SCK SDA ?
一般I2C才这么标SDA因为是双向的.   SPI都是标MOSI MISO
回复 支持 反对

使用道具 举报

发表于 2025-9-25 11:48:20 | 显示全部楼层
能把异形屏玩转的都是高手!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-25 12:10:41 | 显示全部楼层
firn 发表于 2025-9-25 11:39
为什么原理图的线上标注的是SCK SDA ?
一般I2C才这么标SDA因为是双向的.   SPI都是标MOSI MISO ...

手册里是这样标,总不能打开手册说没有这个引脚吧,芯片MOSI和MISO是同一个引脚,不像单片机是两个引脚
回复 支持 反对

使用道具 举报

发表于 2025-9-25 13:37:01 来自手机浏览器 | 显示全部楼层
可以屏点亮了
回复 支持 反对

使用道具 举报

发表于 2025-9-25 15:17:16 | 显示全部楼层
厉害。能玩转液晶屏的都是高手。
回复 支持 反对

使用道具 举报

发表于 2025-9-25 15:49:52 | 显示全部楼层
赞一个,厉害!
回复 支持 反对

使用道具 举报

发表于 2025-9-25 17:12:29 | 显示全部楼层
本帖最后由 kpj001 于 2025-9-25 17:14 编辑
zj97czb 发表于 2025-9-25 09:33
别的芯片是命令本身就带数据,就算不带,下一条也会是以命令的方式输入 。但UC1701e有几个命令是不带数据 ...

本来觉得你就是胡说,不过想了下既然回帖还坚持这么说,可能是你用过的屏让你有什么误解。特此找来 LCD1602 的代码 和 ST7735 的代码 如下:
结论就是 简单的屏的确只用命令就够了,复杂一点的需要命令+数据。但不是 “常用芯片初始化中,写的都是命令”,这只是你只在黑白屏里打转产生的错觉。

// LCD1602 初始化函数
void lcd_init() {
    delay_ms(15);    // 等待 LCD 上电稳定
   
    // 8位模式初始化序列
    lcd_write_cmd(0x38); // 8位数据接口,2行显示,5x8点阵
    delay_ms(5);
    lcd_write_cmd(0x38);
    delay_ms(5);
    lcd_write_cmd(0x38);
    delay_ms(5);
   
    lcd_write_cmd(0x38); // 功能设置:8位模式
    lcd_write_cmd(0x08); // 显示关闭
    lcd_write_cmd(0x01); // 清屏
    lcd_write_cmd(0x06); // 入口模式:光标右移,显示不移动
    lcd_write_cmd(0x0C); // 显示开,光标关,闪烁关
}


void ST7735_Init(void){
    IO_Init();   
    GPIOB->BRR  = 0x4000;                                                                                         // RES 0
                Delay_ms(10);
    GPIOB->BSRR = 0x4000;                                                                                         // RES 1
                Delay_ms(10);
    ST7735_SendCommand(0x11);                                                                         //Sleep out
    Delay_ms(10);                                                                               //Delay 120ms
    //------------------------------------ST7735 Frame Rate-----------------------------------------//
    ST7735_SendCommand(0xB1);
    ST7735_SendData(0x05);
    ST7735_SendData(0x3C);
    ST7735_SendData(0x3C);
    ST7735_SendCommand(0xB2);
    ST7735_SendData(0x05);
    ST7735_SendData(0x3C);
    ST7735_SendData(0x3C);
    ST7735_SendCommand(0xB3);
    ST7735_SendData(0x05);
    ST7735_SendData(0x3C);
    ST7735_SendData(0x3C);
    ST7735_SendData(0x05);
    ST7735_SendData(0x3C);
    ST7735_SendData(0x3C);
    //------------------------------------End ST7735 Frame Rate---------------------------------//
    ST7735_SendCommand(0xB4); //Dot inversion
    ST7735_SendData(0x03);
    //------------------------------------ST7735 Power Sequence---------------------------------//
    ST7735_SendCommand(0xC0);
    ST7735_SendData(0x28);
    ST7735_SendData(0x08);
    ST7735_SendData(0x04);
    ST7735_SendCommand(0xC1);
    ST7735_SendData(0XC0);
    ST7735_SendCommand(0xC2);
    ST7735_SendData(0x0D);
    ST7735_SendData(0x00);
    ST7735_SendCommand(0xC3);
    ST7735_SendData(0x8D);
    ST7735_SendData(0x2A);
    ST7735_SendCommand(0xC4);
    ST7735_SendData(0x8D);
    ST7735_SendData(0xEE);
    //---------------------------------End ST7735 Power Sequence-------------------------------------//
    ST7735_SendCommand(0xC5); //VCOM
    ST7735_SendData(0x1A);
    ST7735_SendCommand(0x36); //MX, MY, RGB mode
    ST7735_SendData(0xC0);
    //------------------------------------ST7735 Gamma Sequence---------------------------------//
    ST7735_SendCommand(0xE0);
    ST7735_SendData(0x04);
    ST7735_SendData(0x22);
    ST7735_SendData(0x07);
    ST7735_SendData(0x0A);
    ST7735_SendData(0x2E);
    ST7735_SendData(0x30);
    ST7735_SendData(0x25);
    ST7735_SendData(0x2A);
    ST7735_SendData(0x28);
    ST7735_SendData(0x26);
    ST7735_SendData(0x2E);
    ST7735_SendData(0x3A);
    ST7735_SendData(0x00);
    ST7735_SendData(0x01);
    ST7735_SendData(0x03);
    ST7735_SendData(0x13);
    ST7735_SendCommand(0xE1);
    ST7735_SendData(0x04);
    ST7735_SendData(0x16);
    ST7735_SendData(0x06);
    ST7735_SendData(0x0D);
    ST7735_SendData(0x2D);
    ST7735_SendData(0x26);
    ST7735_SendData(0x23);
    ST7735_SendData(0x27);
    ST7735_SendData(0x27);
    ST7735_SendData(0x25);
    ST7735_SendData(0x2D);
    ST7735_SendData(0x3B);
    ST7735_SendData(0x00);
    ST7735_SendData(0x01);
    ST7735_SendData(0x04);
    ST7735_SendData(0x13);
    //------------------------------------End ST7735 Gamma Sequence-----------------------------//
    ST7735_SendCommand(0x3A); //65k mode
    ST7735_SendData(0x05);
    ST7735_SendCommand(0x29); //Display on
}   


回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-25 18:50:44 | 显示全部楼层
kpj001 发表于 2025-9-25 17:12
本来觉得你就是胡说,不过想了下既然回帖还坚持这么说,可能是你用过的屏让你有什么误解。特此找来 LCD160 ...

你应该上点强度,用手机用的高分屏打比方,一年好几亿的用量,哪个才是常用的
回复 支持 反对

使用道具 举报

发表于 2025-9-25 21:41:03 | 显示全部楼层
本帖最后由 kpj001 于 2025-9-25 21:50 编辑
zj97czb 发表于 2025-9-25 18:50
你应该上点强度,用手机用的高分屏打比方,一年好几亿的用量,哪个才是常用的 ...

问题很清楚了,你的常见就是你的常见,代表不了他人的常见,更代表不了手机屏幕,那很多个亿跟你没什么关系,毕竟你在“买”垃圾,不在行业内。

再说,手机屏的初始化就是纯命令?几个亿的用量都是我这边的例子好吧。

至于“上强度”这个词,根据你捡垃圾的水准,还是用在自己身上比较好。(呼叫管理员,真不准备骂人的,以防万一后续难看这里备注下可能有些垃圾佬口出垃圾)


算了,只要回复不是太难看都不理了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-26 10:09:08 | 显示全部楼层
kpj001 发表于 2025-9-25 21:41
问题很清楚了,你的常见就是你的常见,代表不了他人的常见,更代表不了手机屏幕,那很多个亿跟你没什么关 ...

我捡垃圾的,能弄出两篇精华帖,你有例子又怎样,免费发表出来了吗?拿到精华贴了吗?
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-11-14 06:34 , Processed in 0.140401 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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