📄 lcd128.asm
字号:
;E BIT P1.2 ;并行使能信号
;R_W BIT P1.1 ;并行读写信号
;RS BIT P1.0 ;并行指令/数据选择信号
RE_T BIT P2.0
PSB BIT P2.2 ;串/并行口选择,H-并;L-串
;端口(引脚)定义
LCD_CS BIT P2.5 ;LCD片选端
LCD_SID BIT P2.4 ;LCD串行数据输入输出端
LCD_CLK BIT P2.3 ;LCD串行时钟端
LCD_X EQU 34H
LCD_Y EQU 35H
COUNT EQU 36H
COUNT1 EQU 37H
COUNT2 EQU 38H
COUNT3 EQU 39H
LCD_COM DATA 30H ;LCD指令缓冲区
LCD_WDAT DATA 31H ;写入LCD数据缓冲区
LCD_RIDAT DATA 32H ;读取LCD指令
LCD_RDDAT DATA 33H ;读取LCD显示数据
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
;MOV P1,#00H
clr re_t
SETB RE_T
CLR PSB
ACALL LCD_INIT
MOV DPTR,#TU_TAB1 ;显示图形
ACALL PHO_DISP
;MOV LCD_COM,#80h
;ACALL LCD_WRI
;MOV LCD_WDAT,#06H
; mov a,#00h
; MOV R1,#00H
; mov r0,#16
; mov dptr,#table
;MAIN1: movc a,@a+dptr
;MOV LCD_WDAT,A
; ACALL LCD_WRD
;INC R1
; MOV A,R1
; DJNZ R0,MAIN1
main2:
AJMP MAIN2
;table: db "YM12864R造字演示YM12864R造字演示"
;==========================================================;
;液晶初始化子程序
;==========================================================;
LCD_INIT:
MOV LCD_COM,#34H ;34H--扩充指令操作
LCALL LCD_WRI
;MOV LCD_COM,#30H ;功能设置,基本指令集
;CALL LCD_WRI ;调用写指令子程序
MOV LCD_COM,#0CH ;显示开,光标关,反白关
CALL LCD_WRI
MOV LCD_COM,#01H ;清屏并将DDRAM的地址计数器(AC)归零
CALL LCD_WRI
MOV LCD_COM,#06H ;光标向右移动,AC+1
CALL LCD_WRI
RET
;==========================================================;
;MCU写指令到LCD子程序 (RS=0、RW=0)
;名称:LCD_WRI
;描述:发送1个字节的指令给LCD
;指令字节地址在:LCD_COM
;==========================================================;
LCD_WRI:
CALL LCD_RRI ;读取忙碌标志BF
MOV A,LCD_RIDAT
JB ACC.7,LCD_WRI ;不忙则继续
CLR LCD_CS
MOV A,#11111000B ;
SETB LCD_CS ;将片选拉高
CALL LCD_SEND
;--------------------------------------
MOV A,LCD_COM
ANL A,#0F0H ;低4位清0传送高4位
CALL LCD_SEND
;--------------------------------------
MOV A,LCD_COM
SWAP A ;高低半字节交换
ANL A,#0F0H ;低4位清0传送低4位
CALL LCD_SEND
CLR LCD_CS ;将CS清0完成传送
RET
;==========================================================;
;MCU写数据到LCD (RS=1 RW=0)
;名称:LCD_WRD
;描述:发送1个字节的数据给LCD
;数据入口:LCD_WDAT
;==========================================================;
LCD_WRD:
CLR LCD_CS ;
CALL LCD_RRI ;读取忙碌标志BF
MOV A,LCD_RIDAT ;调用读LCD指令子程序
JB ACC.7,LCD_WRD ;BF=1则忙,BF=0空闲,空闲时执行下面的指令
MOV A,#11111010B
SETB LCD_CS
CALL LCD_SEND
;--------------------------------------
MOV A,LCD_WDAT ;要发送的数据给A
ANL A,#0F0H ;屏蔽低4位传送数据高4位
CALL LCD_SEND
;--------------------------------------
MOV A,LCD_WDAT
SWAP A
ANL A,#0F0H ;传送数据低4位
CALL LCD_SEND
CLR LCD_CS ;完成传送
RET
;==========================================================;
;读LCD(BF)(AC)指令到MCU (RS=0 RW=1)
;名称:LCD_RRI
;描述:从LCD中读BF忙碌标志和AC计数器地址.
;接收的指令数据在LCD_RDAT中.
;==========================================================;
LCD_RRI:
CLR LCD_CS
MOV A,#11111100B ;读取LCD忙碌标志
SETB LCD_CS ;片选置1(LCD数据传送有效)
CALL LCD_SEND
CALL LCD_RECEIVE
MOV LCD_RIDAT,A ;接收高4位数据
;--------------------------------------
CALL LCD_RECEIVE ;接收低4位数据
CLR LCD_CS
ANL A,#0F0H ;屏蔽低4位
SWAP A ;取低4位
ANL LCD_RIDAT,#0F0H ;取高4位
ORL LCD_RIDAT,A ;组合成完整的数据
RET
;==========================================================;
;读LCD的显示数据到MCU (RS=1 RW=1)
;名称:LCD_RRD
;描述:
;接收的显示数据在--中
;==========================================================;
LCD_RRD:
CLR LCD_CS
MOV A,#11111110B
SETB LCD_CS ;片选端置1
CALL LCD_SEND
;-------------------------------------------
CALL LCD_RECEIVE ;接收高4位
MOV LCD_RDDAT,A
;-------------------------------------------
CALL LCD_RECEIVE ;接收低4位
CLR LCD_CS
ANL A,#0F0H
SWAP A
ANL LCD_RDDAT,#0F0H
ORL LCD_RDDAT,A ;组合成完整的数据
RET
;==========================================================;
;LCD发送8BIT的数据(1个字节)
;==========================================================;
LCD_SEND:
MOV R2,#8 ;发送8位(BIT)数据
LCD_SEND1:
CLR LCD_CLK ;时钟端置1
RLC A ;ACC.7给C
MOV LCD_SID,C ;C给串行数据端
SETB LCD_CLK ;时钟端清0
DJNZ R2,LCD_SEND1 ;未完继续
RET
;==========================================================;
;LCD接收8BIT数据(1个字节)
;==========================================================;
LCD_RECEIVE:
MOV R2,#8
LCD_RECEIVE1:
CLR LCD_CLK ;时钟端置1
NOP
NOP
SETB LCD_CLK
MOV C,LCD_SID
RLC A
DJNZ R2,LCD_RECEIVE1
RET
;===============================================
;全屏显示图形子程序
;===============================================
PHO_DISP:
MOV COUNT3,#02H
MOV LCD_X,#80H
PHO_DISP1:
MOV LCD_Y,#80H
MOV COUNT2,#20H
PHO_DISP2:
MOV COUNT1,#10H
LCALL WR_ZB
PHO_DISP3:
CLR A
MOVC A,@A+DPTR
MOV LCD_WDAT,A
LCALL LCD_WRD
INC DPTR
DJNZ COUNT1,PHO_DISP3
INC LCD_Y
DJNZ COUNT2,PHO_DISP2
MOV LCD_X,#88H
DJNZ COUNT3,PHO_DISP1
MOV LCD_COM,#36H
LCALL LCD_WRI
MOV LCD_COM,#30H
LCALL LCD_WRI
RET
;---------------------------------------------
WR_ZB:
MOV LCD_COM,#34H
LCALL LCD_WRI
MOV LCD_COM,LCD_Y
LCALL LCD_WRI
MOV LCD_COM,LCD_X
LCALL LCD_WRI
MOV LCD_COM,#30H
LCALL LCD_WRI
RET
TU_TAB1: ; 数据表
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
db 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 01h
db 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 01h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 11h,0FFh, 80h, 40h, 08h, 30h, 10h, 20h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 68h, 3Fh,0FFh, 08h, 30h, 11h,0F8h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 68h, 3Fh,0FFh, 08h, 30h, 11h,0F8h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 01h,0FFh, 00h, 00h, 7Fh,0FEh, 7Dh, 08h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 11h, 6Bh, 07h,0FCh, 16h, 30h, 2Dh,0F8h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Dh,0FFh, 04h, 0Ch, 16h, 30h, 2Dh, 08h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 00h, 3Fh,0FFh, 16h, 30h, 2Dh,0F8h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 00h, 3Fh,0FFh, 16h, 30h, 2Dh,0F8h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch,0FFh, 30h, 01h, 66h,0FEh, 2Dh, 26h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 1Ch, 00h, 03h,0F0h, 76h, 82h, 2Dh, 28h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Dh,0FFh, 82h, 11h, 08h, 82h, 11h, 10h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 8Bh, 04h, 11h, 16h, 82h, 2Dh, 28h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Ch, 8Bh, 04h, 11h, 16h, 82h, 2Dh, 28h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 0Dh, 18h,0B8h, 1Fh, 60h,0FEh, 41h,0C6h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 07h, 8Fh,0FFh, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 08h, 70h, 40h,0EFh, 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 08h, 70h, 40h,0EFh, 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 10h, 00h, 80h, 10h, 60h, 00h, 0Fh,0FFh, 30h, 0Ch, 00h, 80h, 00h, 00h, 00h
db 00h, 20h, 18h, 38h, 20h, 60h, 00h, 00h, 60h, 08h, 0Ch, 1Fh,0FCh, 1Ch, 00h, 00h
db 00h,0C0h, 64h, 45h, 00h, 60h, 00h, 03h,0FCh, 0Bh,0FFh, 00h, 80h, 3Eh, 00h, 00h
db 00h,0C1h, 00h, 01h, 00h, 10h, 00h, 00h, 80h, 00h, 0Ch, 08h, 88h, 3Eh, 00h, 00h
db 00h,0C1h, 00h, 01h, 00h, 10h, 00h, 00h, 80h, 00h, 0Ch, 08h, 88h, 3Eh, 00h, 00h
db 01h, 01h, 00h, 00h,0C0h, 10h, 00h, 1Fh,0FFh,0BDh, 8Ch, 06h,0B0h, 3Eh, 00h, 00h
db 02h, 0Eh, 18h, 1Ch,0C0h, 10h, 00h, 01h, 00h, 04h, 4Ch, 7Fh,0FEh, 1Ch, 00h, 00h
db 02h, 16h, 64h, 22h, 20h, 10h, 00h, 03h,0FCh, 04h, 4Ch, 01h,0C0h, 1Ch, 00h, 00h
db 02h, 16h, 64h, 22h, 20h, 10h, 00h, 03h,0FCh, 04h, 4Ch, 01h,0C0h, 1Ch, 00h, 00h
db 04h,0E8h, 83h, 41h, 1Ch, 08h, 00h, 0Dh, 04h, 04h, 0Ch, 06h,0B0h, 00h, 00h, 00h
db 07h, 10h, 8Fh, 47h, 03h, 88h, 00h, 11h,0FCh, 04h, 3Ch, 08h, 88h, 1Ch, 00h, 00h
db 00h, 20h, 6Ch, 26h, 01h, 78h, 00h, 01h, 04h, 0Ah, 00h, 70h, 86h, 1Ch, 00h, 00h
db 00h,0C0h, 18h, 1Ch, 00h, 80h, 00h, 01h,0FCh, 31h,0FFh, 00h, 80h, 00h, 00h, 00h
db 00h,0C0h, 18h, 1Ch, 00h, 80h, 00h, 01h,0FCh, 31h,0FFh, 00h, 80h, 00h, 00h, 00h
db 00h,0C1h, 87h, 80h, 00h, 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 06h, 78h, 3Ch, 20h, 60h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 08h, 07h,0C2h,0C0h, 60h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 08h, 00h, 01h,0C0h, 60h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 08h, 00h, 01h,0C0h, 60h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 01h, 08h, 18h, 01h,0C0h, 60h, 00h, 00h, 00h,0F1h,0F3h, 87h,0C0h, 00h, 00h, 00h
db 00h,0C6h, 18h,0C2h, 20h, 80h, 00h, 00h, 03h, 0Eh, 1Ch, 78h, 70h, 00h, 00h, 00h
db 00h,0C1h, 00h,0C2h, 00h, 80h, 00h, 00h, 04h, 44h, 11h, 10h, 38h, 00h, 00h, 00h
db 00h, 26h,0E0h, 04h, 01h, 00h, 00h, 00h, 04h, 80h, 12h, 00h, 38h, 00h, 00h, 00h
db 00h, 26h,0E0h, 04h, 01h, 00h, 00h, 00h, 04h, 80h, 12h, 00h, 38h, 00h, 00h, 00h
db 00h, 11h, 18h, 38h, 03h, 00h, 00h, 00h, 04h, 80h, 12h, 00h, 38h, 00h, 00h, 00h
db 00h, 0Eh, 87h,0C2h, 1Ch, 00h, 00h, 00h, 04h, 00h, 10h, 00h, 38h, 00h, 00h, 00h
db 00h, 01h,0E0h, 04h,0E0h, 00h, 00h, 00h, 03h, 00h, 1Ch, 00h, 70h, 00h, 00h, 00h
db 00h, 1Eh, 18h, 3Fh, 1Eh, 00h, 00h, 00h, 00h, 80h, 32h, 00h,0C0h, 00h, 00h, 00h
db 00h, 1Eh, 18h, 3Fh, 1Eh, 00h, 00h, 00h, 00h, 80h, 32h, 00h,0C0h, 00h, 00h, 00h
db 00h, 38h, 07h,0C0h, 0Fh, 00h, 00h, 00h, 00h, 40h, 61h, 01h, 80h, 00h, 00h, 00h
db 00h,0E9h,0FFh,0FFh, 0Dh, 80h, 00h, 00h, 00h, 31h,0C0h, 87h, 00h, 00h, 00h, 00h
db 01h,0E9h, 1Bh,0B9h, 0Dh,0E0h, 00h, 00h, 00h, 0Bh, 80h, 6Eh, 00h, 00h, 00h, 00h
db 03h,0C9h,0F0h, 1Fh, 0Ch,0F0h, 00h, 00h, 00h, 06h, 00h, 18h, 00h, 00h, 00h, 00h
db 03h,0C9h,0F0h, 1Fh, 0Ch,0F0h, 00h, 00h, 00h, 06h, 00h, 18h, 00h, 00h, 00h, 00h
db 07h, 06h,0E0h, 06h, 10h, 78h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 07h,0C1h, 00h, 00h, 20h,0F8h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 07h,0E0h, 80h, 00h,0C1h,0F8h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 07h,0E0h, 80h, 00h,0C1h,0F8h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 80h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 01h
db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -