Nu-LB-NUC140 LCD uc1601 整理

1 资料:

http://www.ultrachip.com/cn/habout.php?id=125
http://www.gifar.com.tw/upfiles/201541103114__GFG128064A.pdf
https://wenku.baidu.com/view/41bac4323968011ca3009189.html

2 原理图

这里写图片描述

这里写图片描述

3 芯片手册管脚

这里写图片描述

这里写图片描述

这里写图片描述

4 UC1601 管脚设置

这里写图片描述

这里写图片描述
Write Only 只有 写 没有读
12–BM1 — GND
13–BM0 —- V33

14–D7 —- GND
15 –D6 — GND

01—模式就是 SPI(S9)

这里写图片描述

3-wire SPI w/ 9-bit token
(S9: conventional)

5 SPI接口设置

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

void init_SPI3(void)
{
    /* Configure as a master, clock idle low, 9-bit transaction, drive output on falling clock edge and latch input on rising edge. */
    /* Set IP clock divider. SPI clock rate = 1MHz */
    SPI_Open(SPI3, SPI_MASTER, SPI_MODE_0, 9, 1000000);
    SPI_DisableAutoSS(SPI3);    
}
5.1 如何确定SPI通信模式
5.2 如何确定SPI通信速度
5.3 如何测试确定SPI 通信成功

6 读写命令

这里写图片描述

忽略 W/R 和 Read Data Byte 和 Get Status
UC1601 和UC1601s 不同

void init_LCD(void)
{
    init_SPI3();
    lcdWriteCommand(0xEB); 
    lcdWriteCommand(0x81); 
    lcdWriteCommand(0xA0);  
    lcdWriteCommand(0xC0);  
    lcdWriteCommand(0xAF); // Set Display Enable 
}

0xAF = 1010 1111
对应上图中的16 行,Set Display Enable

0xC0 = 1100 0000
对应上图中的17 行 Set LCD Mapping Control

0xA0 = 1010 0000
对应上图中的13 行 Set Frame Rate

0x81 = 1000 0001

0xEB = 1110 1011
对应上图中的21 行 Set LCD Bias Ratio

7. UC1601 芯片的特点

这里写图片描述
支持65 x 132 的 点阵面板
支持 行顺序 或者 列顺序 呈现 显示RAM Buffer 中的内容。

这里写图片描述

这里写图片描述

8 . uc1601 寄存器以及行列定义

这里写图片描述

64行 128列

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

9 . 显示图像

CA — Column Address
RA — Row Address
WA— Wrap Around
PA — Page Address

MX—- Column Mirroring
MY —- Row Mirroring
SL —– Start Line
Fixed Line(FLT)

这里写图片描述

11 . 显示内容:

unsigned char Test8x16[]={
/*   */
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0 
};
序号01234567
011111111
111111111
211111111
311111111
400000000
500000000
600000000
700000000

上图是 0x0F的内容

显示效果如下:
这里写图片描述

显示的是 8x16 是横向 8 ,竖直方向上 16

12. 数据与映射

该LCD显示,PA 和CA,一起对应一个RAM 地址,往该地址写一个8位的字节数据,其显示方法为,竖直方向上,从上到下,bit0 到bit7.

13. 编写程序 注意

看到的例子程序是,每往LCD的RAM 中 写一次数据,都是先设置地址,然后再写数据。
SPI的时钟设置为1Mhz,写一次的时间为,
启动了4次SPI发送,每次是9个字节。
36 x 1us = 36 us。

设置屏上的8个点的时间为 36us,
写满整个屏的时间为,36us x 8 page x 128 = 36864us = 36.865ms
不大于50ms。
如果还想快一点,就把SPI的速度设置为2Mhz。但是不知道 LCD 是否支持这个速度。

lcdSetAddr((y/8),(LCD_Xmax+1-x-i)); 
lcdWriteData(Font5x7[ascii_code*5+i]);
// Set Address to LCD
void lcdSetAddr(uint8_t PageAddr, uint8_t ColumnAddr)
{
    // Set PA
  SPI_SET_SS0_LOW(SPI3);
  SPI_WRITE_TX0(SPI3, 0xB0 | PageAddr); // Write Data
  SPI_TRIGGER(SPI3);         // Trigger SPI data transfer           
  while(SPI_IS_BUSY(SPI3));  // Check SPI3 busy status
  SPI_SET_SS0_HIGH(SPI3);
  // Set CA MSB 
  SPI_SET_SS0_LOW(SPI3);
  SPI_WRITE_TX0(SPI3, 0x10 | (ColumnAddr>>4)&0xF); // Write Data
  SPI_TRIGGER(SPI3);         // Trigger SPI data transfer           
  while(SPI_IS_BUSY(SPI3));  // Check SPI3 busy status
  SPI_SET_SS0_HIGH(SPI3);   
  // Set CA LSB
  SPI_SET_SS0_LOW(SPI3);
  SPI_WRITE_TX0(SPI3, 0x00 | (ColumnAddr & 0xF)); // Write Data
  SPI_TRIGGER(SPI3);         // Trigger SPI data transfer           
  while(SPI_IS_BUSY(SPI3));  // Check SPI3 busy status
  SPI_SET_SS0_HIGH(SPI3);
}

// Wrtie data to LCD 
void lcdWriteData(uint8_t temp)
{
  SPI_SET_SS0_LOW(SPI3);
  SPI_WRITE_TX0(SPI3, 0x100 + temp); // Write Data
  SPI_TRIGGER(SPI3);         // Trigger SPI data transfer           
  while(SPI_IS_BUSY(SPI3));  // Check SPI3 busy status
  SPI_SET_SS0_HIGH(SPI3);
}

14. arduino IDE 控制 OLED

一定要用u8g2,u8g的第一版是不支持的。
接口选我上面的那个,我试了很多,这个兼容性最好。

15. SPI 时钟

这里写图片描述

这里写图片描述

假设为50ns ,1000 ns = 1us 就是 ,20个50ns。对应的是20Mhz。
可以将SPI的时钟设置为4MHZ。 这样刷屏的速度为 10ms以内。

fps是屏幕自身的刷新频率,对应于 电脑的液晶显示屏的刷新频率。

16 . 9位 数据格式。

最高为 0 表示 命令
最高为1 表示为数据,
接下来的8位为 真实的数据内容。

17 好例子

SW_Nu_LB_NUC140_v1.0\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\LCD_Bmp\
这个例子,动态的循环显示3个图片,切换速度比较快,没有拖影。效果不错。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值