3327|6

169

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【微雪 RP2040双核开发板】LCD 的详细使用 [复制链接]

一、硬件:

本开发板可玩性最高的外设,就是这个圆屏了。开发板圆屏的驱动芯片是GC9A01A,屏幕并没有触摸屏,只是一个显示的模组。

分辨率为240RGB×240 dots,内部有129600字节的GRAM。

 

LCD的电路如下,看定义是IIC的驱动,实际上是SPI的驱动,这个驱动芯片是支持SPI的。

SPI的时钟如下所示,时钟空闲时为低电平,在第一个边沿采样。相应的SPI的参数要配置成匹配的。

其他的控制引脚,如CS,DC,RESET,背光等都是使用的GPIO的功能,这就比较简单了。直接驱动GPIO电平就可以了。

软件:

SPI的初始化函数如下,可以看到配置的SPI参数与时序图是一样的。

uint spi_init(spi_inst_t *spi, uint baudrate) {
    spi_reset(spi);
    spi_unreset(spi);

    uint baud = spi_set_baudrate(spi, baudrate);
    spi_set_format(spi, 8, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST);
    // Always enable DREQ signals -- harmless if DMA is not listening
    hw_set_bits(&spi_get_hw(spi)->dmacr, SPI_SSPDMACR_TXDMAE_BITS | SPI_SSPDMACR_RXDMAE_BITS);

    // Finally enable the SPI
    hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS);
    return baud;
}

GC9A01A支持的写命令、数据、16位数据的函数分别是:

static void LCD_1IN28_SendCommand(UBYTE Reg)
{
    DEV_Digital_Write(LCD_DC_PIN, 0);
    //DEV_Digital_Write(LCD_CS_PIN, 0);
    DEV_SPI_WriteByte(Reg);
    //DEV_Digital_Write(LCD_CS_PIN, 1);
}

/******************************************************************************
function :  send data
parameter:
    Data : Write data
******************************************************************************/
static void LCD_1IN28_SendData_8Bit(UBYTE Data)
{
    DEV_Digital_Write(LCD_DC_PIN, 1);
    //DEV_Digital_Write(LCD_CS_PIN, 0);
    DEV_SPI_WriteByte(Data);
    //DEV_Digital_Write(LCD_CS_PIN, 1);
}

/******************************************************************************
function :  send data
parameter:
    Data : Write data
******************************************************************************/
static void LCD_1IN28_SendData_16Bit(UWORD Data)
{
    DEV_Digital_Write(LCD_DC_PIN, 1);
    //DEV_Digital_Write(LCD_CS_PIN, 0);
    DEV_SPI_WriteByte(Data >> 8);
    DEV_SPI_WriteByte(Data);
   // DEV_Digital_Write(LCD_CS_PIN, 1);
    
}

 

有了以上几个基本的SPI操作函数,就可以扩展封装一些特定功能的函数了,比如Paint_DrawLine、Paint_DrawCircle、Paint_DrawString_EN、Paint_DrawImage等等。

由于开发板没有SD卡,所以,要显示图片,要先把图片转换成一个C文件里的数组。再使用Paint_DrawImage函数显示。

 

官方提供转换工具:Image2Lcd2.9

 

首先要准备一张240*240的图片,如果图片的尺寸不合适,可能导致转换出来的数据不正确,显示时,会有花屏的问题,或是图形变形的可能,所以,最好是把图片剪裁缩小成240*240的。

输出的灰度设置成16位真彩色。

至于扫描模式这些,根据你屏的使用方向,可以进行修改。

 

虽然准备的是一张正方的图,显示时,是从中心开始,显示一个圆形的区域,其他的区域是不显示的,所以,要设计界面时,要注意图形的位置。

生成的数组为:const unsigned char gImage_hg[115208]={....};注意这里的数组的大小,如果不是这个尺寸的数组,显示时,可能有问题。

在 ImageData.h中进行声明:

extern const unsigned char gImage_hg[]; 

 

使用如下函数进行图片的显示

 

Paint_DrawImage(gImage_hg, 0, 0, 240, 240);
    LCD_1IN28_Display(BlackImage);
    DEV_Delay_ms(1000);

 

显示效果如下:

 

 

 

 

 

此帖出自移动便携论坛

最新回复

EFT
说的很详细,复刻一个试试看,学的好杂,看看哪个适合用。   详情 回复 发表于 2024-5-15 13:04
点赞 关注(1)
 
 

回复
举报

2939

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 

LCD说明的很详细,楼主细心测评,顶一下。

此帖出自移动便携论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 

显示效果不错

此帖出自移动便携论坛
 
 
 

回复

6060

帖子

7

TA的资源

版主

4
 

圆形布局是什么样的,是自己裁剪圆形以外的吗?

此帖出自移动便携论坛

点评

不用,按方形造成,圆形外的不显示  详情 回复 发表于 2022-12-5 12:45
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

169

帖子

0

TA的资源

一粒金砂(中级)

5
 
秦天qintian0303 发表于 2022-12-4 08:12 圆形布局是什么样的,是自己裁剪圆形以外的吗?

不用,按方形造成,圆形外的不显示

此帖出自移动便携论坛

点评

嗯,那就实际显示达不到他说的那个分辨率  详情 回复 发表于 2022-12-5 17:36
 
 
 

回复

6060

帖子

7

TA的资源

版主

6
 
jinyi7016 发表于 2022-12-5 12:45 不用,按方形造成,圆形外的不显示

嗯,那就实际显示达不到他说的那个分辨率

此帖出自移动便携论坛
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 

说的很详细,复刻一个试试看,学的好杂,看看哪个适合用。

此帖出自移动便携论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表