还剩3页未读,继续阅读
文本内容:
;本程序用来驱动LCD1602RS BITP
2.0;RS引脚RW BITP
2.1;RW引脚E BITP
2.2;使能信号引脚DAT_X EQU08H;存放DDRAM的列序号DAT_Y EQU09H;存放DDRAM的行序号DAT_C EQU10H;存放待显示的数据ORG0000HAJMP STARTORG0030H;对1£口进行初始化*START:MOV SP,#5FH;LCALL DL_1640U;延时大约(不小于)
1.64msMOV A,#38H;初始化LCD,数据总线为8位;显示2行,57点阵/字符LCALL CMDJLC;调用指令发送程序MOV A,#OFH;开显示,有光标闪烁LCALL CMD_LC;调用指令发送程序MOV A,#06H;写入新数据后光标右移,;写入新数据后,屏幕不移动LCALL CMD_LC;调用指令发送程序LCALL CMD_LC;调用指令发送程序LCALL DL_1640U;延时
1.64ms,因为清屏指令;的执行时间是
1.64ms;主程序*MAIN:MOV DAT_C,#41H;把A的ASCII码存入DAT_C中MOV DAT_X,#06;把列的序号存入DAT_X中MOV DAT_Y,#0;把行的序号存入DAT_Y中LCALL DAT_DISP;调用显示程序AJMP$;主程序到此结束;指令发送程序CMD_LC:CLR RSCLRRWMOV P0,ASETB ECLR ELCALL DL_40U;延时Mus,我们知道大部分;的指令执行的时间都是40usRET;数据发送程序DAT_LC:SETB RSCLRRWSETB E;下降沿执行指令,;所以要先高后低CLRELCALLDL_40U;延时40usRET;数据显示程序DAT_DISP:MOV RO,DAT_Y;把行序号送到RO中CJNE RO,#1,DAT」;判断行的序号是0;还是1如果是0,则;把列序号加上#80H;如果是01,则把列;序号加上#OCOHMOV A,DAT_XADD A,#OCOHLCALL CMD_LCMOV A,DAT_CLCALL DAT_LCRETDAT」MOV A,DAT_XADD A,#80HLCALL CMD_LCLCALL DAT_LCRET;本程序用来延时大约(不小于)40us*DL_40U:MOV R7,#20;晶振频率是12M的情况下DJNZ R7,$RET;本程序用来延时大约(不小于)
1.64ms*DL_1640U:MOV R7,#20;晶振频率是12M的情况下DL_1640:MOV R6,#40DJNZ R6,$DJNZ R7,DL_1640RETEND。