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

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

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

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

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

虛擬商品不可退

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

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

一、模塊介紹

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

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

LCD12864 顯示模塊具有以下特點(diǎn):

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

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


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

????

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

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

一、連線

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

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

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

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

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

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

7. 時(shí)鐘信號(hào)(CLK)連接到Arduino的

下圖是STM32f103F103C8T6

LCD.c

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

#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端口時(shí)鐘

	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ā)送一個(gè)字節(jié)
 *  @since      v1.0
 *  @param  byte   寫(xiě)入字節(jié)
 *  @author     Z小旋
 */
void SendByte(u8 byte)
{
	u8 i;
	for (i = 0; i < 8; i++)
	{
		if ((byte << i) & 0x80) // 0x80(1000 0000)  只會(huì)保留最高位
		{
			SID = 1; // 引腳輸出高電平,代表發(fā)送1
		}
		else
		{
			SID = 0; // 引腳輸出低電平,代表發(fā)送0
		}
		/*或
			SID =	(Dbyte << i) & 0x80;

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

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

/*!
 *  @brief      LCD寫(xiě)數(shù)據(jù)
 *  @since      v1.0
 *  @param  Dat   要寫(xiě)入的數(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);		// 等待液晶自檢(延時(shí)>40ms)
	Lcd_WriteCmd(0x30); // 功能設(shè)定:選擇基本指令集
	delay_ms(1);		// 延時(shí)>100us
	Lcd_WriteCmd(0x30); // 功能設(shè)定:選擇8bit數(shù)據(jù)流
	delay_ms(1);		// 延時(shí)>37us
	Lcd_WriteCmd(0x0c); // 開(kāi)顯示
	delay_ms(1);		// 延時(shí)>100us
	Lcd_WriteCmd(0x01); // 清除顯示,并且設(shè)定地址指針為00H
	delay_ms(30);		// 延時(shí)>10ms
	Lcd_WriteCmd(0x06); // 進(jìn)入設(shè)定點(diǎn),初始化完成
}

/*!
 *  @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]); // 寫(xiě)初始光標(biāo)位置
	while (*str > 0)
	{
		Lcd_WriteData(*str); // 寫(xiě)數(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);		// 切換到擴(kuò)充指令
	Lcd_WriteCmd(0x34);		// 關(guān)閉圖形顯示
	for (i = 0; i < 1; i++) // 上下屏寫(xiě)入
	{
		for (y = 0; y < 32; y++) // 垂直Y寫(xiě)32次
		{
			for (x = 0; x < 8; x++) // 橫向X寫(xiě)8次
			{
				Lcd_WriteCmd(0x80 + y);		// 行地址
				Lcd_WriteCmd(0x80 + x + i); // 列地址
				Lcd_WriteData(*img++);		// 寫(xiě)高位字節(jié)數(shù)據(jù) D15-D8
				Lcd_WriteData(*img++);		// 寫(xiě)低位字節(jié)數(shù)據(jù) D7-D0
			}
		}
	}
	Lcd_WriteCmd(0x36); // 打開(kāi)圖形顯示
	Lcd_WriteCmd(0x30); // 切換回基本指令
}
/*!
 *  @brief      清屏函數(shù)
 *  @since      v1.0
 *  @param  None
 *  @author     Z小旋
 */
void LCD_Clear(void)
{
	Lcd_WriteCmd(0x01); // 清屏指令
	delay_ms(2);		// 延時(shí)以待液晶穩(wěn)定【至少1.6ms】
}

?LCD.h

#ifndef __lcd12864_H_
#define __lcd12864_H_

#include "sys.h"

#define WRITE_CMD 0xF8 // 寫(xiě)命令
#define WRITE_DAT 0xFA // 寫(xiě)數(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自帶字庫(kù),可以直接使用

#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, "清時(shí)明月漢時(shí)關(guān)");
        LCD_Display_Words(1, 0, "萬(wàn)里長(zhǎng)征人未還");
        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


完整代碼請(qǐng)關(guān)注衛(wèi)星公眾號(hào)進(jìn)行獲取和咨詢(xún)


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

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
LM3886T/NOPB 1 Texas Instruments 68W, 1 Ch, 20-94V supply stereo Class-AB amplifier w/ Mute 11-TO-220 0 to 70

ECAD模型

下載ECAD模型
$7.64 查看
TPA3116D2DADR 1 Texas Instruments 50-W stereo, 100-W mono, 4.5- to 26-V supply, analog input Class-D audio amplifier w/ SpeakerGuard&trade; 32-HTSSOP -40 to 85

ECAD模型

下載ECAD模型
$3.7 查看
TFA9879HN/N1,118 1 NXP Semiconductors TFA9879 - Mono BTL Class D audio amplifier for portable applications with digital input QFN 24-Pin

ECAD模型

下載ECAD模型
$2.98 查看

相關(guān)推薦

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

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