;-----------------------12864脚功能定义---------------------------- 数据口为P0 如想更换直接在替换里全部替换就行
RS EQU P2.4
RW EQU P2.5
E EQU P2.6
PSB EQU P2.1 ;PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
;-------------------- 12864标记---------------------------
LCD_X EQU 30H ;行座标
LCD_Y EQU 31H ;列座标
COUNT EQU 32H ;定义记数缓冲
COUNT1 EQU 33H
COUNT2 EQU 34H
COUNT3 EQU 35H
;------------;12864字义数据RAM空间-------------------------------
LCD_DATA EQU 36H
LCD_DATA1 EQU 37H
LCD_DATA2 EQU 38H
LCD_DATA3 EQU 39H
LCD_DIS EQU 40H
LCD_DIS1 EQU 41H
STORE EQU 42H
;-----------------------------------------------
ORG 0000H ;伪指令告诉编译器从0000H开始
LJMP MAIN ;64KB无条件跳转跳转到main处执行
ORG 0100H ;虽然这里是伪指令但是确实有标明地址的作用
;-----------------------------------------------
MAIN:
MOV SP,#5FH ;设置栈低为5FH
LCALL DELAY40ms ;延时40.301ms 64KB长调用子函数
NOP
;********************初始化**********************
init:
SETB PSB ;通讯方式为8位数据并口
MOV A,#34H ;34H--扩充指令操作在12864原理中有解释
LCALL SEND_I ;调用写指令子程序
MOV A,#30H ;基本指令操作
LCALL SEND_I
MOV A,#01H ;清除显示
LCALL SEND_I
MOV A,#06H ;指定在资料写入或读取时,光标的移动方向
LCALL SEND_I ;DDRAM 的地址计数器(AC)加1
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL SEND_I
;HAN_WR2:
;LCALL CLEAR_P ;调入清屏子程序
;HAN_WR2A:
;MOV DPTR,#TAB1A ;显示汉字和字符
;MOV COUNT,#10H ;地址计数器设为16。循环查表16下发送数据16下;MOV A,#80H ;第一行起始地址
;LCALL SEND_I
;LCALL QUSHU
;HAN_WR2B:
;MOV DPTR,#TAB1B ;显示汉字和字符
;MOV COUNT,#10H ;地址计数器设为16。
;MOV A,#90H ;第二行起始地址
;LCALL SEND_I
;LCALL QUSHU
;HAN_WR2C:
;MOV DPTR,#TAB1C ;显示汉字和字符
;MOV COUNT,#10H ;地址计数器设为16。
;MOV A,#88H ;第三行起始地址
;LCALL SEND_I
;LCALL QUSHU
;HAN_WR2D:
;MOV DPTR,#TAB1D ;显示汉字和字符
;MOV COUNT,#10H ;地址计数器设为16。
;MOV A,#98H ;第四行起始地址
;LCALL SEND_I
;LCALL QUSHU
;LCALL DELAY1s
;LCALL FLASH ;调用闪烁子程序
;LCALL CLEAR_P ;清屏子程序
;********************死循环**********************
while1:
LCALL CLEAR_P ;调入清屏子程序
line1:
MOV DPTR,#TAB2A ;显示汉字和字符
MOV COUNT,#10H ;地址计数器设为16。循环查表16下发送数据16下MOV A,#80H ;第一行起始地址
LCALL SEND_I
LCALL QUSHU
;MOV A,#90H ;
;LCALL SEND_I
;MOV LCD_DATA,#'A'
;MOV LCD_DATA1,#'B'
;MOV LCD_DATA2,#'C'
;MOV LCD_DATA3,#'D'
;MOV COUNT,#04H ;地址计数器设为16。循环查表16下发送数据16下
;MOV R0,#0036H
;LCALL QUSHURAM
MOV A,#90H ;
LCALL SEND_I
MOV LCD_DIS,#91H
MOV LCD_DIS1,#0F8H
LCALL QUSHUASCII
MOV COUNT,#04H ;地址计数器设为16。循环查表16下发送数据16下
MOV R0,#0036H
LCALL QUSHURAM
LCALL DELAY10s
LJMP while1
;===============================================
;全屏显示点阵图形子程序
;===============================================
PHO_DISP: ;图形点阵排列方式为,一行128点/8=16个字节,即每行16字节,每字节以高位开始排列
MOV COUNT3,#02H
MOV LCD_X,#80H ;显示数据RAM的水平起始地址是80H
PHO_DISP1:
MOV LCD_Y,#80H ;显示数据RAM的垂直起始地址也是80H
MOV COUNT2,#20H ;上半部份32行
PHO_DISP2:
MOV COUNT1,#10H ;每行16字节
LCALL WR_ZB ;功能指令调用,即为点阵数据
PHO_DISP3:
CLR A
MOVC A,@A+DPTR ;读取点阵数据内容
LCALL SEND_D
INC DPTR
DJNZ COUNT1,PHO_DISP3
INC LCD_Y
DJNZ COUNT2,PHO_DISP2
MOV LCD_X,#88H
DJNZ COUNT3,PHO_DISP1
MOV A,#36H ;扩充功能设定
LCALL SEND_I
MOV A,#30H
LCALL SEND_I
RET
;----------------------------------------------
CLRRAM:
MOV LCD_DATA1,#00H ;GDRAM写0子程序
MOV LCD_DATA2,#00H
LCALL LAT_DISP
RET
;==============================================
;显示点阵子程序,此子程序与图形显示一样,只是输出的数据是固定的两个数据;==============================================
LAT_DISP:
MOV COUNT3,#02H
MOV LCD_X,#80H
LAT_DISP1:
MOV LCD_Y,#80H
CLR F0
MOV COUNT2,#20H
LAT_DISP2:
MOV COUNT1,#10H
LCALL WR_ZB
LAT_DISP3:
JB F0,LAT_DISP32 ;P直接寻址位为1转移
MOV LCD_DATA,LCD_DATA1
AJMP LAT_DISP31
LAT_DISP32:
MOV LCD_DATA,LCD_DATA2
LAT_DISP31:
MOV A,LCD_DATA
LCALL SEND_D
DJNZ COUNT1,LAT_DISP31
INC LCD_Y
CPL F0
DJNZ COUNT2,LAT_DISP2
MOV LCD_X,#88H
DJNZ COUNT3,LAT_DISP1
MOV A,#36H
LCALL SEND_I
MOV A,#30H ;返回基本指令
LCALL SEND_I
RET
;================================================== ;功能指令调用,即为点阵数据
;================================================== WR_ZB:
MOV A,#34H
LCALL SEND_I
MOV A,LCD_Y
LCALL SEND_I
MOV A,LCD_X
LCALL SEND_I
MOV A,#30H
LCALL SEND_I
RET
;================================================== ;12864液晶屏闪烁
;================================================== FLASH:
MOV A,#08H ;关闭显示
LCALL SEND_I
LCALL DELAY256ms
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL SEND_I
LCALL DELAY256ms
MOV A,#08H ;关闭显示
LCALL SEND_I
LCALL DELAY256ms
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL SEND_I
LCALL DELAY256ms
MOV A,#08H ;关闭显示
LCALL SEND_I
LCALL DELAY256ms
RET
;================================================== ;清屏
;================================================== CLEAR_P:
MOV A,#01H ;清屏
LCALL SEND_I
MOV A,#34H
LCALL SEND_I
MOV A,#30H
LCALL SEND_I
RET
;==================================================
;查表取数据送显示
;==================================================
QUSHU:
CLR A
MOVC A,@A+DPTR ;查表取数据
LCALL SEND_D ;送显示
INC DPTR
LCALL DELAY40ms ;延时40ms,
DJNZ COUNT,QUSHU ;count为要写多少数的数据就是要写多少个数值
RET
;==================================================
;把RAM(R0)
;==================================================
QUSHURAM:
MOV A,@R0 ;查表取数据
LCALL SEND_D ;送显示
INC R0
LCALL DELAY40ms ;延时40ms,
DJNZ COUNT,QUSHURAM ;count为要写多少数的数据就是要写多少个数值
RET
RET
;==================================================
;变换到ASCII码最后结果存在LCD_DATA到LCD_DATA3中在LCD_DIS和LCD_DIS1中取值;==================================================
QUSHUASCII:
MOV A,LCD_DIS
ANL A,#0F0H ;取高位MOV DPTR,#TAB2A ;
RR A
RR A
RR A
RR A
MOV DPTR,#ASCII
MOVC A,@A+DPTR ;查表取数据
MOV LCD_DATA,A ;灌装高位数据以便打印
MOV A,LCD_DIS
ANL A,#0FH ;取高位
MOVC A,@A+DPTR ;查表取数据
MOV LCD_DATA1,A ;灌装高位数据以便打印
MOV A,LCD_DIS1
ANL A,#0F0H ;取高位
RR A
RR A
RR A
RR A
MOVC A,@A+DPTR ;查表取数据
MOV LCD_DATA2,A ;灌装高位数据以便打印
MOV A,LCD_DIS1
ANL A,#0FH ;取高位
MOVC A,@A+DPTR ;查表取数据
MOV LCD_DATA3,A ;灌装高位数据以便打印
RET
;=============================================== ;写数据子程序
;RS=1,RW=0,E=高脉冲,D0-D7=数据
;=============================================== SEND_D:
LCALL CHK_BUSY ;写数据子程序
SETB RS
CLR RW
MOV P0,A
SETB E
NOP
NOP
CLR E
RET
;=============================================== ;写指令子程序数据在A中
;RS=0,RW=0,E=高脉冲,D0-D7=指令码
;=============================================== SEND_I:
LCALL CHK_BUSY ;判忙
CLR RS
CLR RW
MOV P0,A
SETB E
NOP
NOP
CLR E
RET
;================================================
;读数据子程序
;RS=1,RW=1,E=H,D0-D7=数据
;================================================ READ_D:
LCALL CHK_BUSY ;判忙
SETB RS
SETB RW
SETB E
NOP
MOV A,P0
CLR E
MOV STORE,A ;把数据存在STORE中
RET
;================================================ ;;测忙碌子程序
;RS=0,RW=1,E=H,D0-D7=状态字
;================================================ CHK_BUSY:
MOV P0,#0FFH ;测忙碌子程序
CLR RS
SETB RW
SETB E
JB P0.7,$ ;直接寻址位为1转移最高位为0就不忙CLR E
RET
;================================================
;各种参数的延时子函数
;================================================ DELAY100us: ;100us
MOV R6,#06H
DEL11: MOV R7,#08H
DEL12: DJNZ R7,DEL12
DJNZ R6,DEL11
RET
DELAY500us: ;500us
MOV R6,#0CH ;288
DEL21: MOV R7,#18H
DEL22: DJNZ R7,DEL22
DJNZ R6,DEL21
RET
DELAY1ms: ;1ms
MOV R6,#18H
DEL61: MOV R7,#18H
DEL62: DJNZ R7,DEL62
DJNZ R6,DEL61
RET
DELAY40ms: ;延时40ms 500得1ms
MOV R6,#100
DEL41: MOV R7,#200
DEL42: DJNZ R7,DEL42
DJNZ R6,DEL41
RET
DELAY256ms: ;延时256ms
MOV R5,#05H
DEL51: MOV R6,#100
DEL52: MOV R7,#0FFH
DEL53: DJNZ R7,DEL53
DJNZ R6,DEL52
DJNZ R5,DEL51
RET
DELAY1s: ;1秒
MOV R5,#16H
DEL31: MOV R6,#100
DEL32: MOV R7,#0FFH
DEL33: DJNZ R7,DEL33
DJNZ R6,DEL32
DJNZ R5,DEL31
RET
DELAY10s: ;10秒
MOV R5,#00DCH
DEL71: MOV R6,#100
DEL72: MOV R7,#0FFH
DEL73: DJNZ R7,DEL73
DJNZ R6,DEL72
DJNZ R5,DEL71
RET
;****************初始化数据表******************************* TAB1:
TAB1A: DB 'maid:piaoran ' ;显示在第一行
TAB1B: DB 'QQ:384710930 ' ;显示在第二行
TAB1C: DB 'THL:183******** ' ;显示在第三行
TAB1D: DB 'DATA:2014/10/4 ' ;显示在第四行
;****************12864数据表*******************************
TAB2:
TAB2A: DB 'move A,#data ' ;显示在第一行
TAB2B: DB 'A: ACC ' ;显示在第二行
TAB2C: DB 'data:34H ' ;显示在第三行
TAB2D: DB 'DATA:2014/10/4 ' ;显示在第四行
ASCII: DB '0123456789ABCDEF' ;显示在第一行
;*-------------------------------------------------------------------- *
;*汉字字模表
;*汉字库: 宋体16.dot,横向取模左高位,数据排列:从左到右从上到下
;*用PCtoLCD2002的设置:点阵格式:阴码取模方式:逐行式每行显示数据:点阵16 索引:8 取模走向:顺向输出数制:16进制输出选项:只选输出精简格
; 段前缀:无段后缀:无注释前缀:" 注释后缀:”, 数据前缀:00 数据后缀:H, 行前缀:DB 行后缀:无行尾缀:无
;*-------------------------------------------------------------------- *
TU_TAB1: ;CD和山
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,007FH,00F0H,0000H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,00FFH,00FCH,0000H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0001H,00FFH,00FFH,0000H,0000H,0000 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0003H,00FFH,00FFH,0000H,0000H,0000 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0007H,00E0H,001FH,0080H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,000FH,00C0H,000FH,0080H,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,001FH,0080H,0007H,0080H,0000H,000
0H,0000H,0000H
DB
007FH,00C0H,0000H,0000H,0000H,0000H,0000H,0000H,003FH,0000H,0007H,00C0H,0000H,000 0H,0000H,0000H
DB
00FFH,00F0H,0000H,0000H,0000H,0000H,0000H,0000H,003EH,0000H,0003H,00E0H,0000H,0000 H,0000H,0000H
DB
00FFH,00FCH,0000H,0000H,0000H,0000H,0000H,0003H,00FCH,0000H,0003H,00F8H,0000H,0000 H,0000H,0000H
DB
00FFH,00FEH,0000H,0000H,0000H,0000H,0000H,001FH,00FCH,0000H,0001H,00FFH,0000H,0000 H,0000H,0000H
DB
0000H,007FH,0000H,0000H,0000H,0000H,0000H,007FH,00F8H,0000H,0000H,007FH,00E0H,0000 H,0000H,0000H
DB
0000H,001FH,0080H,0000H,0000H,0000H,0001H,00FFH,00F0H,0000H,0000H,003FH,00FFH,00FF H,00C0H,0000H
DB
0000H,000FH,00C0H,0000H,0000H,0000H,0007H,00FFH,0000H,0000H,0000H,000FH,00FFH,00FF H,00F0H,0000H
DB
0000H,0007H,00C0H,0000H,0000H,0000H,000FH,00F8H,0000H,0000H,0000H,0001H,00FFH,00FF H,00FFH,0080H
DB
0000H,0003H,00E0H,0000H,0000H,0000H,003FH,00E0H,0000H,0000H,0000H,0000H,003FH,00FF H,00FFH,00E0H
DB
0000H,0003H,00E0H,0000H,0000H,0000H,007FH,0080H,0000H,0000H,0000H,0000H,0000H,000 0H,007FH,00E0H
DB
0000H,0001H,00F0H,0000H,0000H,0000H,00FEH,0000H,0000H,0000H,0000H,0000H,0000H,000 0H,000FH,00F0H
DB
0000H,0001H,00F8H,0000H,0000H,0001H,00F8H,0000H,0000H,0000H,0000H,0000H,0000H,000 0H,0000H,00F8H
DB
0000H,0000H,00FCH,0000H,0000H,0003H,00F0H,0000H,0004H,0000H,0000H,0000H,0000H,000 0H,0000H,00FCH
DB
0000H,0000H,007CH,0000H,0000H,000FH,00E0H,0000H,007FH,0000H,0000H,0000H,00E0H,000 0H,0000H,007CH
DB
0000H,0000H,003FH,0000H,0000H,001FH,00C0H,0000H,00FFH,00E0H,0000H,0003H,00F8H,0000 H,0000H,003EH
DB
0000H,0000H,003FH,0080H,0000H,003FH,0080H,0003H,00FFH,00F8H,0000H,0007H,00FEH,0000 H,0000H,003FH
DB
0000H,0000H,001FH,00C0H,0000H,007EH,0000H,0007H,00FFH,00FEH,0000H,0007H,00FFH,00C0 H,0000H,001FH
DB
0000H,0000H,0007H,00E0H,0001H,00FCH,0000H,000FH,00E1H,00FFH,0000H,0007H,00BFH,00F0 H,0000H,000FH
DB
0000H,0000H,0003H,00FCH,0003H,00F8H,0000H,001FH,00C0H,003FH,0080H,0007H,008FH,00FC H,0000H,0007H
DB
0000H,0000H,0001H,00FFH,00FFH,00F0H,0000H,003FH,0000H,000FH,00C0H,000FH,0081H,00FE H,0000H,0003H
DB
0000H,0000H,0000H,007FH,00FFH,00E0H,0000H,003EH,0000H,0003H,0080H,000FH,0080H,007F H,0000H,0003H
DB
0000H,0000H,0000H,003FH,00FFH,0080H,0000H,007CH,0000H,0001H,0000H,001FH,0000H,001F H,0080H,0001H
DB
0000H,0000H,0000H,0007H,00FFH,0000H,0000H,007CH,0000H,0000H,0000H,001FH,0000H,000 FH,00C0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F8H,0000H,0000H,0000H,003EH,0000H,000 7H,00C0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F8H,0000H,0000H,0000H,003EH,0000H,000 3H,00E0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,003CH,0000H,000 3H,00E0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,007CH,0000H,000 1H,00F0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,007CH,0000H,000 1H,00F0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,0078H,0000H,000 0H,00F8H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,00F8H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,00F0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0000H,00F0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0001H,00F0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0001H,00F0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F0H,0000H,0000H,0003H,00E0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F8H,0000H,0000H,0003H,00E0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,00F8H,0000H,0000H,0003H,00C0H,0000H,000 0H,0078H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0078H,0000H,0000H,0007H,00C0H,0000H,000 0H,00F8H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,007CH,0000H,0000H,0007H,0080H,0000H,000 0H,00F8H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,007CH,0000H,0000H,000FH,0080H,0000H,000 1H,00F0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,003CH,0000H,0003H,008FH,0080H,0000H,000 3H,00F0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,003EH,0000H,0007H,008FH,0000H,0000H,000 7H,00E0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,001FH,0000H,000FH,009FH,0000H,0000H,001F H,00C0H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,000FH,0080H,000FH,009FH,0000H,0000H,003F
H,0080H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,000FH,0080H,001FH,003EH,0000H,0000H,00FF H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0007H,00E0H,003FH,003EH,0000H,0003H,00F EH,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0003H,00F0H,007EH,003CH,0000H,000FH,00F 8H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0001H,00FFH,00FCH,003CH,0000H,003FH,00F0 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,00FFH,00F8H,007CH,0000H,007FH,00C 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,007FH,00F0H,00FCH,0003H,00FFH,0000 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,001FH,00E0H,007FH,00FFH,00FCH,0000 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,001FH,00FFH,00F0H,0000 H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,000FH,00FFH,00C0H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0007H,00FFH,0000H,000 0H,0000H,0000H
DB
0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,0000H,000 0H,0000H,0000H
end