加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

嵌入式外设集-显示模块(LCD12864-串行)驱动

03/20 15:56
4200
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
原理图
  • 方案介绍
    • 一、模块介绍
    • 二、连线以及驱动代码 -- 串行
    • 三、参考
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

一、模块介绍

LCD12864 显示模块是一种常见的液晶显示模块,尺寸为128x64像素。它采用液晶显示技术,可以显示文本、图形和图像。

LCD12864 显示模块通常由液晶屏、驱动电路背光源组成。液晶屏由大量的液晶像素组成,每个像素可以是开启或关闭状态,从而形成文本、图形和图像。驱动电路负责控制每个像素的开关状态,通过输入触发信号来控制屏幕显示的内容。背光源提供背光照明,使得显示内容在暗环境下也能清晰可见。

LCD12864 显示模块具有以下特点:

  1. 高分辨率: 128x64像素的显示区域,可以显示更多的内容。
  2. 多功能性: 可以显示文本、图形和图像,适用于不同的应用场景。
  3. 易于控制: 通常使用并行或串行接口微控制器或其他设备进行通信,控制显示内容。
  4. 低功耗: 液晶显示技术相对较低的功耗,适用于电池供电的设备。
  5. 可靠性高: 液晶显示模块具有较长的使用寿命和稳定性,适用于长时间运行的应用。
  6. 显示效果好: 具有高对比度和清晰度,显示内容清晰可见。

LCD12864 显示模块广泛应用于工业控制、仪器仪表、电子设备等领域,常用于显示实时数据、系统状态、菜单等信息。


关注微信公众号--星之援工作室 发送关键字(LCD12864

➡️➡️

二、连线以及驱动代码 -- 串行

LCD12864是一款基于串行接口的液晶显示屏,它具有128x64像素的分辨率。以下是其连线以及驱动代码的简要说明。

一、连线

1. VCC(电源正)连接到+5V

2. GND(电源负)连接到地

3. RS(数据位锁存器)连接到Arduino的数字口(如D2)

4. RW(读写控制)连接到Arduino的数字口(如D3)

5. EN(使能控制)连接到Arduino的数字口(如D4)

6. D0-D7(数据线)连接到Arduino的数字口(如D5-D12)

7. 时钟信号(CLK)连接到Arduino的

下图是STM32f103F103C8T6

LCD.c

LCD的驱动代码如下

#include "lcd.H"
#include "delay.h"

/*!
 *  @brief      GPIO_init
 *  @since      v1.0
 *  @param  None
 */

void lcd_GPIO_init()
{

	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能PB,PE端口时钟

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // LED0-->PB.5 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	   // 推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	   // IO口速度为50MHz

	GPIO_Init(GPIOB, &GPIO_InitStructure); // 根据设定参数初始化GPIOB.5
	// GPIO_SetBits(GPIOB, GPIO_Pin_5);	   // PB.5 输出高
	SID = 1;
	SCLK = 1;
}

/* 字符显示RAM地址    4行8列 */
u8 LCD_addr[4][8] = {
	{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87}, // 第一行
	{0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97}, // 第二行
	{0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F}, // 第三行
	{0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F}  // 第四行
};

/*!
 *  @brief      LCD串行发送一个字节
 *  @since      v1.0
 *  @param  byte   写入字节
 *  @author     Z小旋
 */
void SendByte(u8 byte)
{
	u8 i;
	for (i = 0; i < 8; i++)
	{
		if ((byte << i) & 0x80) // 0x80(1000 0000)  只会保留最高位
		{
			SID = 1; // 引脚输出高电平,代表发送1
		}
		else
		{
			SID = 0; // 引脚输出低电平,代表发送0
		}
		/*或
			SID =	(Dbyte << i) & 0x80;

			上面那样为了方便理解
		*/
		SCLK = 0;	 // 时钟线置低  允许SID变化
		delay_us(5); // 延时使数据写入
		SCLK = 1;	 // 拉高时钟,让从机读SID
	}
}

/*!
 *  @brief      LCD写指令
 *  @since      v1.0
 *  @param  Cmd   要写入的指令
 *  @author     Z小旋
 */
void Lcd_WriteCmd(u8 Cmd)
{
	delay_ms(1);		  // 由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测
	SendByte(WRITE_CMD);  // 11111,RW(0),RS(0),0
	SendByte(0xf0 & Cmd); // 高四位
	SendByte(Cmd << 4);	  // 低四位(先执行<<)
}

/*!
 *  @brief      LCD写数据
 *  @since      v1.0
 *  @param  Dat   要写入的数据
 *  @author     Z小旋
 */
void Lcd_WriteData(u8 Dat)
{
	delay_ms(1);
	SendByte(WRITE_DAT);  // 11111,RW(0),RS(1),0
	SendByte(0xf0 & Dat); // 高四位
	SendByte(Dat << 4);	  // 低四位(先执行<<)
}
/*!
 *  @brief      LCD初始化
 *  @since      v1.0
 *  @param  None
 *  @author     Z小旋
 */
void Lcd_Init(void)
{
	delay_ms(50);		// 等待液晶自检(延时>40ms)
	Lcd_WriteCmd(0x30); // 功能设定:选择基本指令集
	delay_ms(1);		// 延时>100us
	Lcd_WriteCmd(0x30); // 功能设定:选择8bit数据流
	delay_ms(1);		// 延时>37us
	Lcd_WriteCmd(0x0c); // 开显示
	delay_ms(1);		// 延时>100us
	Lcd_WriteCmd(0x01); // 清除显示,并且设定地址指针为00H
	delay_ms(30);		// 延时>10ms
	Lcd_WriteCmd(0x06); // 进入设定点,初始化完成
}

/*!
 *  @brief      显示字符或汉字
 *  @since      v1.0
 *  @param  x: row(0~3)
 *  @param  y: line(0~7)
 *  @param 	str: 要显示的字符或汉字
 *  @author     Z小旋
 */
void LCD_Display_Words(uint8_t x, uint8_t y, uint8_t *str)
{
	Lcd_WriteCmd(LCD_addr[x][y]); // 写初始光标位置
	while (*str > 0)
	{
		Lcd_WriteData(*str); // 写数据
		str++;
	}
}
/*!
 *  @brief      显示图片
 *  @since      v1.0
 *  @param  *pic   图片地址
 *  @author
 */
void LCD_Display_Picture(uint8_t *img)
{
	uint8_t x, y, i;
	Lcd_WriteCmd(0x34);		// 切换到扩充指令
	Lcd_WriteCmd(0x34);		// 关闭图形显示
	for (i = 0; i < 1; i++) // 上下屏写入
	{
		for (y = 0; y < 32; y++) // 垂直Y写32次
		{
			for (x = 0; x < 8; x++) // 横向X写8次
			{
				Lcd_WriteCmd(0x80 + y);		// 行地址
				Lcd_WriteCmd(0x80 + x + i); // 列地址
				Lcd_WriteData(*img++);		// 写高位字节数据 D15-D8
				Lcd_WriteData(*img++);		// 写低位字节数据 D7-D0
			}
		}
	}
	Lcd_WriteCmd(0x36); // 打开图形显示
	Lcd_WriteCmd(0x30); // 切换回基本指令
}
/*!
 *  @brief      清屏函数
 *  @since      v1.0
 *  @param  None
 *  @author     Z小旋
 */
void LCD_Clear(void)
{
	Lcd_WriteCmd(0x01); // 清屏指令
	delay_ms(2);		// 延时以待液晶稳定【至少1.6ms】
}

 LCD.h

#ifndef __lcd12864_H_
#define __lcd12864_H_

#include "sys.h"

#define WRITE_CMD 0xF8 // 写命令
#define WRITE_DAT 0xFA // 写数据

// 接口(SID: PB1  SCLK: PB0)
#define SID PBout(1)
#define SCLK PBout(0)

void lcd_GPIO_init(void);
void Lcd_Init(void);

void SendByte(u8 Dbyte);
void LCD_Clear(void);
void LCD_Display_Words(uint8_t x, uint8_t y, uint8_t *str);
void LCD_Display_Picture(uint8_t *img);

void Lcd_WriteData(u8 Dat);
void Lcd_WriteCmd(u8 Cmd);

#endif

main.c

LCD自带字库,可以直接使用

#include "stm32f10x.h"
#include "sys.h"
#include "lcd.h"
#include "delay.h"
#include "usart.h"
#include "adc.h"

int main(void)
{

  
    uart_init(115200);
    delay_init();
    lcd_GPIO_init();
    Lcd_Init();

    while (1) {
        /*汉字显示*/
        LCD_Display_Words(0, 0, "清时明月汉时关");
        LCD_Display_Words(1, 0, "万里长征人未还");
        LCD_Display_Words(2, 0, "但使龙城飞将在");
        LCD_Display_Words(3, 0, "不教胡马度阴山");
    }
}

三、参考

STM32 LCD12864 串行通信模式 (从原理让你理解)icon-default.png?t=N7T8https://blog.csdn.net/as480133937/article/details/97650805?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%98%BE%E7%A4%BA%E6%A8%A1%E5%9D%97%EF%BC%88LCD12864%20--%20%E4%B8%B2%E8%A1%8C%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-97650805.142^v96^pc_search_result_base7&spm=1018.2226.3001.4187


完整代码请关注卫星公众号进行获取和咨询


联系方式 微信号:13648103287

  • 联系方式.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
AD9914BCPZ 1 Analog Devices Inc 3.5 GSPS Direct Digital Synthesizer with 12-bit DAC

ECAD模型

下载ECAD模型
$244.18 查看
DLPC3478CZEZ 1 Texas Instruments DLP&reg; display and light controller for DLP3010LC (0.3 720p) DMD 201-NFBGA -30 to 85

ECAD模型

下载ECAD模型
$59.56 查看
TDA1308T/N2,115 1 NXP Semiconductors TDA1308 - Class-AB stereo headphone driver SOIC 8-Pin
$1.4 查看

相关推荐

电子产业图谱

方案定制,程序设计方案、单片机程序设计与讲解、APP定制开发。本公众号致力于向读者传递关于程序设计和开发的相关知识,并分享一些关于软件开发的最佳实践。如果您有什么问题或建议,请随时联系我们。我们将竭诚为您服务