主頁 >  其他 > 液晶屏 LCD12864 / LCD12232 串行 / 并行介面驅動

液晶屏 LCD12864 / LCD12232 串行 / 并行介面驅動

2021-02-06 11:31:34 其他

液晶屏 LCD12864 / LCD12232 串行 / 并行介面驅動

  • 一、LCD12864 / LCD12232
    • 1、LCD12864
    • 2、LCD12232
    • 3、接線圖
  • 二、ST7920
    • 1、介面時序
      • ①、并口時序圖
      • ②、串口時序圖
    • 2、用戶指令集
      • ①、基本指令集(RE = 0)
      • ②、擴展指令集(RE = 1)
      • ③、具體指令介紹
        • 1、清除顯示
        • 2、位址歸位
        • 3、進入設定點
        • 4、顯示狀態開 / 關
        • 5、游標或顯示移位控制
        • 6、功能設定
        • 7、設定 CGRAM 位址
        • 8、設定 DDRAM 位址
        • 9、讀取忙碌狀態(BF)和位址
        • 10、寫資料到 RAM
        • 11、讀出 RAM 的值
        • 12、 待命模式
        • 13、卷動位址或 IRAM 位址選擇
        • 14、反白選擇
        • 15、睡眠模式
        • 16、擴充功能設定
        • 17、設定 IRAM 位址或卷動位址
        • 18、設定繪圖 RAM 位址
  • 三、示例程式
    • 1、LCD12864并行介面
    • 2、LCD12864串行介面
    • 3、LCD12232并行介面
    • 4、LCD12232串行介面



一、LCD12864 / LCD12232

1、LCD12864

LCD12864 帶中文字庫圖形點陣式液晶顯示幕,可配合各種單片機可完成中文漢字、英文字符和圖形顯示,可構成全中文人機互動圖形界面,模塊具有功耗低、顯示內容豐富等特點而應用廣泛,它是利用液晶經過處理后能改變光線的傳播方向,以電流刺激液晶分子產生點、線、面并配合背光燈構成畫面,其顯示解析度為 128 × 64, 內置 2M 位中文字型 ROM(CGROM)8192 個(16 * 16 點陣)漢字,和 16K 位半寬字型 ROM(HCGROM)128個(16 * 8 點陣)ASCII 字符集,可以顯示 8 × 4 行 16 × 16 點陣的漢字,ST7920 的字型產生 RAM(CGRAM)提供用戶自定義字符生成(造字)功能,可提供 4 組 16 * 16 點陣的空間,將要顯示的字符的編碼寫到顯示 RAM(DDRAM)上,硬體自動從 CGROM 中選擇將要顯示的字型顯示在螢屏上,繪圖 RAM 提供 64 * 32 個位元組的空間,最多可以控制 256 * 64 點陣的二維繪圖緩沖空間,具有 4 位 / 8 位并行(適配 M6800 時序)、2 線或 3 線串行多種介面方式,各種液晶廠家均有提供幾乎都是同樣規格的 LCD12864 模塊或兼容模塊,基本上也都采用了兼容的 IC,所以從特性上基本上是一樣的;當然,很多廠商提供了不同的字符顏色、背光色之類的顯示模塊,

我用的這塊 LCD12864 液晶屏是在優信電子上買的 12864T,帶字庫,如下圖,

關于這款 LCD12864 液晶屏的串并口選擇,默認出貨為串口,并口通用,1、在選擇串并口時可以通程序式選擇高低電平(PSB引腳)來完成,2、可以通過短接液晶屏背面 PCB 上面的絲印來選擇,S 短接為串口,P 點短接為并口,

在這里插入圖片描述
由于出貨時第三腳 V0 已經通過 JP2 跳點斷開,如需要通過外部可調電阻調節,將 JP2 跳點連接即可,

在這里插入圖片描述
引腳說明:
在這里插入圖片描述
外形尺寸說明:
在這里插入圖片描述

2、LCD12232

LCD12232 和 LCD12864 一樣,主控都是 ST7920(各種液晶廠家均有提供幾乎都是同樣規格的 LCD12232 模塊或兼容模塊,基本上也都采用了兼容的 IC,所以從特性上基本上是一樣的;當然,很多廠商提供了不同的字符顏色、背光色之類的顯示模塊),LCD12232 相當于是把 LCD12864 縱向截掉一半,同時橫向少了 6 個像素點,我使用的是 YB12232ZB 這款液晶屏,帶字庫,如下圖,

在這里插入圖片描述
在這里插入圖片描述
關于這款 LCD12232 液晶屏的串并口選擇,默認出貨為串口,并口通用,串 / 并口選擇必須通過短接液晶屏背面 PCB 上面絲印來選擇,S 短接為串口,P 點短接為并口,不能兩個同時短接!!!只能短接其中一個!!!

在這里插入圖片描述

串口引腳說明(短接 S):
在這里插入圖片描述
并口引腳說明(短接 P):
在這里插入圖片描述
外形尺寸說明
在這里插入圖片描述
控制流:
在這里插入圖片描述

3、接線圖

這里使用 STC15W408AS(SOP20)做主控 MCU,
可通過 JP1 和 JP2 選擇液晶屏的供電電壓,3.3V 或者 5V,
可通過 JP3 確定 PSB 引腳是通過單片機 IO 控制或者直接拉高(懸空默認拉高,即并行介面,僅 LCD12864 有效),
可通過 JP4 確定 RST 引腳是通過單片機 IO 控制或者直接拉高(低電平有效),
可通過單片機 IO 控制液晶屏背光開關,默認開背光(低電平關背光),
在這里插入圖片描述

在這里插入圖片描述

二、ST7920

1、介面時序

①、并口時序圖

寫時序圖:
在這里插入圖片描述
讀時序圖:
在這里插入圖片描述

②、串口時序圖

在這里插入圖片描述
串行資料傳送共分三個位元組完成:
第一位元組:串口控制格式: 11111ABC
A 為資料傳送方向控制:H 表示資料從 LCD 到 MCU,L 表示資料從 MCU 到 LCD
B 為資料型別選擇:H 表示資料是顯示資料,L 表示資料是控制指令
C 固定為 0
第二位元組:(并行)8 位資料的高 4 位—格式 DDDD0000
第三位元組:(并行)8 位資料的低 4 位—格式 0000DDDD

串行介面時序引數:(測驗條件:T=25℃ VDD=4.5V)
在這里插入圖片描述

2、用戶指令集

1、當模塊在接受指令前,MCU 必須先確認模塊內部處于非忙碌狀態,即讀取 BF 標志時 BF 需為 0,方可接受新的指令;如果在送出一個指令前并不檢查 BF 標志,那么在前一個指令和這個指令中間必須延遲一段較長的時間,即是等待前一個指令確實執行完成,指令執行的時間請參考指令表中的個別指令說明,

2、“RE”為基本指令集與擴充指令集的選擇控制位元,當變更“RE”位元后,往后的指令集將維持在最后的狀態,除非再次變更“RE”位元,否則使用相同指令集時,不需每次重設“RE”位元,

①、基本指令集(RE = 0)

在這里插入圖片描述

②、擴展指令集(RE = 1)

在這里插入圖片描述

③、具體指令介紹

1、清除顯示

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLLLH

功能:將 DDRAM 填滿 “20H”(空格)代碼,把 DDRAM 地址計數器(AC)調整為“00H”,更新設定進入設定點將 I / D 設為 1,游標右移 AC 加 1,

2、位址歸位

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLLHX

功能:把 DDRAM 位址計數器調整為“00H”,游標回原點,該功能不影響顯示 DDRAM

3、進入設定點

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLHI/DS

功能:指定在顯示資料的讀取與寫入時,設定游標的移動方向及指定顯示的移位,
I/D = 1,游標右移,DDRAM 地址計數器(AC)加 1,
I/D = 0,游標左移,DDRAM 地址計數器(AC)減 1,
S:顯示畫面整體位移

SI/D功能描述
HH畫面整體左移
HL畫面整體左移

4、顯示狀態開 / 關

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLHDCB

功能:
D = 1,整體顯示 ON,
C = 1,游標 ON,
B = 1,游標位置顯示反白 ON,將游標所在地址上的內容反白顯示,

5、游標或顯示移位控制

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLHS/CR/LXX

功能:設定游標的移動與顯示的移位控制位,這個指令并不改變 DDRAM 的內容

S/CR/L方向AC 的值
LL游標向左移動AC=AC-1
LH游標向右移動AC=AC+1
HL顯示向左移動,游標跟著移動AC=AC
HH顯示向右移動,游標跟著移動AC=AC

6、功能設定

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLHDLXREXX

功能:
DL = 1,8位介面控制位 ,DL = 0,4位介面控制位,
RE = 1,擴充指令集動作,
RE = 0,基本指令集動作,
同一指令的動作不能同時改變 DL 和 RE,需先改變 DL 再改變 RE 才確保設定正確,

7、設定 CGRAM 位址

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLHAC5AC4AC3AC2AC1AC0

功能:設定 CGRAM 地址到地址計數器(AC),AC 范圍為 00H - 3FH 需確認擴充指令中 SR = 0(卷動位置或 RAM 地址選擇),

8、設定 DDRAM 位址

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLHLAC5AC4AC3AC2AC1AC0

功能:設定 DDRAM 地址到地址計數器(AC)
第一行 AC 范圍:80H - 8FH
第二行 AC 范圍:90H - 9FH
ST7920 控制器的 128 * 64 點陣液晶其實原理上等同于 256 * 32 點陣,第三行對應的 DDRAM 地址緊接第一行,第四行對應的 DDRAM 地址緊接第二行,
在使用反白功能時,如果第一行反白,第三行必然反白,第二行反白,第四行必然反白,這是正常現象,

9、讀取忙碌狀態(BF)和位址

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
HLBFAC6AC5AC4AC3AC2AC1AC0

功能:讀取忙碌狀態(BF)可以確認內部動作是否完成,同時可以讀出位址計數器(AC)的值

10、寫資料到 RAM

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LHD7D6D5D4D3D2D1D0

功能:當顯示資料寫入后會使 AC 改變,每個 RAM (DDRAM / CGRAM / IRAM)地址都可以連續寫入 2 個位元組的顯示資料,當寫入第二個位元組時,地址計數器 AC 的值自動加一,

11、讀出 RAM 的值

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
HHD7D6D5D4D3D2D1D0

功能:讀取后會使 AC 改變
設定 RAM(DDRAM / CGRAM / IRAM)地址后,先要 Dummy read 一次才能讀取到正確的顯示資料,第二次讀取不需要 Dummy read,除非重新設定了 RAM 地址,

12、 待命模式

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLLLH

功能:進入待命模式,執行其他命令都可終止待命模式,該指令不改變 RAM 的內容,

13、卷動位址或 IRAM 位址選擇

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLLHSR

功能:SR=1,允許輸入垂直卷動位址,SR=0,允許輸入 IRAM 位址(擴充指令)及允許設定 CGRAM 地址(基本指令),

14、反白選擇

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLLHLR0

功能:選擇 2 行中的任一行作反白顯示,并可決定反白的與否,R0 初始值為 0,第一次執行時為反白顯示,再次執行時為正常顯示,

R0 = 0,第一行,R0 = 1,第二行,

ST7920 控制器的 128 * 64 點陣液晶其實原理上等同于 256 * 32 點陣,第三行對應的 DDRAM 地址緊接第一行,第四行對應的 DDRAM 地址緊接第二行,
在使用反白功能時,如果第一行反白,第三行必然反白,第二行反白,第四行必然反白,這是正常現象,

15、睡眠模式

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLLLHSLLL

功能:SL=1,脫離睡眠模式,SL=0,進入睡眠模式,

16、擴充功能設定

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLLHDLXREGX

功能:
DL = 1,8位介面控制位 ,DL = 0,4位介面控制位,
RE=1,擴充指令集動作,RE=0,基本指令集動作,
G=1,繪圖顯示 ON,G=0,繪圖顯示 OFF,

17、設定 IRAM 位址或卷動位址

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLLHAC5AC4AC3AC2AC1AC0

功能:SR=1,AC5-AC0 為垂直卷動地址,SR=0,AC3-AC0 寫 IRAM 地址,

18、設定繪圖 RAM 位址

RWRSDB7DB6DB5DB4DB3DB2DB1DB0
LLHLLLAC3AC2AC1AC0
LLHAC6AC5AC4AC3AC2AC1AC0

功能:設定 GDRAM 地址到地址計數器(AC),先設定垂直位置再設定水平位置(連續寫入 2 位元組資料來完成垂直與水平坐標的設定),
垂直地址范圍:AC6 - AC0
水平地址范圍:AC3 - AC0

三、示例程式

單片機晶振頻率或者 IRC 頻率 ≥ 20MHz 時,寫資料 / 指令時需要加一定時間(例如 5 毫秒)延時,某則液晶屏顯示會有雜點或者亂碼!!!

1、LCD12864并行介面

//-------------------------------------------------------------------------------
//創建日期: 2021.02.02
//軟體環境: Keil
//硬體環境: STC15W408AS
//IRC頻率:  11.0592MHz
//創建人: Calvin Chan
//-------------------------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>

#ifndef uchar
	#define uchar unsigned char
#endif
#ifndef uint
	#define uint  unsigned int
#endif

#define DATA_PORT	P1		//資料口

sbit RS = P3 ^ 5;
sbit RW = P3 ^ 6;
sbit EN = P3 ^ 7;

sbit PSB = P3 ^ 4;		//串并口選擇
sbit RST = P3 ^ 3;		//復位

sbit BK = P3 ^ 2;	//背光開關

unsigned char code images[] = { //128,64,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0xE7, 0xFF, 0xEF, 0xFF, 0xFF, 0xC0, 0x00,
	0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFB, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
	0x00, 0x03, 0xFF, 0xF7, 0xFF, 0xBE, 0x7F, 0xFB, 0xFF, 0xF3, 0xFB, 0xFF, 0xFF, 0xEF, 0x80, 0x00,
	0x00, 0x01, 0xFB, 0xF7, 0x8F, 0xF8, 0x7F, 0xF8, 0xFF, 0xF1, 0xFB, 0xC7, 0x87, 0xEF, 0x00, 0x00,
	0x00, 0x00, 0xFB, 0xF7, 0x0F, 0xF0, 0x7C, 0xF8, 0xF9, 0xF1, 0xFB, 0x87, 0x83, 0xEE, 0x00, 0x00,
	0x00, 0x00, 0xFF, 0xFF, 0x07, 0xF0, 0x7C, 0x78, 0xF9, 0xF0, 0xFF, 0x87, 0x83, 0xFE, 0x00, 0x00,
	0x00, 0x00, 0x7F, 0xFE, 0x03, 0xF8, 0x7C, 0x78, 0xF9, 0xF0, 0xFF, 0x07, 0x81, 0xFC, 0x00, 0x00,
	0x00, 0x00, 0x7F, 0xFE, 0x07, 0xF8, 0x7C, 0x78, 0xF9, 0xF0, 0x7F, 0x07, 0x81, 0xFC, 0x00, 0x00,
	0x00, 0x00, 0x3E, 0x7C, 0x0F, 0xFC, 0x7C, 0xF8, 0xF9, 0xF0, 0x7E, 0x07, 0xC0, 0xF8, 0x00, 0x00,
	0x00, 0x00, 0x3E, 0x7C, 0x3F, 0xFF, 0xFF, 0xFD, 0xFF, 0xF8, 0x3E, 0x1F, 0xF0, 0xF8, 0x00, 0x00,
	0x00, 0x00, 0x3C, 0x3C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3C, 0x1F, 0xF0, 0x70, 0x00, 0x00,
	0x00, 0x00, 0x1C, 0x38, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3C, 0x1F, 0xF0, 0xF0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

unsigned char code images2[] = { //64*32
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x01, 0xE0, 0xFF, 0xF0, 0xFF, 0x00,
	0x00, 0x3E, 0x01, 0xF0, 0xFF, 0xF3, 0xFF, 0x80, 0x00, 0x3E, 0x01, 0xF0, 0x79, 0xC3, 0xC7, 0xC0,
	0x00, 0x7F, 0x03, 0xF8, 0x7B, 0x87, 0x83, 0xC0, 0x00, 0x7F, 0x03, 0xF8, 0x7F, 0x07, 0x83, 0xE0,
	0x00, 0x7F, 0x87, 0xF8, 0x7F, 0x07, 0x81, 0xE0, 0x00, 0xFF, 0x87, 0xFC, 0x7F, 0x87, 0x81, 0xE0,
	0x00, 0xFF, 0x87, 0xFC, 0x7F, 0xC7, 0x83, 0xC0, 0x00, 0xE7, 0xCE, 0x3E, 0x7B, 0xE7, 0xC3, 0xC0,
	0x01, 0xE7, 0xEF, 0x3F, 0xFF, 0xF3, 0xE7, 0x80, 0x03, 0xFF, 0xFF, 0x7F, 0xFF, 0xF9, 0xFF, 0x00,
	0x03, 0xF7, 0xFF, 0x7F, 0xFF, 0xF8, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

//功能:忙檢測,在對液晶顯示控制器操作的每一條指令之前,需檢測液晶顯示幕是否空閑
void lcd_wait_idle(void)                  //控制器忙檢測子程式
{
	unsigned char i;
	DATA_PORT = 0xff;
	RS = 0;
	RW = 1;
	EN = 1;

	for(i = 0; i < 20; i++)             //
		if((DATA_PORT & 0x80) != 0x80)
			break;  //D7=0 空閑退出

	EN = 0;
}

//功能:從液晶顯示控制器讀資料
unsigned char lcd_rd(void)               //從液晶顯示控制器讀資料
{
	unsigned char d;
	lcd_wait_idle();                      //ST7920液晶顯示控制器忙檢測
	RS = 1;                          //RS=1 RW=1 E=高脈沖
	RW = 1;
	EN = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	d = DATA_PORT;
	EN = 0;
	return d;
}
//功能:向液晶顯示控制器寫資料
void lcd_wd(unsigned char d)             //向液晶顯示控制器寫資料
{
	lcd_wait_idle();                      //ST7920液晶顯示控制器忙檢測
	DATA_PORT = d;
	RS = 1;                          //RS=1 RW=0 E=高脈沖
	RW = 0;
	EN = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	EN = 0;
}
//功能:向液晶顯示控制器送指令
void lcd_wc(unsigned char c)             //向液晶顯示控制器送指令
{
	lcd_wait_idle();                      //ST7920液晶顯示控制器忙檢測
	DATA_PORT = c;
	RS = 0;                          //RS=0 RW=0 E=高脈沖
	RW = 0;
	EN = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	EN = 0;
}
//功能:開啟LCD顯示
void lcd_on(void)                        //LCD顯示開啟子程式
{
	lcd_wc(0x30);                        //設定為基本指令集
	lcd_wc(0x0c);
}
//功能:關閉LCD顯示
void lcd_off(void)                       //LCD顯示關閉子程式
{
	lcd_wc(0x30);                        //設定為基本指令集
	lcd_wc(0x08);
}
//功能:液晶顯示控制器初始化
void lcd_init(void)                     //液晶顯示控制器初始化子程式
{
	lcd_wc(0x33);                        //介面模式設定,8位,基本指令集
	Delay5ms();                         //延時3MS
	lcd_wc(0x30);                        //基本指令集,8位控制口
	Delay5ms();                         //延時3MS
	lcd_wc(0x30);                        //重復送基本指令集
	Delay5ms();                         //延時3MS
	lcd_wc(0x01);                        //清屏控制字
	Delay5ms();                         //延時3MS
	lcd_on();                            //開顯示
}
//功能:開啟繪圖區域顯示
void lcd_graph_on(void)                  //繪圖區域顯示開啟子程式
{
	lcd_wc(0x36);							//擴充指令集,8位,開繪圖
	lcd_wc(0x30);                        //恢復為基本指令集
}
//功能:關倍訓圖區域顯示
void lcd_graph_off(void)                  //繪圖區域顯示關閉子程式
{
	lcd_wc(0x34);							//擴充指令集,8位,關繪圖
	lcd_wc(0x30);                        //恢復為基本指令集
}
//功能:整屏顯示 c 代表的ASCII字符
void char_lcd_fill(unsigned char c) 
{
	unsigned char i;

	if(c > 128) {
		return;
	}

	lcd_wc(0x80);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x90);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x88);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x98);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}
}
//功能:寫字庫自帶的漢字、字符
//字庫自帶的漢字為 16 * 16, 字符為 8 * 16
//引數: x 橫坐標 0-7
//		y 縱坐標  1-4
//		datas 需要寫入的資料
void lcd_write_font(unsigned char x, unsigned char y, unsigned char *datas)
{
	if(y > 4) {
		return;
	}

	if(x > 7) {
		return;
	}

	switch(y) { //定位第幾行第幾列開始寫漢字
		case 1 :
			lcd_wc(0x80 + x);
			break;

		case 2 :
			lcd_wc(0x90 + x);
			break;

		case 3 :
			lcd_wc(0x88 + x);
			break;

		case 4 :
			lcd_wc(0x98 + x);
			break;
	}

	while(*datas != '\0') {
		lcd_wd(*datas++);//寫入漢字
	}
}

//功能:設定(GXPOS,GYPOS)對應繪圖區域內部RAM指標
void g_lcd_pos(unsigned char GXPOS, unsigned char GYPOS) 
{
	lcd_wc(0x36);                        //擴展指令集,8位,開繪圖

	if(GYPOS >= 32) {
		lcd_wc((GYPOS - 32) + 0x80);	//下半屏,先送Y地址
		lcd_wc((GXPOS / 16) + 0x88);	//下半屏,再送X地址

	} else {
		lcd_wc(GYPOS + 0x80);		//上半屏
		lcd_wc((GXPOS / 16) + 0x80);	//上半屏
	}

	lcd_wc(0x30);                        //恢復為基本指令集
}

//功能:清除繪圖區域
void g_lcd_fill()
{
	unsigned char i, j;

	for(i = 0; i < 64; i++) {
		g_lcd_pos(0, i);

		for(j = 0; j < 16; j++) {
			lcd_wd(0x00);
		}
	}
}

//功能:在(GXPOS,GYPOS)位置繪制XSIZE列及YISZE行點陣的圖形*S(XSIZE僅取8的倍數,GXPOS僅取16的倍數)
void put_size_image(unsigned char GXPOS, unsigned char GYPOS, unsigned char XSIZE, unsigned char YSIZE, unsigned char code *s)
{
	unsigned char lx, ly;

	for(ly = 0; ly < YSIZE; ly++) {
		g_lcd_pos(GXPOS, GYPOS);	//設定地址

		for(lx = 0; lx < XSIZE; lx += 8) {
			lcd_wd(*s);
			s++;
		}

		GYPOS++;	//換行
	}
}

void main()
{
	BK = 1;

	Delay500ms();//等待上電穩定
	lcd_init();

	PSB = 1;		//并口

	while(1) {
		lcd_graph_on();		//開啟圖形
		g_lcd_fill();		//圖形區域清零
		put_size_image(0, 0, 128, 64, images);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		g_lcd_fill();
		put_size_image(0, 32, 64, 32, images2);
		put_size_image(64, 32, 64, 32, images2);
		put_size_image(0, 0, 64, 32, images2);
		put_size_image(64, 0, 64, 32, images2);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		g_lcd_fill();
		lcd_graph_off();	//關閉圖形
		lcd_write_font(0, 1, "中國牛批!!!!");
		lcd_write_font(0, 2, "中國牛批!!!!");
		lcd_write_font(0, 3, "中國牛批!!!!");
		lcd_write_font(0, 4, "中國牛批!!!!");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');		//清除文字區域
	}
}

2、LCD12864串行介面

//-------------------------------------------------------------------------------
//創建日期: 2021.02.02
//軟體環境: Keil
//硬體環境: STC15W408AS
//IRC頻率:  11.0592MHz
//創建人: Calvin Chan
//-------------------------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>

#ifndef uchar
	#define uchar unsigned char
#endif
#ifndef uint
	#define uint  unsigned int
#endif

#define DATA_PORT	P1		//資料口

sbit CS   = P3 ^ 5;
sbit STD  = P3 ^ 6;
sbit SCLK = P3 ^ 7;

sbit PSB = P3 ^ 4;		//串并口選擇
sbit RST = P3 ^ 3;		//復位

sbit BK = P3 ^ 2;	//背光開關

unsigned char code images[] = { //128,64,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xCE, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x18, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0xE7, 0xFF, 0xEF, 0xFF, 0xFF, 0xC0, 0x00,
	0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFB, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
	0x00, 0x03, 0xFF, 0xF7, 0xFF, 0xBE, 0x7F, 0xFB, 0xFF, 0xF3, 0xFB, 0xFF, 0xFF, 0xEF, 0x80, 0x00,
	0x00, 0x01, 0xFB, 0xF7, 0x8F, 0xF8, 0x7F, 0xF8, 0xFF, 0xF1, 0xFB, 0xC7, 0x87, 0xEF, 0x00, 0x00,
	0x00, 0x00, 0xFB, 0xF7, 0x0F, 0xF0, 0x7C, 0xF8, 0xF9, 0xF1, 0xFB, 0x87, 0x83, 0xEE, 0x00, 0x00,
	0x00, 0x00, 0xFF, 0xFF, 0x07, 0xF0, 0x7C, 0x78, 0xF9, 0xF0, 0xFF, 0x87, 0x83, 0xFE, 0x00, 0x00,
	0x00, 0x00, 0x7F, 0xFE, 0x03, 0xF8, 0x7C, 0x78, 0xF9, 0xF0, 0xFF, 0x07, 0x81, 0xFC, 0x00, 0x00,
	0x00, 0x00, 0x7F, 0xFE, 0x07, 0xF8, 0x7C, 0x78, 0xF9, 0xF0, 0x7F, 0x07, 0x81, 0xFC, 0x00, 0x00,
	0x00, 0x00, 0x3E, 0x7C, 0x0F, 0xFC, 0x7C, 0xF8, 0xF9, 0xF0, 0x7E, 0x07, 0xC0, 0xF8, 0x00, 0x00,
	0x00, 0x00, 0x3E, 0x7C, 0x3F, 0xFF, 0xFF, 0xFD, 0xFF, 0xF8, 0x3E, 0x1F, 0xF0, 0xF8, 0x00, 0x00,
	0x00, 0x00, 0x3C, 0x3C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3C, 0x1F, 0xF0, 0x70, 0x00, 0x00,
	0x00, 0x00, 0x1C, 0x38, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3C, 0x1F, 0xF0, 0xF0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

unsigned char code images2[] = { //64*32
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x01, 0xE0, 0xFF, 0xF0, 0xFF, 0x00,
	0x00, 0x3E, 0x01, 0xF0, 0xFF, 0xF3, 0xFF, 0x80, 0x00, 0x3E, 0x01, 0xF0, 0x79, 0xC3, 0xC7, 0xC0,
	0x00, 0x7F, 0x03, 0xF8, 0x7B, 0x87, 0x83, 0xC0, 0x00, 0x7F, 0x03, 0xF8, 0x7F, 0x07, 0x83, 0xE0,
	0x00, 0x7F, 0x87, 0xF8, 0x7F, 0x07, 0x81, 0xE0, 0x00, 0xFF, 0x87, 0xFC, 0x7F, 0x87, 0x81, 0xE0,
	0x00, 0xFF, 0x87, 0xFC, 0x7F, 0xC7, 0x83, 0xC0, 0x00, 0xE7, 0xCE, 0x3E, 0x7B, 0xE7, 0xC3, 0xC0,
	0x01, 0xE7, 0xEF, 0x3F, 0xFF, 0xF3, 0xE7, 0x80, 0x03, 0xFF, 0xFF, 0x7F, 0xFF, 0xF9, 0xFF, 0x00,
	0x03, 0xF7, 0xFF, 0x7F, 0xFF, 0xF8, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

//功能:送1位資料到液晶顯示控制器
void trans_bit(bit d)
{
	STD = d;                          //先送資料到資料口線DI
	_nop_();
	SCLK = 1;                         //再使時鐘口線發一個負脈沖
	_nop_();
	SCLK = 0;
	_nop_();
	SCLK = 1;
}
//功能:送1位元組資料到液晶顯示控制器
void trans_byte(unsigned char d)
{
	unsigned char i;

	for(i = 0; i < 8; i++) {
		if((d & 0x80) == 0x80)
			trans_bit(1);
		else
			trans_bit(0);

		d <<= 1;         //從高到低位送位元組位資料到液晶顯示控制器
	}
}
//功能:向液晶顯示控制器寫圖形資料
void lcd_wd(unsigned char d) 
{
	CS = 1;                           //片選使能
	trans_byte(0xFA);                     //SYNCODE=0F8H,RW=0,RS=1,D0=0
	trans_byte(d & 0xF0);                 //送高四位資料,低四位補零
	trans_byte((d & 0x0F) << 4);          //送低四位資料
	CS = 0;                           //片選禁止
}
//功能:向液晶顯示控制器送指令
void lcd_wc(unsigned char c)             //向液晶顯示控制器送指令
{
	CS = 1;                           //片選使能
	trans_byte(0xF8);                     //SYNCODE=0F8H,RW=0,RS=0,D0=0
	trans_byte(c & 0xF0);                 //送高四位資料,低四位補零
	trans_byte((c & 0x0F) << 4);          //送低四位資料
	CS = 0;                           //片選禁止
}
//功能:開啟LCD顯示
void lcd_on(void)                        //LCD顯示開啟子程式
{
	lcd_wc(0x30);                        //設定為基本指令集
	lcd_wc(0x0c);
}
//功能:關閉LCD顯示
void lcd_off(void)                       //LCD顯示關閉子程式
{
	lcd_wc(0x30);                        //設定為基本指令集
	lcd_wc(0x08);
}
//功能:液晶顯示控制器初始化
void lcd_init(void)                     //液晶顯示控制器初始化子程式
{
	lcd_wc(0x33);                        //介面模式設定,8位,基本指令集
	Delay5ms();                         //延時3MS
	lcd_wc(0x30);                        //基本指令集,8位控制口
	Delay5ms();                         //延時3MS
	lcd_wc(0x30);                        //重復送基本指令集
	Delay5ms();                         //延時3MS
	lcd_wc(0x01);                        //清屏控制字
	Delay5ms();                         //延時3MS
	lcd_on();                            //開顯示
}
//功能:開啟繪圖區域顯示
void lcd_graph_on(void)                  //繪圖區域顯示開啟子程式
{
	lcd_wc(0x36);							//擴充指令集,8位,開繪圖
	lcd_wc(0x30);                        //恢復為基本指令集
}
//功能:關倍訓圖區域顯示
void lcd_graph_off(void)                  //繪圖區域顯示關閉子程式
{
	lcd_wc(0x34);							//擴充指令集,8位,關繪圖
	lcd_wc(0x30);                        //恢復為基本指令集
}
//功能:整屏顯示 c 代表的ASCII字符
void char_lcd_fill(unsigned char c) 
{
	unsigned char i;

	if(c > 128) {
		return;
	}

	lcd_wc(0x80);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x90);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x88);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}

	lcd_wc(0x98);

	for(i = 0; i < 16; i++) {
		lcd_wd(c);
	}
}
//功能:寫字庫自帶的漢字、字符
//字庫自帶的漢字為 16 * 16, 字符為 8 * 16
//引數: x 橫坐標 0-7
//		y 縱坐標  1-4
//		datas 需要寫入的資料
void lcd_write_font(unsigned char x, unsigned char y, unsigned char *datas)
{
	if(y > 4) {
		return;
	}

	if(x > 7) {
		return;
	}

	switch(y) { //定位第幾行第幾列開始寫漢字
		case 1 :
			lcd_wc(0x80 + x);
			break;

		case 2 :
			lcd_wc(0x90 + x);
			break;

		case 3 :
			lcd_wc(0x88 + x);
			break;

		case 4 :
			lcd_wc(0x98 + x);
			break;
	}

	while(*datas != '\0') {
		lcd_wd(*datas++);//寫入漢字
	}
}

//功能:設定(GXPOS,GYPOS)對應繪圖區域內部RAM指標
void g_lcd_pos(unsigned char GXPOS, unsigned char GYPOS) 
{
	lcd_wc(0x36);                        //擴展指令集,8位,開繪圖

	if(GYPOS >= 32) {
		lcd_wc((GYPOS - 32) + 0x80);	//下半屏,先送Y地址
		lcd_wc((GXPOS / 16) + 0x88);	//下半屏,再送X地址

	} else {
		lcd_wc(GYPOS + 0x80);		//上半屏
		lcd_wc((GXPOS / 16) + 0x80);	//上半屏
	}

	lcd_wc(0x30);                        //恢復為基本指令集
}

//功能:清除繪圖區域
void g_lcd_fill()
{
	unsigned char i, j;

	for(i = 0; i < 64; i++) {
		g_lcd_pos(0, i);

		for(j = 0; j < 16; j++) {
			lcd_wd(0x00);
		}
	}
}

//功能:在(GXPOS,GYPOS)位置繪制XSIZE列及YISZE行點陣的圖形*S(XSIZE僅取8的倍數,GXPOS僅取16的倍數)
void put_size_image(unsigned char GXPOS, unsigned char GYPOS, unsigned char XSIZE, unsigned char YSIZE, unsigned char code *s)
{
	unsigned char lx, ly;

	for(ly = 0; ly < YSIZE; ly++) {
		g_lcd_pos(GXPOS, GYPOS);	//設定地址

		for(lx = 0; lx < XSIZE; lx += 8) {
			lcd_wd(*s);
			s++;
		}

		GYPOS++;	//換行
	}
}

void main()
{
	BK = 1;				//開背光

	Delay500ms();//等待上電穩定
	
	DATA_PORT = 0x00;
	PSB = 0;			//串口
	
	lcd_init();
	
	char_lcd_fill('A');
	Delay500ms();
	Delay500ms();
	Delay500ms();
	Delay500ms();
	char_lcd_fill(' ');

	while(1) {
		lcd_graph_on();		//開啟圖形
		g_lcd_fill();		//圖形區域清零
		put_size_image(0, 0, 128, 64, images);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		g_lcd_fill();
		put_size_image(0, 32, 64, 32, images2);
		put_size_image(64, 32, 64, 32, images2);
		put_size_image(0, 0, 64, 32, images2);
		put_size_image(64, 0, 64, 32, images2);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		g_lcd_fill();
		lcd_graph_off();	//關閉圖形
		lcd_write_font(0, 1, "我真的很愛中國!");
		lcd_write_font(0, 2, "我真的很愛中國!");
		lcd_write_font(0, 3, "我真的很愛中國!");
		lcd_write_font(0, 4, "我真的很愛中國!");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');
	}
}

3、LCD12232并行介面

//-------------------------------------------------------------------------------
//創建日期: 2021.02.02
//軟體環境: Keil
//硬體環境: STC15W408AS		
//IRC頻率:  11.0592MHz
//創建人: Calvin Chan
//-------------------------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>

#ifndef uchar
	#define uchar unsigned char
#endif
#ifndef uint
	#define uint  unsigned int
#endif

#define DATA_PORT	P1

#define WRITE_CMD	1	//寫命令
#define WRITE_DATA	0	//寫資料

sbit RS = P3 ^ 5;
sbit RW = P3 ^ 6;
sbit EN = P3 ^ 7;

sbit RST = P3 ^ 3;	//復位

sbit BK = P3 ^ 2;	//背光開關

unsigned char code images[] = { //122*32
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xE0, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x1E, 0x1C, 0x3F, 0x83, 0x9F, 0xF8, 0x7F, 0xE3, 0x81, 0xFF, 0xFC, 0x0E, 0x00, 0x00, 0x00,
	0x00, 0x1E, 0x3C, 0x3F, 0xC7, 0x9F, 0xFC, 0x7F, 0xF3, 0xC1, 0xFF, 0xFC, 0x1E, 0x00, 0x00, 0x00,
	0x00, 0x0E, 0x3E, 0x3B, 0xEF, 0x1F, 0xFC, 0x7F, 0xF3, 0xC1, 0xDF, 0xDC, 0x1E, 0x00, 0x00, 0x00,
	0x00, 0x0E, 0x3E, 0x39, 0xEF, 0x1E, 0x1C, 0x78, 0x79, 0xC3, 0xC7, 0x1E, 0x1C, 0x00, 0x00, 0x00,
	0x00, 0x0F, 0x3E, 0x78, 0xFE, 0x1C, 0x1C, 0x78, 0x79, 0xE3, 0x87, 0x1E, 0x3C, 0x00, 0x00, 0x00,
	0x00, 0x0F, 0x7F, 0x70, 0xFC, 0x1C, 0x1C, 0x70, 0x79, 0xE7, 0x87, 0x0F, 0x38, 0x00, 0x00, 0x00,
	0x00, 0x07, 0x77, 0x70, 0x7C, 0x1C, 0x1C, 0x70, 0x78, 0xE7, 0x87, 0x0F, 0x78, 0x00, 0x00, 0x00,
	0x00, 0x07, 0x77, 0xF0, 0x7C, 0x1C, 0x1C, 0x70, 0x78, 0xF7, 0x07, 0x07, 0x78, 0x00, 0x00, 0x00,
	0x00, 0x07, 0xF7, 0xE0, 0xFE, 0x1C, 0x1C, 0x70, 0x78, 0x7F, 0x07, 0x07, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE1, 0xFF, 0x1C, 0x1C, 0x70, 0x78, 0x7F, 0x07, 0x07, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE1, 0xEF, 0x1C, 0x1C, 0x70, 0x78, 0x7E, 0x07, 0x03, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE3, 0xC7, 0x9C, 0x1C, 0x70, 0x78, 0x3E, 0x07, 0x03, 0xE0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xC3, 0xC7, 0x87, 0x9C, 0x1C, 0x70, 0x78, 0x3C, 0x07, 0x01, 0xE0, 0x00, 0x00, 0x00,
	0x00, 0x01, 0xC1, 0xC7, 0x83, 0x9C, 0x1C, 0x70, 0x38, 0x3C, 0x07, 0x03, 0xC0, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

//檢測LCD是否忙
void lcd_wait(void)
{
	uchar i;
	DATA_PORT = 0xFF;
	RS = 0;
	RW = 1;
	EN = 1;

	for(i = 0; i < 20; i++)             //
		if((DATA_PORT & 0x80) != 0x80)
			break;  //D7=0 空閑退出

	EN = 0;
}
//寫資料/命令
void lcd_write(uchar opra, uchar datas)
{
	lcd_wait();
	DATA_PORT = datas;

	if(opra == 1) {	//寫命令
		RS = 0;
	} else {		//寫資料
		RS = 1;
	}

	RW = 0;
	EN = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	EN = 0;
}
//從LCD讀取資料
uchar lcd_read_data(void)
{
	uchar datas;
	lcd_wait();
	RS = 0;
	RW = 1;
	EN = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	datas = DATA_PORT;
	EN = 0;
	return datas;
}

//開啟LCD顯示
void lcdon(void)
{
	lcd_write(WRITE_CMD, 0x30);                        //設定為基本指令集
	lcd_write(WRITE_CMD, 0x0c);
}
//關閉LCD顯示
void lcdoff(void)                       //LCD顯示關閉子程式
{
	lcd_write(WRITE_CMD, 0x30);                        //設定為基本指令集
	lcd_write(WRITE_CMD, 0x08);
}

//LCD初始化
void lcd_init(void)
{
	lcd_write(WRITE_CMD, 0x33);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x30);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x30);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x0C);		//開顯示,關游標,關游標位置反白
	Delay5ms();
	lcd_write(WRITE_CMD, 0x01);		//清屏
	Delay5ms();
	lcdon();
}

//字符操作區域
//12232ZB字符區域定義為:
//XPOS(0-15) 對應于第1列到第16列位置,每個字符列位置實際占位8點,總計對應128點
//由于顯示只有122點,所以最后的6點不能顯示出來.
//YPOS(0-1)對應于第1行到第2行,每個行位置實際占位16點,總計對應32點
void lcd_write_ddram(uchar x, uchar y, uchar *datas)
{
	if(x > 15) {
		return;
	}

	if(y > 1) {
		return;
	}

	if(y == 0) {
		lcd_write(WRITE_CMD, 0x80 + x);
	} else {
		lcd_write(WRITE_CMD, 0x90 + x);
	}

	while(*datas != '\0') {
		lcd_write(WRITE_DATA, *datas++);
	}

}

//功能:整屏顯示 c 代表的ASCII字符
void char_lcd_fill(unsigned char c) 
{
	uchar x, y;

	for(y = 0; y < 2; y++) {
		if(y == 0) {
			lcd_write(WRITE_CMD, 0x80);
		} else {
			lcd_write(WRITE_CMD, 0x90);
		}

		for(x = 0; x < 15; x++) {
			lcd_write(WRITE_DATA, c);
		}
	}
}

//功能:開啟繪圖區域顯示
void lcd_graph_on(void)
{
	lcd_write(WRITE_CMD, 0x36);							//擴充指令集,8位,開繪圖
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}
//功能:關倍訓圖區域顯示
void lcd_graph_off(void)                  //繪圖區域顯示關閉子程式
{
	lcd_write(WRITE_CMD, 0x34);							//擴充指令集,8位,關繪圖
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}

//功能:設定(GXPOS,GYPOS)對應繪圖區域內部RAM指標
void g_lcd_pos(unsigned char GXPOS, unsigned char GYPOS) 
{
	lcd_write(WRITE_CMD, 0x36);                       //擴展指令集,8位,開繪圖
	lcd_write(WRITE_CMD, (GYPOS + 0x80));		//Y
	lcd_write(WRITE_CMD, ((GXPOS / 16) | 0x80));//X
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}

//功能:清除圖形區域
void g_lcd_fill()
{
	unsigned char i, j;

	for(i = 0; i < 32; i++) {
		g_lcd_pos(0, i);

		for(j = 0; j < 16; j++) {
			lcd_write(WRITE_DATA, 0x00);
		}
	}
}

//功能:在(GXPOS,GYPOS)位置繪制XSIZE列及YISZE行點陣的圖形*S(XSIZE僅取8的倍數,GXPOS僅取16的倍數)
void put_size_image(unsigned char GXPOS, unsigned char GYPOS, unsigned char XSIZE, unsigned char YSIZE, unsigned char code *s)
{
	unsigned char lx, ly;

	for(ly = 0; ly < YSIZE; ly++) {
		g_lcd_pos(GXPOS, GYPOS);	//設定地址

		for(lx = 0; lx < XSIZE; lx += 8) {
			lcd_write(WRITE_DATA, *s);
			s++;
		}

		GYPOS++;	//換行
	}
}
void main()
{
	BK = 1;

	Delay500ms();//等待上電穩定
	lcd_init();
	
	while(1) {
		lcd_write_ddram(0, 0, "我愛中國真的愛 ");
		lcd_write_ddram(0, 1, "我愛中國真的愛 ");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');
		lcd_write_ddram(0, 0, "ABCDEFGHIJKLMO");
		lcd_write_ddram(0, 1, "PQRSTUVWXYZabc");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');
		lcd_graph_on();
		g_lcd_fill();
		put_size_image(0, 0, 122, 32, images);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		lcd_graph_off();
	}
}

4、LCD12232串行介面

//-------------------------------------------------------------------------------
//創建日期: 2021.02.02
//軟體環境: Keil
//硬體環境: STC15W408AS		
//IRC頻率:  11.0592MHz
//創建人: Calvin Chan
//-------------------------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>

#ifndef uchar
	#define uchar unsigned char
#endif
#ifndef uint
	#define uint  unsigned int
#endif

#define DATA_PORT	P1

#define WRITE_CMD	1	//寫命令
#define WRITE_DATA	0	//寫資料

sbit CS   = P3 ^ 5;
sbit STD  = P3 ^ 6;
sbit SCLK = P3 ^ 7;

sbit RST = P3 ^ 3;	//復位

sbit BK = P3 ^ 2;	//背光開關

unsigned char code images[] = { //122*32
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xE0, 0x03, 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x1E, 0x1C, 0x3F, 0x83, 0x9F, 0xF8, 0x7F, 0xE3, 0x81, 0xFF, 0xFC, 0x0E, 0x00, 0x00, 0x00,
	0x00, 0x1E, 0x3C, 0x3F, 0xC7, 0x9F, 0xFC, 0x7F, 0xF3, 0xC1, 0xFF, 0xFC, 0x1E, 0x00, 0x00, 0x00,
	0x00, 0x0E, 0x3E, 0x3B, 0xEF, 0x1F, 0xFC, 0x7F, 0xF3, 0xC1, 0xDF, 0xDC, 0x1E, 0x00, 0x00, 0x00,
	0x00, 0x0E, 0x3E, 0x39, 0xEF, 0x1E, 0x1C, 0x78, 0x79, 0xC3, 0xC7, 0x1E, 0x1C, 0x00, 0x00, 0x00,
	0x00, 0x0F, 0x3E, 0x78, 0xFE, 0x1C, 0x1C, 0x78, 0x79, 0xE3, 0x87, 0x1E, 0x3C, 0x00, 0x00, 0x00,
	0x00, 0x0F, 0x7F, 0x70, 0xFC, 0x1C, 0x1C, 0x70, 0x79, 0xE7, 0x87, 0x0F, 0x38, 0x00, 0x00, 0x00,
	0x00, 0x07, 0x77, 0x70, 0x7C, 0x1C, 0x1C, 0x70, 0x78, 0xE7, 0x87, 0x0F, 0x78, 0x00, 0x00, 0x00,
	0x00, 0x07, 0x77, 0xF0, 0x7C, 0x1C, 0x1C, 0x70, 0x78, 0xF7, 0x07, 0x07, 0x78, 0x00, 0x00, 0x00,
	0x00, 0x07, 0xF7, 0xE0, 0xFE, 0x1C, 0x1C, 0x70, 0x78, 0x7F, 0x07, 0x07, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE1, 0xFF, 0x1C, 0x1C, 0x70, 0x78, 0x7F, 0x07, 0x07, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE1, 0xEF, 0x1C, 0x1C, 0x70, 0x78, 0x7E, 0x07, 0x03, 0xF0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xE3, 0xE3, 0xC7, 0x9C, 0x1C, 0x70, 0x78, 0x3E, 0x07, 0x03, 0xE0, 0x00, 0x00, 0x00,
	0x00, 0x03, 0xC3, 0xC7, 0x87, 0x9C, 0x1C, 0x70, 0x78, 0x3C, 0x07, 0x01, 0xE0, 0x00, 0x00, 0x00,
	0x00, 0x01, 0xC1, 0xC7, 0x83, 0x9C, 0x1C, 0x70, 0x38, 0x3C, 0x07, 0x03, 0xC0, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

//功能:送1位資料到液晶顯示控制器
void trans_bit(bit d)
{
	STD = d;                          //先送資料到資料口線DI
	_nop_();
	SCLK = 1;                         //再使時鐘口線發一個負脈沖
	_nop_();
	SCLK = 0;
	_nop_();
	SCLK = 1;
}
//功能:送1位元組資料到液晶顯示控制器
void trans_byte(unsigned char d)
{
	unsigned char i;

	for(i = 0; i < 8; i++) {
		if((d & 0x80) == 0x80)
			trans_bit(1);
		else
			trans_bit(0);

		d <<= 1;                        //從高到低位送位元組位資料到液晶顯示控制器
	}
}
//功能:向液晶顯示控制器寫圖形資料
void lcd_wd(unsigned char d)
{
	CS = 1;                           //片選使能
	trans_byte(0xFA);                     //SYNCODE=0F8H,RW=0,RS=1,D0=0
	trans_byte(d & 0xF0);                 //送高四位資料,低四位補零
	trans_byte((d & 0x0F) << 4);          //送低四位資料
	CS = 0;                           //片選禁止
}
//功能:向液晶顯示控制器送指令
void lcd_wc(unsigned char c)
{
	CS = 1;                           //片選使能
	trans_byte(0xF8);                     //SYNCODE=0F8H,RW=0,RS=0,D0=0
	trans_byte(c & 0xF0);                 //送高四位資料,低四位補零
	trans_byte((c & 0x0F) << 4);          //送低四位資料
	CS = 0;                           //片選禁止
}

//寫資料/命令
void lcd_write(uchar opra, uchar datas)
{
	if(opra == 1) {	//寫命令
		lcd_wc(datas);
	} else {		//寫資料
		lcd_wd(datas);
	}
}

//開啟LCD顯示
void lcdon(void)
{
	lcd_write(WRITE_CMD, 0x30);                        //設定為基本指令集
	lcd_write(WRITE_CMD, 0x0c);
}
//關閉LCD顯示
void lcdoff(void)                       //LCD顯示關閉子程式
{
	lcd_write(WRITE_CMD, 0x30);                        //設定為基本指令集
	lcd_write(WRITE_CMD, 0x08);
}

//LCD初始化
void lcd_init(void)
{
	lcd_write(WRITE_CMD, 0x33);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x30);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x30);		//發送基本指令集
	Delay5ms();
	lcd_write(WRITE_CMD, 0x0C);		//開顯示,關游標,關游標位置反白
	Delay5ms();
	lcd_write(WRITE_CMD, 0x01);		//清屏
	Delay5ms();
	lcdon();
}

//字符操作區域
//12232ZB字符區域定義為:
//XPOS(0-15) 對應于第1列到第16列位置,每個字符列位置實際占位8點,總計對應128點
//由于顯示只有122點,所以最后的6點不能顯示出來.
//YPOS(0-1)對應于第1行到第2行,每個行位置實際占位16點,總計對應32點
void lcd_write_ddram(uchar x, uchar y, uchar *datas)
{
	if(x > 15) {
		return;
	}

	if(y > 1) {
		return;
	}

	if(y == 0) {
		lcd_write(WRITE_CMD, 0x80 + x);
	} else {
		lcd_write(WRITE_CMD, 0x90 + x);
	}

	while(*datas != '\0') {
		lcd_write(WRITE_DATA, *datas++);
	}

}

//功能:整屏顯示 c 代表的ASCII字符
void char_lcd_fill(unsigned char c) 
{
	uchar x, y;

	for(y = 0; y < 2; y++) {
		if(y == 0) {
			lcd_write(WRITE_CMD, 0x80);
		} else {
			lcd_write(WRITE_CMD, 0x90);
		}

		for(x = 0; x < 15; x++) {
			lcd_write(WRITE_DATA, c);
		}
	}
}

//功能:開啟繪圖區域顯示
void lcd_graph_on(void)
{
	lcd_write(WRITE_CMD, 0x36);							//擴充指令集,8位,開繪圖
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}
//功能:關倍訓圖區域顯示
void lcd_graph_off(void)                  //繪圖區域顯示關閉子程式
{
	lcd_write(WRITE_CMD, 0x34);							//擴充指令集,8位,關繪圖
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}

//功能:設定(GXPOS,GYPOS)對應繪圖區域內部RAM指標
void g_lcd_pos(unsigned char GXPOS, unsigned char GYPOS) 
{
	lcd_write(WRITE_CMD, 0x36);                       //擴展指令集,8位,開繪圖
	lcd_write(WRITE_CMD, (GYPOS + 0x80));		//Y
	lcd_write(WRITE_CMD, ((GXPOS / 16) | 0x80));//X
	lcd_write(WRITE_CMD, 0x30);                        //恢復為基本指令集
}

//功能:清除圖形區域
void g_lcd_fill()
{
	unsigned char i, j;

	for(i = 0; i < 32; i++) {
		g_lcd_pos(0, i);

		for(j = 0; j < 16; j++) {
			lcd_write(WRITE_DATA, 0x00);
		}
	}
}

//功能:在(GXPOS,GYPOS)位置繪制XSIZE列及YISZE行點陣的圖形*S(XSIZE僅取8的倍數,GXPOS僅取16的倍數)
void put_size_image(unsigned char GXPOS, unsigned char GYPOS, unsigned char XSIZE, unsigned char YSIZE, unsigned char code *s)
{
	unsigned char lx, ly;

	for(ly = 0; ly < YSIZE; ly++) {
		g_lcd_pos(GXPOS, GYPOS);	//設定地址

		for(lx = 0; lx < XSIZE; lx += 8) {
			lcd_write(WRITE_DATA, *s);
			s++;
		}

		GYPOS++;	//換行
	}
}
void main()
{
	DATA_PORT = 0x00;
	BK = 1;

	Delay500ms();//等待上電穩定
	lcd_init();

	while(1) {
		lcd_write_ddram(0, 0, "中國牛批666666");
		lcd_write_ddram(0, 1, "中國牛批666666");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');
		lcd_write_ddram(0, 0, "ABCDEFGHIJKLMO");
		lcd_write_ddram(0, 1, "PQRSTUVWXYZabc");
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		char_lcd_fill(' ');
		lcd_graph_on();
		g_lcd_fill();
		put_size_image(0, 0, 122, 32, images);
		Delay500ms();
		Delay500ms();
		Delay500ms();
		Delay500ms();
		lcd_graph_off();
	}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257097.html

標籤:其他

上一篇:【TgM閱讀筆記】《玩轉虛擬機——基于VMware+Windows》(韓立剛)

下一篇:2021美賽B題解題思路(Fighting Wildfires)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more