适用于正点原子7寸RGB液晶屏资料,包含AD20完整工程

适用于正点原子7寸RGB液晶屏资料,包含AD20完整工程

探索正点原子7寸RGB液晶屏:AD20工程实战

最近,我入手了一块正点原子的7寸RGB液晶屏,搭配AD20开发板,想着能折腾出点有意思的东西。折腾的过程虽然有点坎坷,但收获还是挺多的,现在就来分享一下我的经历。

硬件准备:工欲善其事,必先利其器

首先,我需要明确所需的硬件:

  • 开发板:AD20开发板,支持丰富的外设接口。
  • 显示屏:正点原子7寸RGB液晶屏,分辨率为800x480。
  • 电阻:3.3V的电阻,用于匹配显示屏的电压。
  • 排线:连接开发板与显示屏的排线,确保信号传输稳定。

硬件准备完毕后,我查阅了正点原子提供的资料,发现显示屏的接口是标准的RGB接口,可以直接与开发板的GPIO和DMA外设连接。

配置:从零开始

接下来是部分,我使用的是AD20的官方IDE,配置工程时需要注意以下几点:

  • 工程模板:选择适合RGB显示屏的模板,确保外设配置正确。
  • 外设初始化:配置GPIO、DMA、LCD控制器等外设,确保显示屏能正常工作。

在配置过程中,我参考了官方提供的驱动代码,发现LCD控制器的配置比较关键,需要设置正确的时序参数,否则显示屏会出现画面异常。

代码实战:点亮屏幕

首先,我尝试编写一个简单的程序,让屏幕显示一个固定的颜色。以下是关键代码:

// 初始化LCD控制器
void lcd_init(void) {
    // 配置GPIO引脚
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置LCD控制器
    LCD_InitTypeDef LCD_InitStructure;
    LCD_InitStructure.PLL = 240;
    LCD_InitStructure.PLLSAI = 240;
    LCD_InitStructure.PLLSAIR = 240;
    LCD_InitStructure.PLLSAIQ = 240;
    LCD_InitStructure.PLLSAIP = 240;
    LCD_InitStructure.PLLSAIDIV = 240;
    LCD_InitStructure.PLLDIV = 240;
    LCD_InitStructure.PLLSAIDIV = 240;
    LCD_InitStructure.PLLSAIQ = 240;
    LCD_InitStructure.PLLSAIP = 240;
    LCD_InitStructure.PLLSAIR = 240;
    LCD_InitStructure.PLLSAIDIV = 240;
    LCD_Init(&LCD_InitStructure);
}

这段代码主要配置了GPIO引脚和LCD控制器的时序参数。通过配置GPIO为复用推挽输出模式,确保信号能够正确传输到显示屏。LCD控制器的配置则需要根据显示屏的规格书来设置时序参数,确保显示屏能够稳定工作。

显示效果:从黑屏到彩色画面

经过一番配置后,我运行程序,显示屏终于亮了起来!不过,画面有点偏色,后来发现是RGB信号线接反了。调整后,画面恢复正常,显示出了一个蓝色的背景。

接下来,我尝试在屏幕上绘制一些简单的图形,比如矩形和文字。以下是绘制矩形的代码:

// 绘制矩形
void draw_rectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t color) {
    uint32_t x, y;
    for (x = x1; x <= x2; x++) {
        for (y = y1; y <= y2; y++) {
            LCD_DrawPixel(x, y, color);
        }
    }
}

这个函数通过双重循环遍历矩形的每一个像素点,并调用LCD_DrawPixel函数设置颜色。虽然这个方法效率不高,但对于小面积的图形绘制还是可以接受的。

文字显示:让屏幕更有内容

为了让屏幕显示文字,我需要编写一个简单的文字绘制函数。以下是代码:

// 绘制文字
void draw_text(uint16_t x, uint16_t y, const char *text, uint32_t color) {
    uint8_t i = 0;
    while (text[i] != '\0') {
        LCD_DrawChar(x + i * 16, y, text[i], color, 0x000000);
        i++;
    }
}

这个函数遍历字符串中的每一个字符,并调用LCD_DrawChar函数在指定位置绘制字符。每个字符的宽度为16像素,高度为16像素,字体大小可以根据需要调整。

退出与复位:确保程序稳定运行

在程序的最后,我添加了一个退出和复位的函数,确保程序在结束时能够正确复位外设,避免显示屏出现异常。

// 退出并复位
void exit_and_reset(void) {
    // 关闭LCD控制器
    LCD_Cmd(DISABLE);
    // 重置
    NVIC_SystemReset();
}

这个函数首先关闭LCD控制器,然后通过NVIC_SystemReset函数复位,确保程序能够干净地退出。

总结:从零到点亮屏幕

通过这次实战,我成功地在正点原子7寸RGB液晶屏上实现了基本的显示功能。从硬件连接到配置,再到代码编写,每一步都充满了挑战和收获。虽然过程中遇到了一些问题,但通过查阅资料和调试,最终都得到了解决。

如果你也对嵌入式开发感兴趣,不妨尝试一下类似的项目。从零开始,一步步实现自己的想法,那种成就感是无法用语言形容的。
适用于正点原子7寸RGB液晶屏资料,包含AD20完整工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值