;;;;;;;;;;;; 演示程序
;12864M 带中文字库
;
;P0为数据总线
;定义LCD控制线
WRA EQU P2.6 ;R/W, 0:读 1:写
EE EQU P2.5 ;E(SLCK)使能控制位(同步时钟)
RS EQU P2.7 ;0:指令 1:数据
REST EQU P2.4 ;复位(低电平有效)
WRDATA EQU 35H ;数据/命令寄存
CSEG AT 0000H
NOP
MAIN:
CLR EE
NOP
CLR REST ;复位
LCALL DELAY
SETB REST
NOP
MOV WRDATA,#01 ;清屏
LCALL WRCODE
MOV WRDATA,#0CH ;开显示屏
LCALL WRCODE
MOV WRDATA,#80H ;设置地址
LCALL WRCODE
MOV DPTR,#CCTAB
MOV R7,#58
GGHT:
CLR A
MOVC A,@A+DPTR ;读汉字内码
MOV WRDATA,A
LCALL WRDDA
INC DPTR
DJNZ R7,GGHT
NOP
LOOP:
NOP
NOP
NOP
LJMP LOOP
DELAY:
MOV R5,#0
MOV R6,#0
MOV R7,#2
DEL:
DJNZ R5,DEL
DJNZ R6,DEL
DJNZ R7,DEL
RET
;--------------------------------------------
; 写指令子程序
WRCODE:
MOV P0,#0FFH
CLR RS
SETB WRA
SETB EE
MOV A,P0 ;读BF, 查忙
CLR EE
JB ACC.7,WRCODE
CLR WRA
MOV P0,WRDATA ;指令送P0口
SETB EE
CLR EE
RET
WRDDA:
MOV P0,#0FFH
CLR RS
SETB WRA
SETB EE
MOV A,P0 ;读BF, 查忙
CLR EE
JB ACC.7,WRDDA
SETB RS
CLR WRA
MOV P0,WRDATA ;数据送P0口
SETB EE
CLR EE
RET
CCTAB: ;中文字库内码表格
DB 0BAH,0BAH,0D7H,0D6H,0CDH,0BCH,0D0H,0CEH,0B5H,0E3H,0D5H,0F3H,0D2H,0BAH,0BEH,0A7H
DB 0D7H,0D6H,0BCH,0B0H,0CDH,0BCH,0D0H,0CEH,0C4H,0DAH,0D6H,0C3H,038H,031H,039H,032H
DB 0CFH,0D4H,0CAH,0BEH,0C4H,0A3H,0BFH,0E9H,0BFH,0C9H,0CFH,0D4H,0CAH,0BEH,0BAH,0BAH
DB 0B8H,0F6H,0D6H,0D0H,0CEH,0C4H,0BAH,0BAH,0D7H,0D6H
END
改为C51后代码如下:
#define uchar unsigned char
uchar code cctab[]={0xBA,0xBA,0xD7,0xD6,0xCD,0xBC,0xD0,0xCE,0xB5,0xE3,0xD5,0xF3,0xD2,0xBA,0xBE,0xA7,0xD7,0xD6,0xBC,0xB0,0xCD,0xBC,0xD0,0xCE,0xC4,0xDA,0xD6,0xC3,0x38,0x31,0x39,0x32,0xCF,0xD4,0xCA,0xBE,0xC4,0xA3,0xBF,0xE9,0xBF,0xC9,0xCF,0xD4,0xCA,0xBE,0xBA,0xBA,0xB8,0xF6,0xD6,0xD0,0xCE,0xC4,0xBA,0xBA,0xD7,0xD6};
sbit WRA=P2^6;
sbit EE=P2^5;
sbit RS=P2^7;
sbit REST=P2^4;
Delay()
{
int i;
for(i=0;i <=10000;i++)
{}
}
WrCode(uchar wcode)
{
uchar temp;
P0=0xff;
RS=0;
WRA=1;
EE=1;
temp=P0;
EE=0;////
temp=(temp> > 7 & 0x01);
while(temp==1)
{
temp=P0;
temp=(temp> > 7 & 0x01);
}
WRA=0;////
P0=wcode;
EE=1;
EE=0;
}
WrData(uchar wdata)
{
uchar temp;
P0=0xff;
RS=0;
WRA=1;
EE=1;
temp=P0;
EE=0;/////
temp=(temp> > 7 & 0x01);
while(temp==1)
{
temp=P0;
temp=(temp> > 7 & 0x01);
}
RS=1;
WRA=0;
P0=wdata;
EE=1;
EE=0;
}
main()
{
uchar i;
EE=0;
REST=0;
Delay();
REST=1;
WrCode(1);
WrCode(0x0C);
WrCode(0x80);
for(i=0;i <=57;i++)
{
WrData(cctab[i]);
}
while(1);
}