📄 lcd.sdi
字号:
,,,; LCD Display Driver Demo.
,,,; Timing code assumes 6MHz Clock
,,,;
,,,;***********************************************
,,,;指定LCD地址 LCD Registers addresses
,,,;LCD_CMD_WR equ 0 ;写命令寄存器
,,,;LCD_DATA_WR equ 1 ;写数据寄存器
,,,;LCD_BUSY_RD equ 2 ;读忙标志及RAM地址
,,,;LCD_DATA_RD equ 3 ;读RAM数据
,,,
,,,;指定LCD命令 LCD Commands
,,,;LCD_CLS equ 1 ;清屏
,,,;LCD_HOME equ 2 ;光标归位
,,,;LCD_SETMODE equ 4 ;输入模式
,,,;LCD_SETVISIBLE equ 8 ;显示致能、禁能
,,,;LCD_SHIFT equ 16 ;显示、光标移位
,,,;LCD_SETFUNCTION equ 32 ;功能设定
,,,;LCD_SETCGADDR equ 64 ;字符器RAM地址设定
,,,;LCD_SETDDADDR equ 128 ;显示数据存储器RAM地址设定
,,, ORG 00H
0000,01 30,, AJMP MAIN
,,, ORG 30H
,,,;主程序
0030,,MAIN,MAIN:
0030,75 81 5F,, MOV SP,#5FH ;栈指针
0033,11 45,, ACALL INIT ;LCD初始化
0035,11 6D,, ACALL FIRST ;第一行显示位置
0037,90 00 B4,, MOV DPTR,#TABLE1;取要显示字符
003A,11 60,, ACALL DISPLAY ;显示
003C,11 72,, ACALL SECOND ;第二行显示位置
003E,90 00 C9,, MOV DPTR,#TABLE2;取要显示字符
0041,11 60,, ACALL DISPLAY ;显示
0043,80 EB,, JMP main ;返回
,,,;初始化子程序
0045,,INIT,INIT:
0045,11 AB,, ACALL DELAY;
,,,
0047,74 39,, MOV A,#39H ;复位数据
0049,11 77,, ACALL WRCOM ;写命令寄存器
004B,74 39,, MOV A,#39H ;设定数据长度为8位
004D,11 77,, ACALL WRCOM ;写命令寄存器
,,,;
004F,74 08,, MOV A,#08H ;设定LCD不显示光标,不闪烁字符
0051,11 77,, ACALL WRCOM ;写命令寄存器
,,,;
0053,74 01,, MOV A,#01H ;清屏
0055,11 77,, ACALL WRCOM ;
,,,;
0057,74 06,, MOV A,#06H ;设定输入模式
0059,11 77,, ACALL WRCOM ;
,,,;
005B,74 0C,, MOV A,#0CH ;显示致能,不显示光标
005D,11 77,, ACALL WRCOM ;
005F,22,, RET
,,,;显示子程序
0060,,DISPLAY,DISPLAY:
0060,79 00,, MOV R1,#00H ;取第一个字符
0062,,NEXT,NEXT:
0062,E9,, MOV A,R1 ;
0063,93,, MOVC A,@A+DPTR ;
0064,B4 23 01,, CJNE A,#23H,DSP;判断是否显示完全部字符(“#”对应代码是0010 0011B=23H)
0067,22,, RET
0068,,DSP,DSP:
0068,11 88,, ACALL WRDATA ;显示
006A,09,, INC R1 ;下一字符
006B,01 62,, AJMP NEXT ;
006D,,FIRST,FIRST:
006D,74 80,, MOV A,#10000000B;第一行显示位置
006F,11 77,, ACALL WRCOM ;
0071,22,, RET
,,,;
0072,,SECOND,SECOND:
0072,74 C0,, MOV A,#11000000B;第一行显示位置
0074,11 77,, ACALL WRCOM;
0076,22,, RET
,,,;写命令寄存器
0077,,WRCOM,WRCOM:
0077,11 99,, ACALL BUSY;
0079,75 A0 F8,, MOV P2,#11111000B;
007C,00,, NOP
007D,D2 A2,, SETB P2.2;
007F,F5 80,, MOV P0,A;
0081,00,, NOP
0082,C2 A2,, CLR P2.2;
0084,12 00 AB,, CALL DELAY
0087,22,, RET
,,,;写数据寄存器
0088,,WRDATA,WRDATA:
0088,11 99,, ACALL BUSY;
008A,75 A0 F9,, MOV P2,#11111001B;
008D,00,, NOP
008E,D2 A2,, SETB P2.2;
0090,F5 80,, MOV P0,A;
0092,00,, NOP
0093,C2 A2,, CLR P2.2;
0095,12 00 AB,, CALL DELAY
0098,22,, RET
,,,;忙判断
0099,,BUSY,BUSY:
0099,C0 E0,, PUSH ACC;
009B,,WAIT,WAIT:
009B,75 A0 FA,, MOV P2,#11111010B;
009E,00,, NOP
009F,D2 A2,, SETB P2.2;
00A1,E5 80,, MOV A,P0;
00A3,20 E7 F5,, JB ACC.7,WAIT;
00A6,C2 A2,, CLR P2.2;
00A8,D0 E0,, POP ACC
00AA,22,, RET
,,,;延时
00AB,,DELAY,DELAY:
00AB,7E 80,, MOV R6,#80H
00AD,7F 80,DL1,DL1: MOV R7,#80H
00AF,DF FE,, DJNZ R7,$
00B1,DE FA,, DJNZ R6,DL1
00B3,22,, RET
,,,;显示字符
00B4,20 20 41 42,TABLE1,TABLE1: DB " ABCDEFG HIGKLMN ";
00C8,23,, DB "#";
00C9,20 20 4F 50,TABLE2,TABLE2: DB " OPQ RST UVW XYZ ";
00DD,23,, DB "#"
000E,,, END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -