在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3241|回复: 3

[原创] 1602汇编程序

[复制链接]
发表于 2011-5-12 15:57:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
;1602指令
;端口按照开发板定义
RS  EQU  P2.4  ;RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW  EQU  P2.5  ;RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
E  EQU  P2.6  ;E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
DATE EQU  P0
//当RS和RW共同为低电平时,可以写入指令或者显示地址
//当RS为低电平,RW为高电平时,可以读忙信号
//当RS为高电平,RW为低电平时,可以写入数据
/*******************************************************************************************************
各种指令:
//功能设置命令,显示模式
MOV  DATE, #20H ;20H~23H都可以。4位总线,单行显示,显示5x7的点阵字符
MOV  DATE, #24H ;24H~27H都可以。4位总线,单行显示,显示5x10的点阵字符
MOV  DATE, #28H ;28H~2BH都可以。4位总线,双行显示,显示5x7的点阵字符
MOV  DATE, #2CH ;2CH~2FH都可以。4位总线,双行显示,显示5x10的点阵字符
MOV  DATE, #30H ;30H~33H都可以。8位总线,单行显示,显示5x7的点阵字符
MOV  DATE, #34H ;34H~37H都可以。8位总线,单行显示,显示5x10的点阵字符
MOV  DATE, #38H ;38H~3BH都可以。8位总线,双行显示,显示5x7的点阵字符
MOV  DATE, #3CH ;3CH~3FH都可以。8位总线,双行显示,显示5x10的点阵字符
//显示开关控制
MOV  DATE, #08H ;08H~0BH都可以。关显示
MOV  DATE, #0CH ;不显示光标,光标不闪烁
MOV  DATE, #0DH ;不显示光标,光标闪烁,明显不可能//
MOV  DATE, #0EH ;显示光标,光标不闪烁
MOV  DATE, #0FH ;显示光标,光标闪烁
//输入模式
MOV  DATE, #04H ;光标左移,文字不移
MOV  DATE, #05H ;光标左移,文字左移
MOV  DATE, #06H ;光标右移,文字不移
MOV  DATE, #07H ;光标右移,文字右移
//光标或显示的字符移位
MOV  DATE, #10H ;10H~13H都可以。光标右移
MOV  DATE, #14H ;14H~17H都可以。光标左移
MOV  DATE, #18H ;18H~1BH都可以。文字右移
MOV  DATE, #1CH ;1CH~1FH都可以。文字左移
//清屏
MOV  DATE, #01H
//光标返回到起始位置
MOV  DATE, #02H ;也可以是03H
//要显示字符时要先输入显示字符地址,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是80H+地址
;16x2的屏幕地址为:
;第一行16个字符:00H,01H, 02H ...... 0FH
;第二行16个字符:40H,41H, 42H ...... 4FH
MOV  DATE, A
*****************************************************************************************************/
//读忙标志
CHECKBUSY: PUSH   ACC
           MOV   DATE,#0FFH
           CLR    RS
           SETB   RW
           SETB   E
  BUSYLOOP: JB   DATE.7,BUSYLOOP
          CLR   E
           POP   ACC
           RET
//写指令,要写的指令在寄存器A中
INSTRUCTION: PUSH ACC
    CLR  RS
    CLR  RW
    MOV  DATE, A
    SETB E
    CLR  E
    POP  ACC
    ACALL  DELAY40US   ;1602大部分指令执行时间都是40us
    RET
//写数据到CGRAM或DDRAM,要写的数据在寄存器A中
WRITEDATE:  PUSH ACC
    SETB RS
    CLR  RW
    MOV  DATE, A
    SETB E
    CLR  E
    POP  ACC
    ACALL  DELAY40US   ;1602大部分指令执行时间都是40us
    RET
//清屏
CLRS:  ACALL CHECKBUSY
   MOV  A,  #01H
   ACALL INSTRUCTION   ;清屏
   ACALL   DELAY5MS   ; 清屏程序执行时间是1.64ms
   RET
//从CGRAM或DDRAM读数据,读出的数据放在寄存器A中
READDATE:  PUSH ACC
    SETB RS
    SETB RW
    MOV  A, DATE
    SETB E
    CLR  E
    POP  ACC
    ACALL  DELAY40US   ;1602大部分指令执行时间都是40us
    RET
/******************************************************
初始化化过程(复位过程)
1.延时15ms,等待VDD大于4.5V
2.写指令38H(不检测忙信号),功能设置,8位数据线
3.延时5ms,等待时间大于4.1ms
4.写指令38H(不检测忙信号),功能设置,8位数据线
5.延时5ms,等待时间大于100us  
6.写指令38H(不检测忙信号),功能设置,8位数据线
液晶显示模块是一个慢显示器件,在执行每条指令前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
以后都要检测忙信号
7.显示模式设置
8.关显示
9.清屏
10.光标、显示等设置
******************************************************/
//初始化
INITI:  ACALL   DELAY5MS
   ACALL   DELAY5MS
   ACALL   DELAY5MS  ;延时15ms,等待VDD大于4.5V
   MOV  A,  #30H
   ACALL INSTRUCTION
   ACALL   DELAY5MS
   ACALL INSTRUCTION
   ACALL   DELAY5MS
   ACALL INSTRUCTION  ;以上为初始化前的一些操作
   
   ACALL CHECKBUSY
   MOV  A,  #30H  
   ACALL INSTRUCTION   ;8位总线,单行显示,显示5x7的点阵字符
   ACALL CHECKBUSY
   MOV  A,  #08H
   ACALL INSTRUCTION   ;关显示
   ACALL CLRS    ;清屏
   
   ACALL CHECKBUSY
   MOV  A,  #07H
   ACALL INSTRUCTION   ;光标右移,文字右移
   ACALL CHECKBUSY
   MOV  A,  #0FH
   ACALL INSTRUCTION   ;显示光标,光标闪烁
   RET
 楼主| 发表于 2011-5-12 16:01:23 | 显示全部楼层
刚才发的,看得不清楚,发个附件。自己总结的,供大家参考。要用1602显示时可以直接调用已经写好的子程序就行了

1602指令.rar

1.55 KB, 下载次数: 17 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2011-7-28 15:54:11 | 显示全部楼层
谢谢楼主。
发表于 2011-8-15 21:52:20 | 显示全部楼层
谢楼主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 07:02 , Processed in 0.026832 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表