【随手笔记】LCD屏幕之ST7567G+UC1701E

LCD屏幕使用记录

1-屏幕简介

因项目使用到屏幕,做以简单记录备份
屏幕使用128*64点阵屏
型号为ST7567G+UC1701E
使用SPI驱动

屏幕点阵显示原理简述:

  1. 屏幕为128*64像素点
    每位(bit)控制一个像素点

  2. 使用LCD_RAM[8][128]数组缓存
    X轴—128对应0-127 横坐标
    Y轴—8 对应0-7页 纵坐标

  3. 函数封装:
    X轴以像素点为单位写入
    Y轴以页为单位写入

  4. 取模大小为16 16
    字符为8
    16
    汉字为16 * 16

  5. 1个像素点使用1bit控制
    一个字符为8 16,占用16个字节,
    一个汉字为16
    16,占用32个字节

  6. 字符示例:
    在这里插入图片描述

数据写入示例

2-ST7567G屏幕

  1. 支持SPI和IIC驱动
  2. 屏幕IO接口
    RSTB+CSB+A0+RWR

  3. 读写屏幕状态和数据
  4. 在这里插入图片描述
  5. 屏幕写入数据示例:

在这里插入图片描述

3-UC1701屏幕

  1. 读写屏幕数据在这里插入图片描述

4-代码示例

/*
***传输LCD数据-SPI
***以页为单位
***写入数据页, 列, 数据, 长度
***页0-7
*/

void LCD_WriteDataString(uint8_t page,uint8_t colume,uint8_t* Data,uint8_t DataLen)
{
	 //屏幕区别命令
	 if( LCD.DrvVer == UC1701)
	 {
	 //传输命令 
	 LCD_WriteCmd(0xB0 + page); //设置页地址(0~7)
	 LCD_WriteCmd(0x04);        //列地址 高字节
	 LCD_WriteData(0x00);       //列地址 低字节 
	 LCD_WriteCmd(0x01);        //写入数据
	 }
	 else if( LCD.DrvVer == LCD_T_ST7567 )
	 {
	 //传输命令
	 LCD_WriteCmd(0xB0 + page);//设置页地址(0~7)
	 LCD_WriteCmd(0x10 );   //设置列地址 高字节 
	 LCD_WriteCmd(0x00 );   //设置列地址 低字节
	 } 
	 else
	 {
	 	return ;
	 }
	 //传输数据
	 LCD_DRV_CSB_LOW();
	 LCD_DRV_A0_HIGH();
	 spi_master_tx_rx((void*)lcd_spi_base_address,DataLen,Data, NULL);
	 LCD_DRV_CSB_HIGH(); 
}

4-备忘点

1.自动识别两款屏幕的原理
上电时根据两款屏幕不同的读写指令
可以自动识别出是哪一款屏幕
UC1701-CMD=0X02
ST7567-CMD=0XFD
相当于屏幕有唯一的读写指令
2. 支持热拔插的原理
周期读写屏幕的数据,如屏幕读取异常时,
复位引脚初始化屏幕,刷新缓存

参考1
//屏幕区别命令
if(lcd_param.l_p_device_type == LCD_T_UC1701)
{
//传输命令
LCD_WriteCmd(0xB0 + page); //设置页地址(0~7)
LCD_WriteCmd(0x04); //列地址 高字节
LCD_WriteData(0x00); //列地址 低字节
LCD_WriteCmd(0x01); //写入数据
}
else if(lcd_param.l_p_device_type == LCD_T_ST7567)
{
//传输命令
LCD_WriteCmd(0xB0 + page); //设置页地址(0~7)
LCD_WriteCmd(0x10 ); //设置列地址 高字节
LCD_WriteCmd(0x00 ); //设置列地址 低字节
}

参考2
59 指定字符起始的 页码值 page 和列 column
60 */
61 void Lcd_address(unsigned char page , unsigned char column )
62 {
63 column = column - 1; //从数字1 开始计数
64 page = page - 1; //从数字1 开始计数
65 Transform_Cmd(0xb0 + page); //设置页开始的地址
66 Transform_Cmd( ((column>>4)&0x0f) + 0x10 ); //设置行开始的地址 高四位
67 Transform_Cmd(column&0x0f); //低四位
68 }

参考3
void Set_Pos(unsigned char x, unsigned char y) {
Write_IIC_Command(0xb0 + y); // 设置目标显示位置页起始地址 取值范围 0xb0 ~ 0xb7 一共8页
Write_IIC_Command(((x & 0xf0) >> 4) | 0x10); // 设置列起始地址高位 只有低4位可用 最后与上 0x10
Write_IIC_Command(x & 0x0f); // 设置列起始地址低位 只有低4位可用

参考4
//写地址
if(lcd_param.l_p_device_type == LCD_T_UC1701)
{
LCD_WriteCmd(0xB0 + y); //设置页地址(0~7)
LCD_WriteCmd(0x04); //列地址 高字节
LCD_WriteData(0x00 + x); //列地址 低字节
LCD_WriteCmd(0x01); //写入数据
}
else if(lcd_param.l_p_device_type == LCD_T_ST7567)
{
LCD_WriteCmd(0xB0 + y); //设置页地址(0~7)
LCD_WriteCmd(0x10 + ((x&0xF0)>>4) ); //设置列地址 高字节
LCD_WriteCmd(0x00 + (x&0x0F) ); //设置列地址 低字节
}
//写数据
LCD_WriteData(string);

这是一个标准可示例:


**//写地址
if(lcd_param.l_p_device_type == LCD_T_UC1701)
{		
	LCD_WriteCmd(0xB0 + y);    //设置页地址(0~7)
	LCD_WriteCmd(0x04);           //列地址 高字节
	LCD_WriteData(0x00 + x);     //列地址 低字节	
	LCD_WriteCmd(0x01);           //写入数据
}
else if(lcd_param.l_p_device_type == LCD_T_ST7567)
{	
	LCD_WriteCmd(0xB0 + y);    								 //设置页地址(0~7)
	LCD_WriteCmd(0x10 + ((x&0xF0)>>4) );	                //设置列地址 高字节	
	LCD_WriteCmd(0x00 + (x&0x0F) );	       				    //设置列地址 低字节
}	
//写数据
LCD_WriteData(string);**
ST7567是一种单色图形LCD控制器,常用于嵌入式系统中的显示模块。它支持128x64像素的显示,并具有内置的控制器和驱动器,可以直接连接到微控制器或其他主控芯片。 要使用ST7567+LCD,您需要以下步骤: 1. 连接硬件:将ST7567控制器与LCD屏幕连接。通常,您需要连接电源、地线、数据线和控制线。具体的连接方式取决于您使用的具体硬件和接口。 2. 配置引脚:根据您的硬件和接口,配置微控制器的引脚以与ST7567进行通信。这可能涉及到设置GPIO引脚的输入/输出模式、电平和时序等。 3. 初始化ST7567:在代码中初始化ST7567控制器。这通常涉及到发送一系列的命令和参数,以配置控制器的工作模式、显示模式、对比度等。 4. 绘制图形:使用ST7567控制器的绘图功能,在LCD屏幕上绘制图形。您可以使用控制器提供的命令和函数来绘制点、线、矩形、圆等。 5. 更新显示:在完成绘制后,通过发送命令和数据,将绘制的图形更新到LCD屏幕上。这通常涉及到设置显示区域、发送像素数据等。 下面是一个使用Python和Raspberry Pi控制ST7567+LCD的简单示例: ```python import RPi.GPIO as GPIO import spidev # 初始化SPI接口 spi = spidev.SpiDev() spi.open(0, 0) spi.max_speed_hz = 1000000 # 初始化GPIO引脚 RST_PIN = 17 A0_PIN = 22 CS_PIN = 27 GPIO.setmode(GPIO.BCM) GPIO.setup(RST_PIN, GPIO.OUT) GPIO.setup(A0_PIN, GPIO.OUT) GPIO.setup(CS_PIN, GPIO.OUT) # ST7567初始化命令 def init_st7567(): GPIO.output(RST_PIN, GPIO.HIGH) GPIO.output(RST_PIN, GPIO.LOW) GPIO.output(RST_PIN, GPIO.HIGH) GPIO.output(CS_PIN, GPIO.LOW) spi.xfer([0xA3]) # 设置偏压比 spi.xfer([0xA2]) # 设置偏压比 spi.xfer([0x2F]) # 打开电源 spi.xfer([0xAF]) # 打开显示 # 在指定位置绘制点 def draw_pixel(x, y): spi.xfer([0xB0 | (y // 8)]) # 设置地址 spi.xfer([0x10 | (x >> 4)]) # 设置列地址高4位 spi.xfer([0x00 | (x & 0x0F)]) # 设置列地址低4位 spi.xfer([0xFF]) # 绘制点 # 清空屏幕 def clear_screen(): for page in range(8): spi.xfer([0xB0 | page]) # 设置地址 spi.xfer([0x10]) # 设置列地址高4位 spi.xfer([0x00]) # 设置列地址低4位 for _ in range(128): spi.xfer([0x00]) # 清空像素 # 初始化ST7567 init_st7567() # 清空屏幕 clear_screen() # 在坐标(10, 20)处绘制一个点 draw_pixel(10, 20) # 更新显示 GPIO.output(CS_PIN, GPIO.HIGH) ``` 请注意,上述示例是基于树莓派和Python的,具体的硬件和接口可能会有所不同。您需要根据您的具体硬件和接口进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值