GD32驱动LCD12864

目录

1、引言

1.1、LCD12864基本概念和作用。

1.2、硬件引脚

2、GD32微控制器简介

3、LCD12864显示屏简介 

3.1、模块引脚说明 

 3.2、模块连接方式

4、驱动原理 

4.1、指令集

4.2、显示坐标关系

5、软件开发

6、硬件连接

7、效果演示 

8、附录


1、引言

1.1、LCD12864基本概念和作用。

        LCD12864显示屏是一种基于液晶显示技术的显示设备,它由128×64个像素点组成。这种显示屏通常用于各种电子设备和嵌入式系统中,提供用户界面或显示信息的功能。

以下是LCD12864显示屏的基本概念和作用:

  1. 液晶显示技术: LCD12864显示屏采用液晶显示技术,其中液晶材料处于两块玻璃基板之间。通过在液晶层中施加电场来控制液晶分子的排列,从而实现像素的亮暗变化。

  2. 分辨率: LCD12864显示屏的分辨率为128×64像素,这意味着它可以显示128列和64行的像素点。分辨率决定了显示屏能够显示的图像或文本的清晰度和细节程度。

  3. 图形和文本显示: LCD12864显示屏可以用于显示图形和文本信息。通过控制每个像素点的亮暗状态,可以显示图形、图标和动画等内容。同时,它也可以用于显示文本信息,例如菜单、消息、数据等。

  4. 用户界面: LCD12864显示屏常用于嵌入式系统和电子设备的用户界面。通过在显示屏上显示菜单、按钮、控件等元素,用户可以与设备进行交互,并进行各种操作和设置。

  5. 信息显示: LCD12864显示屏还可以用于显示各种信息,例如传感器数据、系统状态、时间日期、温度湿度等。这些信息对用户或操作者来说是有用的,可以帮助他们了解设备的工作状态和环境条件。

1.2、硬件引脚

图1-1 硬件连接

        注明:部分引脚已省去。 

2、GD32微控制器简介

        GD32微控制器是一款由国内厂商GigaDevice推出的32位微控制器系列,它们基于ARM Cortex-M3、Cortex-M4或Cortex-M23内核,具有一系列特点和优势:

  1. 高性能: GD32微控制器采用高性能的ARM Cortex-M内核,提供较高的处理性能和运算能力,适用于各种计算密集型应用。

  2. 丰富的外设: GD32系列微控制器集成了丰富的外设,包括通用输入输出端口(GPIO)、串行通信接口(SPI、I2C、USART)、定时器(Timer)、模拟-数字转换器(ADC)等,以满足不同应用的需求。

  3. 低功耗设计: GD32微控制器采用先进的低功耗设计技术,能够在低功耗模式下运行,并提供多种节能功能,如睡眠模式、待机模式等,以延长电池寿命或降低功耗。

  4. 丰富的存储器: GD32微控制器内置了闪存(Flash)和随机存取存储器(SRAM),可用于存储程序代码和数据,支持灵活的存储器映射和扩展。

  5. 丰富的开发工具和生态系统: GD32系列微控制器提供了丰富的开发工具和生态系统,包括开发板、调试器、软件开发工具链等,以帮助开发者快速开发和调试应用程序。

  6. 良好的兼容性: GD32微控制器与市面上的其他ARM Cortex-M系列微控制器兼容性良好,可轻松移植现有的软件代码和应用程序。

  7. 成本效益高: 与其他同类产品相比,GD32微控制器具有较高的性价比,适用于各种成本敏感型应用。

         注明:本文中采取GD32F303CBT6作为参照。

3、LCD12864显示屏简介 

3.1、模块引脚说明

        模块引脚是20引脚,有些引脚是固定状态,所以原理图中只画了16个引脚。

图2-1 模块引脚说明

 3.2、模块连接方式

         LCD12864与主控有两种连接方式,也就是两种通信方式,可以选择串行和并行,本文主要介绍更为高效的并行方式。

图3-1 主控写lcd12864时序图

图3-2 主控读lcd12864时序图

4、驱动原理 

         官方给出了一套指令集用来驱动该模块。将寄存器模式初始化好,然后使用指令集来配置显示屏就可以实现。

4.1、指令集

        在编写命令的时候,忙等待是一个非常重要的一个点,你可以通过判断数据位最高位(DB7)的状态来检测是否lcd12864模块是否忙碌。

图4-1 用户指令集

         使用到的指令集如下对应:

void lcd12864_init()//显示屏的初始化
{
    lcd12864_write_command(0x01);
    delay_1ms(1);
    lcd12864_write_command(0x02);
    delay_1ms(1);
    lcd12864_write_command(0x0c);
    delay_1ms(1);
    lcd12864_write_command(0x80);
    delay_1ms(1);
    lcd12864_write_command(0x34);
    delay_1ms(1);
    lcd12864_write_command(0x30);
    delay_1ms(1);
}

4.2、显示坐标关系

图4-2 坐标关系

void lcd12864_display_pos(unsigned char X, unsigned char Y)//设置显示的坐标
{
    unsigned char addr;
    if (Y == 0)
        addr = 0x80;
    if (Y == 1)
        addr = 0x90;
    if (Y == 2)
        addr = 0x88;
    if (Y == 3)
        addr = 0x98;
    addr += X;
    lcd12864_write_command(addr);
}

5、软件开发

int mian()
{
    sys_init();//时钟、看门狗、gpio引脚等模式配置
    set_dog();
    lcd_init();//屏幕的初始化
    lcd12864_init();//显示屏初始化(指令集驱动)
    lcd12864_show_string(0, 0, "  Press button  ");//显示字符串
    while(1)
    {
        set_dog();
    }
}

        代码放入了网盘中、文档资料在附录:

链接:https://pan.baidu.com/s/1SDuE2xRCJhNR8GFeQgdeZw?pwd=0520 
提取码:0520

6、硬件连接

图6-1 硬件连接原理图

        大家在参照代码的时候,一定要结合图中主控连接的引脚一起阅读,我这个数据引脚是不连续的,写起来更加的麻烦,要是你实际的数据引脚是连续的,更加的方便,我这边数据据引脚不是连续的,导致写指令麻烦,方法都想了很多种。比如一般的写0x34,直接就是八位的状态,但是我需要拆分出每一位状态来配置,一切以你实际情况为主。

7、效果演示 

图7-1 效果图测试

8、附录

链接:https://pan.baidu.com/s/1F2jhSBkrujyCRaqgd6aZTw?pwd=0630 
提取码:0630

GD32F103RCT6是一款基于Arm Cortex-M4的STM32微控制器,其点灯程序的基本目标是控制GPIO端口的一个引脚作为LED灯的驱动,使其闪烁或保持常亮。以下是编写这样一个简单点灯程序的一般步骤: 1. **初始化硬件**: 首先,你需要在程序开始时对GPIO和LED进行初始化,包括设置GPIO模式为推挽输出,并将LED所连接的GPIO引脚设为输出状态。 ```c #include "stm32f10x.h" GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // LED连接的GPIO引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 2. **设置定时器**: 可能需要使用定时器来控制灯的开关频率,比如设置一个循环计数器,每到达一定次数就切换LED的状态。 ```c TIM_HandleTypeDef htim1; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 500; // 设置周期,例如500毫秒关闭,500毫秒打开 TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000) - 1; // 根据系统时钟计算预分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; HAL_TIM_TimeBaseInit(&htim1, &TIM_TimeBaseStructure); // 启动定时器 HAL_TIM_Start(&htim1); ``` 3. **主循环**: 在主循环中,不断读取定时器值,当达到设定的时间时,改变GPIO的输出状态来点亮或熄灭LED。 ```c while (1) { HAL_Delay(1); // 等待一段时间,让定时器更新 if (HAL_TIM_GetCount(&htim1, &htim1.Counter) >= TIM_TimeBaseStructure.TIM_Period) { HAL_GPIO_TogglePin(GPIOA, GPIO_Pin_1); // 切换LED状态 HAL_TIM_SetCounter(&htim1, 0); // 清零定时器 } } ``` 注意,以上代码仅为示例,实际应用中需根据具体的硬件布局、LED类型以及需求调整。同时,记得在项目设置中添加适当的库以支持GPIO和定时器功能。
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值