萬用電路板

----纯属爱好,谁与共鸣

« 1602A液晶屏的驱动程序(C语言)C语言的逻辑错误几例 »

1602A液晶屏的驱动程序(汇编)

汇编语言源程序 

LCM_RS EQU P3.7 ;//定义接口

LCM_RW EQU P3.6

LCM_E EQU P3.5

 

LCM_DATA EQU P1 ;数据接口

 

ORG 0000H ;从0000H处开始

SJMP MAIN ;跳转到MAIN处

 

ORG 0030H ;主程序从0030H处开始

MAIN: MOV SP,#70H ;堆栈指针指向70H

LCALL INITIAL ;调用启动LCM子程序进行初始化

LCALL CLS ;调用清除LCM子程序

MOV A,#80H ;向A送立即数80H设定显示地址为第一行第一列

LCALL WRITE_COM ;调用写指令到LCM子程序

MOV DPTR,#LINE1 ;将第一行字符串的启始地址送如DPTR中

LCALL DISP ;调用显示字符串到LCM子程序

MOV A,#0C0H ;向A送立即数0C0H设定显示地址为第二行第一列

LCALL WRITE_COM ;调用写指令到LCM子程序

MOV DPTR,#LINE2 ;将第二行字符串的启始地址送如DPTR中

LCALL DISP ;调用显示字符串到LCM子程序

SJMP $ ;程序动态停机

 

LINE1: DB " www.JiangX.net ",00H;第一行字符串

LINE2: DB " 1602A ",00H ;第二行字符串

 

INITIAL: MOV A,#38H ;启动LCM子程序

LCALL WRITE_COM

MOV A,#0EH

LCALL WRITE_COM

MOV A,#06H

LCALL WRITE_COM

RET

 

CHECK_BUSY: PUSH ACC ;查询忙碌信号子程序

BUSY_LOOP: CLR LCM_E

SETB LCM_RW

CLR LCM_RS

SETB LCM_E

MOV A,LCM_DATA

CLR LCM_E

JB ACC.7,BUSY_LOOP

POP ACC

LCALL DEL

RET

 

WRITE_COM: LCALL CHECK_BUSY ;写指令到LCM子程序

CLR LCM_E

CLR LCM_RS

CLR LCM_RW

SETB LCM_E

MOV LCM_DATA,A

CLR LCM_E

RET

 

WRITE_DATA: LCALL CHECK_BUSY ;写数据到LCM子程序

CLR LCM_E

SETB LCM_RS

CLR LCM_RW

SETB LCM_E

MOV LCM_DATA,A

CLR LCM_E

RET

 

CLS: MOV A,#01H ;清除LCM子程序

LCALL WRITE_COM

RET

 

DEL: MOV R6,#5 ;2.7MS延时子程序

D1: MOV R7,#248

DJNZ R7,$

DJNZ R6,D1

RET

 

DISP: PUSH ACC ;将A的内容压栈

DISP_LOOP: CLR A ;A清零

MOVC A,@A+DPTR ;查表将字符串内容送入A

JZ END_DISP ;若查到的内容为0则终止查表

LCALL WRITE_DATA ;调用写数据到LCM子程序

INC DPTR ;DPTR加1指向下一个对象

SJMP DISP_LOOP ;跳转到DISP_LOOP循环执行

END_DISP: POP ACC ;弹出压栈内容至A

RET

 

END ;程序结束

  • quote 5.zhang
  • 1602液晶屏是不是只能显示1602液晶模块内部的字符发生存储器(CGROM)已经存储了的160个不同的点阵字符图形???如果要显示的字符在字符发生存储器(CGROM)内没有,这个字符能否显示?
    jiangx 于 2008-10-11 18:54:17 回复
    能显示:http://www.jiangx.net/post/223.html
  • 2008-10-11 17:46:36 回复该留言
  • quote 4.jiangx
  • 反应比较慢的LCM,如果不延时或者延时过短,出现不正常工作主要体现在显示上面有乱码。
  • 2008-10-11 1:52:29 回复该留言
  • quote 3.zhang
  • 延时子程序为什么要延时2.7MS???
    jiangx 于 2008-10-11 1:50:17 回复
    LCD模块从内部忙碌变为稳定接收数据这个过程需要一定的时间,为了增加模块能接收指令或数据的稳定性,加入一小段延时,具体时长可能要参考LCM的时序图,不过这个时间并不是那么严格,各模块的指标有所区别,也许有的根本不需要这段延时就可稳定工作。
  • 2008-10-9 9:50:39 回复该留言
  • quote 1.zhang
  • 延时子程序为什么是2.7MS???
    jiangx 于 2008-10-7 23:44:29 回复
    {1+(1+2*248+2)*5+2}*{(1/11.0592MHz)*12}=2710us

    请参考:单片机汇编延时程序分析http://www.jiangx.net/post/70.html
  • 2008-10-7 20:40:22 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

赞助商广告

最近发表

热文排行

最新评论及回复

广告

图标汇集

Powered By Z-Blog 1.8 Walle Build 100427

Copyright 2008-2011 JiangX.com 萬用電路板 All Rights Reserved.
鄂ICP备08003060号 [login]