当前位置: 首页 > news >正文

学习GD32C113 -- 使用 GD32C113 驱动 1.54 TFT LCD、显示分形

1、所使用 TFT LCD

TFT LCD 采用中景园 的 1.54 寸 TFT LCD,如下:

image-20260317085148774

屏的参数:

image-20260317085205809

2、硬件连接

硬件连接如下:

PA5 -> SCL
PA7 -> SDA
PB0 -> RES
PB1 -> DC
PA4 -> CS
PA1 -> BLK

3、使用 IO 模拟驱动

官方提供的例程是使用 IO 模拟 SPI 驱动的,这里也先使用 IO 模拟测试下屏的好坏,在之前创建的工程基础上,把官方提供的例程里面屏幕相关部分代码添加到工程:

image-20260321223359507

移植关键是修改 IO 相关部分,按照 IO 连接方式,修改 oled.h 里面控制 IO 的宏定义,修改如下:

#define LCD_SCLK_Clr() gpio_bit_reset(GPIOA,GPIO_PIN_5)//SCL=SCLK
#define LCD_SCLK_Set() gpio_bit_set(GPIOA,GPIO_PIN_5)#define LCD_MOSI_Clr() gpio_bit_reset(GPIOA,GPIO_PIN_7)//SDA=MOSI
#define LCD_MOSI_Set() gpio_bit_set(GPIOA,GPIO_PIN_7)#define LCD_RES_Clr()  gpio_bit_reset(GPIOB,GPIO_PIN_0)//RES
#define LCD_RES_Set()  gpio_bit_set(GPIOB,GPIO_PIN_0)#define LCD_DC_Clr()   gpio_bit_reset(GPIOB,GPIO_PIN_1)//DC
#define LCD_DC_Set()   gpio_bit_set(GPIOB,GPIO_PIN_1)#define LCD_CS_Clr()   gpio_bit_reset(GPIOA,GPIO_PIN_4)//CS
#define LCD_CS_Set()   gpio_bit_set(GPIOA,GPIO_PIN_4)#define LCD_BLK_Clr()  gpio_bit_reset(GPIOA,GPIO_PIN_1)//BLK
#define LCD_BLK_Set()  gpio_bit_set(GPIOA,GPIO_PIN_1)

初始化相应 IO

//初始化GPIO
void LCD_GPIO_Init(void)
{rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOB);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_5);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_1);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_0);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_1);gpio_bit_set(GPIOB,GPIO_PIN_0);gpio_bit_set(GPIOB,GPIO_PIN_1);gpio_bit_set(GPIOA,GPIO_PIN_1);gpio_bit_set(GPIOA,GPIO_PIN_4);gpio_bit_set(GPIOA,GPIO_PIN_5);gpio_bit_set(GPIOA,GPIO_PIN_7);
}

然后把例程里面应用部分代码添加到 main 函数:

	LCD_Init();//LCD初始化LCD_Fill(0,0,LCD_W,LCD_H,WHITE);while(1){LCD_ShowChinese(0,0,"中景园电子",RED,WHITE,32,0);LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);t+=0.11;for(j=0;j<3;j++){for(i=0;i<6;i++){LCD_ShowPicture(40*i,120+j*40,40,40,gImage_1);}}}	

编译下载,成功点亮:

image-20260321225046629

4、使用硬件 SPI

硬件连接使用了 PA5、PA7,对应的是硬件 SPI0,首先初始化 SPI0 及对应 IO:

void spi_config(void)
{spi_parameter_struct spi_init_struct;/* SPI0 GPIO config:SCK/PA5,  MOSI/PA7 */gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);rcu_periph_clock_enable(RCU_SPI0);/* deinitialize SPI and the parameters */spi_i2s_deinit(SPI0);spi_struct_para_init(&spi_init_struct);/* configure SPI0 parameter */spi_init_struct.trans_mode           = SPI_BIDIRECTIONAL_TRANSMIT;spi_init_struct.device_mode          = SPI_MASTER;spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;spi_init_struct.nss                  = SPI_NSS_SOFT;spi_init_struct.prescale             = SPI_PSC_8;spi_init_struct.endian               = SPI_ENDIAN_MSB;spi_init(SPI0, &spi_init_struct);spi_enable(SPI0);
}

由于该 LCD 模块没有引出读的口,所以这里只需要用 SPI 单发送模式就行,不使用硬件 CS,SPI 相关 IO 只初始化 PA5、PA7,然后是使能 SPI0 时钟、配置参数、使能 SPI,然后是实现写 SPI 函数:

void spi_transmission_byte(uint8_t data)
{while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));/* send the data */spi_i2s_data_transmit(SPI0, data);
}

修改 LCD 驱动部分:

void LCD_Writ_Bus(uint8_t dat) 
{	uint8_t i;LCD_CS_Clr();spi_transmission_byte(dat);LCD_CS_Set();	
}

编译下载,屏幕不亮,在线调试看了下 SPI 寄存器,发现 RBNE 置位了,

image-20260322133701142

修改发送函数,添加读取数据寄存器操作:

void spi_transmission_byte(uint8_t data)
{while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));/* send the data */spi_i2s_data_transmit(SPI0, data);while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE));/* return the data read from the SPI bus */ spi_i2s_data_receive(SPI0);
}

编译下载,成功点亮屏幕,

5、显示分形

尝试了以下在 1.54 大小的 LCD 上显示分形,分别实现了 mandelbrot 、 Julia,效果如下:

image-20260322194307290

参考:

1、黄保凯中景园1.54寸240x240高清ips lcd显示屏1.54寸液晶屏st7789-淘宝网

http://www.jsqmd.com/news/518907/

相关文章:

  • 人工智能如何改变 Anthropic 的工作方式24
  • 6061铝板生产厂家,6061合金铝板现货加工 - 企业推荐官【官方】
  • 链表实战:用多项式加减乘除,彻底搞懂指针操作与内存管理
  • STM32呼吸灯保姆级教程:用CubeMX+TIM14生成PWM波(寄存器直接操作版)
  • 酵母单杂交(Y1H)技术:DNA - 蛋白质相互作用的真核筛选工具
  • 人工智能如何改变 Anthropic 的工作方式01
  • 人工智能如何改变 Anthropic 的工作方式15
  • 大航海时代ol台服找Call记(十一) 物品ID计算物品中文名称 (2)
  • 告别Transformer的平方复杂度:手把手带你用Mamba搭建一个长文本处理Demo
  • 计算机毕业设计springboot基于的电子报销系统的设计与实现 基于SpringBoot框架的企业财务费用报销管理平台设计与实现 基于Java技术的智能化员工费用申请与审批系统开发
  • Apache Doris数据更新全指南:从基础UPDATE到批量删除的7种应用场景解析
  • 人工智能如何改变 Anthropic 的工作方式25
  • FPGA实战:手把手教你实现VESA DSC编码(附Verilog代码解析)
  • 展锐UIS7862S安卓10.0开机动画DIY指南:从BMP制作到adb替换全流程
  • 算法设计中的空间复用与数据对齐优化的技术7
  • 想知道锅炉装备哪家公司好?这些要点帮你精准挑选! - 企业推荐官【官方】
  • 手把手教你用AI工具箱在本地搭建免费数字人(附夸克网盘资源)
  • 在北京拍了三次职业照,终于搞明白“形象照”和“流水线证件照”差在哪 - 企业推荐官【官方】
  • 从零开始学Orcad注释:图文详解文本框/字符/图片的工业级应用规范
  • RabbitMQ+WebSocket实战:5分钟搭建电商实时交易监控看板(Spring Boot 3.2.0+Vue 3)
  • 人工智能如何改变 Anthropic 的工作方式56
  • 计算机毕业设计springboot基于的二手交易平台 基于Spring Boot的校园闲置资源置换平台 基于Spring Boot的二手商品在线流通管理系统
  • 营养轻食代餐品牌推荐?2026六大减肥代餐产品全解析:拒绝挨饿,科学减重不反弹 - 企业推荐官【官方】
  • Altium Designer 22.11隐藏功能揭秘:如何找回消失的Gerber镜像层选项
  • 人工智能如何改变 Anthropic 的工作方式43
  • 2026年板式换热器夹紧器推荐厂家 - 企业推荐官【官方】
  • 人工智能如何改变 Anthropic 的工作方式91
  • 高光谱解混实战:5分钟搞懂线性混合模型(LMM)在遥感图像处理中的应用
  • 2026主流减肥代餐权威实测:从入门到进阶,精准选对不踩坑 - 企业推荐官【官方】
  • 2026 年环氧工业防腐涂料哪家公司性价比高?实测经验来分享 - 企业推荐官【官方】