加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

嵌入式外設(shè)集-顯示模塊(LCD12864-串行)驅(qū)動

03/20 15:56
4151
服務支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
原理圖
相關(guān)方案
  • 方案介紹
    • 一、模塊介紹
    • 二、連線以及驅(qū)動代碼?-- 串行
    • 三、參考
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

一、模塊介紹

LCD12864 顯示模塊是一種常見的液晶顯示模塊,尺寸為128x64像素。它采用液晶顯示技術(shù),可以顯示文本、圖形和圖像。

LCD12864 顯示模塊通常由液晶屏、驅(qū)動電路背光源組成。液晶屏由大量的液晶像素組成,每個像素可以是開啟或關(guān)閉狀態(tài),從而形成文本、圖形和圖像。驅(qū)動電路負責控制每個像素的開關(guān)狀態(tài),通過輸入觸發(fā)信號來控制屏幕顯示的內(nèi)容。背光源提供背光照明,使得顯示內(nèi)容在暗環(huán)境下也能清晰可見。

LCD12864 顯示模塊具有以下特點:

  1. 高分辨率: 128x64像素的顯示區(qū)域,可以顯示更多的內(nèi)容。
  2. 多功能性: 可以顯示文本、圖形和圖像,適用于不同的應用場景。
  3. 易于控制: 通常使用并行或串行接口微控制器或其他設(shè)備進行通信,控制顯示內(nèi)容。
  4. 低功耗: 液晶顯示技術(shù)相對較低的功耗,適用于電池供電的設(shè)備。
  5. 可靠性高: 液晶顯示模塊具有較長的使用壽命和穩(wěn)定性,適用于長時間運行的應用。
  6. 顯示效果好: 具有高對比度和清晰度,顯示內(nèi)容清晰可見。

LCD12864 顯示模塊廣泛應用于工業(yè)控制、儀器儀表、電子設(shè)備等領(lǐng)域,常用于顯示實時數(shù)據(jù)、系統(tǒng)狀態(tài)、菜單等信息。


關(guān)注微信公眾號--星之援工作室 發(fā)送關(guān)鍵字(LCD12864

????

二、連線以及驅(qū)動代碼?-- 串行

LCD12864是一款基于串行接口的液晶顯示屏,它具有128x64像素的分辨率。以下是其連線以及驅(qū)動代碼的簡要說明。

一、連線

1. VCC(電源正)連接到+5V

2. GND(電源負)連接到地

3. RS(數(shù)據(jù)位鎖存器)連接到Arduino的數(shù)字口(如D2)

4. RW(讀寫控制)連接到Arduino的數(shù)字口(如D3)

5. EN(使能控制)連接到Arduino的數(shù)字口(如D4)

6. D0-D7(數(shù)據(jù)線)連接到Arduino的數(shù)字口(如D5-D12)

7. 時鐘信號(CLK)連接到Arduino的

下圖是STM32f103F103C8T6

LCD.c

LCD的驅(qū)動代碼如下

#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); // 根據(jù)設(shè)定參數(shù)初始化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串行發(fā)送一個字節(jié)
 *  @since      v1.0
 *  @param  byte   寫入字節(jié)
 *  @author     Z小旋
 */
void SendByte(u8 byte)
{
	u8 i;
	for (i = 0; i < 8; i++)
	{
		if ((byte << i) & 0x80) // 0x80(1000 0000)  只會保留最高位
		{
			SID = 1; // 引腳輸出高電平,代表發(fā)送1
		}
		else
		{
			SID = 0; // 引腳輸出低電平,代表發(fā)送0
		}
		/*或
			SID =	(Dbyte << i) & 0x80;

			上面那樣為了方便理解
		*/
		SCLK = 0;	 // 時鐘線置低  允許SID變化
		delay_us(5); // 延時使數(shù)據(jù)寫入
		SCLK = 1;	 // 拉高時鐘,讓從機讀SID
	}
}

/*!
 *  @brief      LCD寫指令
 *  @since      v1.0
 *  @param  Cmd   要寫入的指令
 *  @author     Z小旋
 */
void Lcd_WriteCmd(u8 Cmd)
{
	delay_ms(1);		  // 由于我們沒有寫LCD正忙的檢測,所以直接延時1ms,使每次寫入數(shù)據(jù)或指令間隔大于1ms 便可不用寫忙狀態(tài)檢測
	SendByte(WRITE_CMD);  // 11111,RW(0),RS(0),0
	SendByte(0xf0 & Cmd); // 高四位
	SendByte(Cmd << 4);	  // 低四位(先執(zhí)行<<)
}

/*!
 *  @brief      LCD寫數(shù)據(jù)
 *  @since      v1.0
 *  @param  Dat   要寫入的數(shù)據(jù)
 *  @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);	  // 低四位(先執(zhí)行<<)
}
/*!
 *  @brief      LCD初始化
 *  @since      v1.0
 *  @param  None
 *  @author     Z小旋
 */
void Lcd_Init(void)
{
	delay_ms(50);		// 等待液晶自檢(延時>40ms)
	Lcd_WriteCmd(0x30); // 功能設(shè)定:選擇基本指令集
	delay_ms(1);		// 延時>100us
	Lcd_WriteCmd(0x30); // 功能設(shè)定:選擇8bit數(shù)據(jù)流
	delay_ms(1);		// 延時>37us
	Lcd_WriteCmd(0x0c); // 開顯示
	delay_ms(1);		// 延時>100us
	Lcd_WriteCmd(0x01); // 清除顯示,并且設(shè)定地址指針為00H
	delay_ms(30);		// 延時>10ms
	Lcd_WriteCmd(0x06); // 進入設(shè)定點,初始化完成
}

/*!
 *  @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); // 寫數(shù)據(jù)
		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);		// 關(guān)閉圖形顯示
	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++);		// 寫高位字節(jié)數(shù)據(jù) D15-D8
				Lcd_WriteData(*img++);		// 寫低位字節(jié)數(shù)據(jù) D7-D0
			}
		}
	}
	Lcd_WriteCmd(0x36); // 打開圖形顯示
	Lcd_WriteCmd(0x30); // 切換回基本指令
}
/*!
 *  @brief      清屏函數(shù)
 *  @since      v1.0
 *  @param  None
 *  @author     Z小旋
 */
void LCD_Clear(void)
{
	Lcd_WriteCmd(0x01); // 清屏指令
	delay_ms(2);		// 延時以待液晶穩(wěn)定【至少1.6ms】
}

?LCD.h

#ifndef __lcd12864_H_
#define __lcd12864_H_

#include "sys.h"

#define WRITE_CMD 0xF8 // 寫命令
#define WRITE_DAT 0xFA // 寫數(shù)據(jù)

// 接口(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, "清時明月漢時關(guān)");
        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


完整代碼請關(guān)注衛(wèi)星公眾號進行獲取和咨詢


聯(lián)系方式 微信號:13648103287

  • 聯(lián)系方式.docx

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
ADAU1452WBCPZ 1 Analog Devices Inc SigmaDSP Digital Audio Processor
$26.54 查看
TDA8547TS/N1,112 1 NXP Semiconductors TDA8547TS - 2 × 0.7 W BTL audio amplifier with output channel switching SSOP2 20-Pin

ECAD模型

下載ECAD模型
$2.51 查看
THS3201DBVR 1 Texas Instruments 1.8GHz Current Feedback Amplifier 5-SOT-23 -40 to 85
暫無數(shù)據(jù) 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

方案定制,程序設(shè)計方案、單片機程序設(shè)計與講解、APP定制開發(fā)。本公眾號致力于向讀者傳遞關(guān)于程序設(shè)計和開發(fā)的相關(guān)知識,并分享一些關(guān)于軟件開發(fā)的最佳實踐。如果您有什么問題或建議,請隨時聯(lián)系我們。我們將竭誠為您服務