一,LCD是什么?LCD干嘛用的?
由以下构成
用处:显示你想显示的东西。(对不起,是废话)
二,LCD怎么用?
备注:使用的就是COG LCD液晶屏,它只能显示黑白图像和文字,显示的像素大小为128*128。
LCD显示点阵与DD RAM(显示数据存储器)地址的对应关系:
- PAGE:8个行表示一“页”,一个128*128点阵的屏分为16个“页”,从第0“页”到第15“页”。
- DB7--DB0:数据是从下向上排列的。最低位D0在最上面,最高位D7在最下面。每一位(bit)数据对应一个点阵,通常“1”代表点亮该点阵,“0”代表关闭该点阵。如下图所示:
其一行有128个像素点,可通过向存储器写入数据来点亮/熄灭该点阵
接下来我们将用LCD屏幕来显示简单的中英文字符和图片,通过以上介绍,我们可以得出COG LCD液晶显示需要的相关设置步骤如下:
- 1、设置STM32 F1与COG液晶显示屏模块相连接的IO。将COG液晶模块相连的IO口初始化以便驱动LCD.
- 2,初始化COG液晶显示屏模块。初始化序列就是向LCD控制器写入一系列的设置值(比如伽马校准),这些初始化序列一般LCD供应商会提供给客户,我们直接使用这些序列即可。在初始化之后,LCD才可以正常使用。
- 3、显示中英文字符和图片,通过调用字符显示函数实现图片/字符显示到COG LCD屏幕模块上。
三、实际操作
/**
****************************************************************************
* @文件名 : lcd.c
* @作者 : Apana
* @文件版本 : V1.0.0
* @编写日期 : 2020-08-17
* @说明 : lcd源文件
* @备注 : lcd使用JTAG引脚,在使用之前需要禁用JTAG,使能SW
******************************************************************************/
/*----------------------------------------------------------------------------
更新日志:
2020-08-17 V1.0.0:初始版本
----------------------------------------------------------------------------*/
/* 包含的头文件 --------------------------------------------------------------*/
#include "lcd.h"
#include "gbhz.h"
#include "ascii.h"
#include "delay.h"
u8 LCD_GRAM[16][128]; //显示缓存
//初始化LCD_GPIO
void LCD_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO结构体定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); //使能端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启复用时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //禁用JTAG,使能SW
//数据引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 ; //PC
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8 ; //PB
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);
//控制引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_9); //将引脚置
GPIO_ResetBits(GPIOC,GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11); //将引脚复位
//LCD-RD