利用STC89C52單片機控制LCD1602(不帶中文字庫)顯示的中文

2020-12-27 電子產品世界
一、設計原理

使用STC89C52單片機控制1602LCD(不帶中文字庫的);利用1602LCD(不帶中文字庫的)中的存儲器(64個字節00H-3FH)自建立8個5×8點陣的字符從而顯示中文字符。

本文引用地址:http://www.eepw.com.cn/article/201611/316492.htm

二、LCD1602的指令集:

1、清屏

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

00000001

運行時間(250Khz):1.64ms;

功能:清DDRAM和AC值。

2、歸位

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

0000001*

運行時間(250Khz):1.64ms;

功能:AC=0,光標、畫面回HOME位。

3、輸入方式設置

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

000001I/DS

運行時間(250Khz):40us;

功能:設置光標、畫面移動方式。

其中:I/D=1:數據讀、寫操作後,AC自動增一;

I/D=0:數據讀、寫操作後,AC自動減一;

S=1:數據讀、寫操作,畫面平移;

S=0:數據讀、寫操作,畫面不動;

4、顯示開關控制

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

00001DCB

運行時間(250Khz):40us;

功能:設置顯示、光標及閃爍開、關。

其中:D表示顯示開關:D=1為開,D=0為關;

C表示光標開關:C=1為開,C=0為關;

B表示閃爍開關:B=1為開,B=0為關。

5、光標、畫面位移

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

0001S/CR/L**

運行時間(250Khz):40us;

功能:光標、畫面移動,不影響DDRAM。

其中:S/C=1:畫面平移一個字符位;

S/C=0:光標平移一個字符位;

R/L=1:右移;R/L=0:左移。

6、功能設置

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

001DLNF**

運行時間(250Khz):40us;

功能:工作方式設置(初始化指令)。

其中:DL=1,8位數據接口;DL=0,四位數據接口;

N=1,兩行顯示;N=0,一行顯示;

F=1,5´10點陣字符;F=0,5´7點陣字符。

7、CGRAM地址設置

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

01A5A4A3A2A1A0

運行時間(250Khz):40us;

功能:設置CGRAM地址。A5~A0=0~3FH。

8、DDRAM地址設置

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

00

1A6A5A4A3A2A1A0

運行時間(250Khz):40us;

功能:設置DDRAM地址。

N=0,一行顯示A6~A0=0~4FH;

N=1,兩行顯示,首行A6~A0=00H~2FH,

次行A6~A0=40H~67H。

9、讀BF及AC值

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

01

BFAC6AC5AC4AC3AC2AC1AC0

功能:讀忙BF值和地址計數器AC值。

其中:BF=1:忙;BF=0:準備好。

此時,AC值意義為最近一次地址設置(CGRAM或DDRAM)定義。

10、寫數據

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

10

數據

運行時間(250Khz):40us;

功能:根據最近設置的地址性質,數據寫入DDRAM或CGRAM內。

11、讀數據

RSR/W

DB7DB6DB5DB4DB3DB2DB1DB0

11

數據

運行時間(250Khz):40us;

功能:根據最近設置的地址性質,從DDRRAM或CGRAM數據讀出。

三、程序:

//液晶顯示中文-版本0.0

//作者:pcdian

//定義液晶的一些功能位

//RS 為數據、指令寄存器選擇位

//RW 為讀寫選擇位

//E 為使能位

RS BIT p2.5

RW BIT P2.6

E BIT P2.7

ORG 0000H

SJMP START

ORG 000BH

LJMP Timer_IT

ORG 0030H

START:MOV SP,#60H

MOV TMOD,#01H

MOV TH0,#0A6H

MOV TL0,#00H

SETB EA

SETB ET0

CLR TR0

MAIN:MOV P0,#01H //清屏

ACALL ENABLE

MOV P0,#38H //顯示模式設置為16字*2行

ACALL ENABLE

MOV P0,#0CH //不顯示光標

ACALL ENABLE

MOV P0,#06H //顯示方向正向且屏不移動

ACALL ENABLE

DISPLAY:ACALL DISPLAY_C0

//我

MOV P0,#80H

ACALL ENABLE

MOV P0,#00H

ACALL WRITE

MOV P0,#81H

ACALL ENABLE

MOV P0,#01H

ACALL WRITE

MOV P0,#82H

ACALL ENABLE

MOV P0,#02H

ACALL WRITE

MOV P0,#0C0H

ACALL ENABLE

MOV P0,#03H

ACALL WRITE

MOV P0,#0C1H

ACALL ENABLE

MOV P0,#04H

ACALL WRITE

MOV P0,#0C2H

ACALL ENABLE

MOV P0,#05H

ACALL WRITE

LCALL DELAY1S

MOV P0,#01H

ACALL ENABLE

ACALL DISPLAY_C1

//們

MOV P0,#83H

ACALL ENABLE

MOV P0,#00H

ACALL WRITE

MOV P0,#84H

ACALL ENABLE

MOV P0,#01H

ACALL WRITE

MOV P0,#85H

ACALL ENABLE

MOV P0,#02H

ACALL WRITE

MOV P0,#0C3H

ACALL ENABLE

MOV P0,#03H

ACALL WRITE

MOV P0,#0C4H

ACALL ENABLE

MOV P0,#04H

ACALL WRITE

MOV P0,#0C5H

ACALL ENABLE

MOV P0,#05H

ACALL WRITE

LCALL DELAY1S

MOV P0,#01H

ACALL ENABLE

ACALL DISPLAY_C2

//的

MOV P0,#86H

ACALL ENABLE

MOV P0,#00H

ACALL WRITE

MOV P0,#87H

ACALL ENABLE

MOV P0,#01H

ACALL WRITE

MOV P0,#88H

ACALL ENABLE

MOV P0,#02H

ACALL WRITE

MOV P0,#0C6H

ACALL ENABLE

MOV P0,#03H

ACALL WRITE

MOV P0,#0C7H

ACALL ENABLE

MOV P0,#04H

ACALL WRITE

MOV P0,#0C8H

ACALL ENABLE

MOV P0,#05H

ACALL WRITE

LCALL DELAY1S

MOV P0,#01H

ACALL ENABLE

ACALL DISPLAY_C3

//0

MOV P0,#89H

ACALL ENABLE

MOV P0,#00H

ACALL WRITE

MOV P0,#8AH

ACALL ENABLE

MOV P0,#01H

ACALL WRITE

MOV P0,#0C9H

ACALL ENABLE

MOV P0,#02H

ACALL WRITE

MOV P0,#0CAH

ACALL ENABLE

MOV P0,#03H

ACALL WRITE

LCALL DELAY1S

MOV P0,#01H

ACALL ENABLE

ACALL DISPLAY_C4

//7

MOV P0,#8BH

ACALL ENABLE

MOV P0,#00H

ACALL WRITE

MOV P0,#8CH

ACALL ENABLE

MOV P0,#01H

ACALL WRITE

MOV P0,#0CBH

ACALL ENABLE

MOV P0,#02H

ACALL WRITE

MOV P0,#0CCH

ACALL ENABLE

MOV P0,#03H

ACALL WRITE

//3

MOV P0,#8DH

ACALL ENABLE

MOV P0,#04H

ACALL WRITE

MOV P0,#8EH

ACALL ENABLE

MOV P0,#05H

ACALL WRITE

MOV P0,#0CDH

ACALL ENABLE

MOV P0,#06H

ACALL WRITE

MOV P0,#0CEH

ACALL ENABLE

MOV P0,#07H

ACALL WRITE

LCALL DELAY1S

MOV P0,#01H

ACALL ENABLE

LJMP DISPLAY

DISPLAY_C0:MOV DPTR,#TAB0

MOV R2,#48

ACALL DISPLAY_C

RET

DISPLAY_C1:MOV DPTR,#TAB1

MOV R2,#48

ACALL DISPLAY_C

RET

DISPLAY_C2:MOV DPTR,#TAB2

MOV R2,#48

ACALL DISPLAY_C

RET

DISPLAY_C3:MOV DPTR,#TAB3

MOV R2,#32

ACALL DISPLAY_C

RET

DISPLAY_C4:MOV DPTR,#TAB4

MOV R2,#64

ACALL DISPLAY_C

RET

DISPLAY_C:MOV P0,#40H

ACALL ENABLE

MOV R3,#0

DISPLAY_CC:MOV A,R3

MOVC A,@A+DPTR

MOV P0,A

LCALL WRITE

INC R3

DJNZ R2,DISPLAY_CC

RET

ENABLE:

CLR RS

CLR RW

CLR E

ACALL DELAY

SETB E

RET

WRITE:

SETB RS

CLR RW

CLR E

ACALL DELAY

SETB E

RET

DELAY1S:SETB TR0

CJNE R0,#20,DELAY1S

CLR TR0

MOV R0,#0

RET

DELAY:MOV R5,#08H

L1:MOV R4,#0FAH

L0:DJNZ R4,L0

DJNZ R5,L1

RET

Timer_IT:MOV TH0,#0A6H

MOV TL0,#00H

INC R0

RETI

TAB0: //我

DB 0x00,0x07,0x01,0x01,0x01,0x1F,0x01,0x01

DB 0x19,0x01,0x01,0x01,0x01,0x1F,0x01,0x01

DB 0x00,0x08,0x04,0x04,0x00,0x1F,0x00,0x04

DB 0x01,0x07,0x19,0x01,0x01,0x01,0x05,0x02

DB 0x18,0x00,0x00,0x01,0x06,0x00,0x00,0x00

DB 0x14,0x18,0x10,0x08,0x09,0x05,0x03,0x01

TAB1: //們

DB 0x01,0x01,0x02,0x02,0x06,0x04,0x0c,0x14

DB 0x08,0x04,0x06,0x04,0x10,0x10,0x10,0x10

DB 0x00,0x00,0x1e,0x02,0x02,0x02,0x02,0x02

DB 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00

DB 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00

DB 0x02,0x02,0x02,0x02,0x02,0x0a,0x04,0x00

TAB2: //的

DB 0x02,0x02,0x04,0x0f,0x08,0x08,0x08,0x0f

DB 0x02,0x02,0x02,0x13,0x14,0x14,0x18,0x12

DB 0x00,0x00,0x00,0x1e,0x02,0x02,0x02,0x02

DB 0x08,0x08,0x08,0x08,0x0f,0x08,0x08,0x00

DB 0x11,0x11,0x10,0x10,0x10,0x10,0x00,0x00

DB 0x02,0x12,0x12,0x02,0x02,0x14,0x08,0x00

TAB3: //0

DB 0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x08

DB 0x00,0x00,0x18,0x04,0x02,0x02,0x02,0X02

DB 0x08,0x08,0x08,0x08,0x04,0x03,0x00,0x00

DB 0x02,0x02,0x02,0x02,0x04,0x18,0x00,0x00

TAB4: //7

DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00

DB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X06

DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

DB 0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00

//3

DB 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F

DB 0x00,0x00,0x1E,0x1E,0x06,0x06,0x06,0X1E

DB 0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00

DB 0x1E,0x06,0x06,0x06,0x1E,0x1E,0x00,0x00

END

四、總結:

雖然LCD1602可以利用自建字符顯示中文,但最多不能超過8個字符位。所以實際應用中,無法同時顯示「我們的073」。該段程序沒來得及優化,沒有充分利用單片機做重複的事情的優點;並且使代碼量增大,可讀較差(重複的,看起來頭暈);注釋少也致使可讀性差!

相關焦點

  • lcd1602中文資料分享:lcd1602接線圖_lcd1602與單片機連接圖
    體積小、重量輕   1602液晶模塊通過顯示屏上的電極控制液晶分子狀態來達到顯示的目的,在重量上比相同顯示面積的傳統顯示屏要輕得多。   d. 功耗低   相對而言,1602液晶顯示屏的功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其它顯示屏要少得多。
  • 全方位解析LCD1602特性及單片機顯示應用
    16腳(帶背光)接口  LCD1602—引腳功能介紹  指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。  指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。
  • 基於51單片機的漢字LCD智能顯示模塊設計
    而lcd智能型顯示模塊則是一種低功耗、低損耗、低價值的顯示器件,它不但可以顯示各式各樣的字符、漢字和圖形,同時具有可編程能力,且與單片機接口方便,基於以上優點,lcd智能顯示模塊獲得了廣泛的應用。 系統組成本文引用地址:http://www.eepw.com.cn/article/21534.htm 本系統主要由三部分組成,分別為單片機,lcd模塊和flash字庫,圖1所示是該系統的硬體原理框圖,由於顯示所需要佔用的資源過多(本設計採用的是16×16點陣,每個漢字存儲需要32個字節),而單片機內部ram資源及其有限,所以系統設計時有必要擴展—
  • 51單片機開發之LCD1602顯示屏
    (4)指令4:顯示開關控制。其中,D用於控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示;C用於控制光標的開與關,高電平表示有光標,低電平表示無光標;B用於控制光標是否閃爍,高電平閃爍,低電平不閃爍。(5)指令5:光標或字符移位控制。其中,S/C表示在高電平時移動顯示的文字,低電平時移動光標。(6)指令6:功能設置命令。
  • lcd12864中文資料匯總(12864引腳說明及功能_特性參數及驅動程序...
    lcd12864簡介   帶中文字庫的128X64是一種具有4位/8位並行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示解析度為128×64,內置8192個16*16點漢字,和128個16*8點ASCII字符集。
  • PIC單片機驅動LCD1602液晶顯示字符串程序
    >的使用*** 實驗內容:LCD顯示本站網址和電話***開發板連接方法: 調節1602電位器,使LCD對比度最好,裝1602時不要裝錯了,否測會燒掉。web地址char web[ ] = {"***.*********.***"};//顯示公司電話號碼char tel[ ] = {" 110 " };void init(); //申明I/O口初始化函數void lcd_init(); //申明LCD初始化函數void write(char x); //申明顯示1位元組數據函數void
  • 【Proteus】單片機配合矩陣鍵盤LCD1602製作簡易計算器
    使用單片機來製作一個簡易的計算器,實現兩個整數的加減乘除等運算功能。首先,需要LCD1602來顯示計算的公式,以及計算的結果。其次需要一個矩陣鍵盤來輸入數據。這個電路也不是很難畫,我們先把仿真電路畫好,儘量畫漂亮一些:下面來先把LCD1602給點亮。
  • (進階篇)51單片機之電子萬年曆設計、LCD1602滾動顯示、控制數碼管顯示數字
    一、實操演示- 電子萬年曆設計1、圖文詳細LCD1602硬體電路
  • Arduino入門筆記:利用1602、1302實現時鐘和定時器
    常常聽到老媽在做飯時說「開鍋15分鐘後叫我一下」,為何不做個定時器,來提醒老媽呢?結合前面學習的知識,再加上1302時間模塊,我決定自己做一個。(10,HIGH);//發聲音      delay(1);//延時1ms      digitalWrite(10,LOW);//不發聲音      delay(1);//延時ms    }    for(int i=0;i<100;i++)//輸出另一個頻率的聲音,這裡的100與前面的80一樣,用來控制頻率,可以自己調節    {      digitalWrite(10,HIGH);
  • 一個51單片機實現數字時鐘(1602顯示)
    用單片機實現數字時鐘,關於時間顯示,是用的1602液晶,C51單片機,然後再加一個定時器 在實現過程中,用到了單片機的中斷系統的相關知識,還有定時器,液晶顯示,鍵盤的動態掃描,都是以前的知識,沒什麼難度. 程序如下,可以正常運行.
  • 基於C語言STC89C52單片機電子密碼鎖的設計與仿真
    它採用高可靠性的STC89C52單片機來實現開鎖和密碼的識別,採用具備I2C總線接口的E2PROM晶片來完成密碼的存儲,通過1602液晶顯示器提示程序運行狀態和使用步驟,利用蜂鳴器模擬報警,發光二極體模擬鎖的開關。該系統用C語言編寫程序,與彙編語言相比具備更好的移植性和可讀性,便於修改和增減功能。
  • 51單片機實現多級液晶顯示中文菜單
    一、引言本文引用地址:http://www.eepw.com.cn/article/201809/388566.htm目前小型的顯示器主要有LCD和LED,LED顯示器只能顯示數字和有限個英文字符,不能顯示漢字,顯示內容不直觀,操作人員只能根據約定格式了解顯示內容
  • STC89C52單片機對數字溫度計顯示系統的設計
    機測量和控制技術在經濟迅速發展的今天,已被廣泛應用於人類生活中,如工業控制、自動檢測、智能儀器儀表、家用電器、等各個方面。而主控制器是每個控制系統不可或缺的部分,正因為單片機有體積小,重量輕,抗幹擾能力強,環境要求不高,價格低廉,可靠性高,靈活性好,開發較為容易等優點,所以它是很多設計人員的首選控制器。
  • LCD作為終端顯示字符串的過程
    ,我們往往都會利用到各種GUI進行互動設計,但是對於GUI的字符串處理與中文字庫顯示,也許並不會特別關注,因為GUI已經幫助我們封裝了一些通用的API,在調用相對應的API就可以顯示想要的圖像和字符串了。
  • 單片機設計LCD數字鐘(萬年曆)
    單片機設計LCD數字鐘(萬年曆)程序與電路如下:本文引用地址:http://www.eepw.com.cn/article/172587.htm#include#include //庫函數頭文件,代碼中引用了_nop_()函數// 定義控制信號埠sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P3^4; //設置鍵sbit enter=P3^5; //確認鍵
  • 中文字庫液晶模塊JXD12864-22中文字庫 FSTN
    12864COG中文字庫型LCD液晶屏+PCB板ST7565R型號:JXD12864-22 LCM外形尺寸:93.0X70.0X12.5TMM視域尺寸:71.7.0X38.8MM點陣數:128X64 點陣大小:0.48X0.48MM ;點間距:0.52X0.52 MM
  • 51單片機學習筆記——液晶
    一、筆記:1.1602液晶是指每行顯示16個字符,一共可以顯示2行的液晶;
  • 含簡體中文字庫的集成化液晶顯示器模塊
    當前液晶顯示器模塊有字符型、圖形點陣型和簡單的數字碼形,如果同屏顯示三種內容,只能使用點陣型,同時通過大量編程操作來實現。這就給用戶開發造成很大工作量。
  • OLED顯示模塊與C8051F單片機的接口設計
    它與液晶顯示技術相比,具有超輕薄、高亮度、廣視角、自發光、響應速度快、適應溫度範圍寬、抗震強、功耗低、可實現柔軟顯示等優越性能,可廣泛應用於通信、計算機、消費電子、工業應用、商業、交通等領域。下面以vgs12864e顯示模塊為例,介紹c8051f020單片機與它的接口設計及軟體編程方法。
  • STM32十一天燒寫中文字庫在LCD上顯示
    led.h"#include"key.h"#include"delay.h"#include"uart1.h"#include//因為用到printf函數#include"spi2.h"#include"w25q64.h"#include"iic.h"#include"at24c02.h"#include"lcd.h"voidDelay