找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6252|回复: 1
收起左侧

本人的12864M LCD程序(asm51单片机汇编程序)

[复制链接]
ID:72705 发表于 2015-1-24 16:15 | 显示全部楼层 |阅读模式
X      EQU   26H         ;LCD 地址变量
         RS EQU P2.0
         RW EQU P2.1
         EN   EQU P2.2
         PSB EQU P2.3
         RST EQU P2.5

          ORG 0000H
          JMP   MAIN
          ORG 0003H          ;外部中断INT0入口地址

MAIN:
           MOV    SP,#40H
           MOV    A,#00H
           MOV    R0,#20H
LOOP0:     MOV    @R0,A           ;20H-26H清零
           INC    R0
           CJNE   R0,#27H,LOOP0
           MOV   IE,#81H        ;允许总中断中断,使能 INT0 外部中断
           MOV   TCON,#01H      ;触发方式为脉冲负边沿触发
           SETB RST
    NOP
    SETB PSB             ;8位数据,并口
           CALL   SET_LCD         ;初始化TS12864m
           CALL   MENU1
           CALL   MENU2
           CALL   MENU3
           CALL   MENU4
LOOP1:
           MOV   A,22H
           CJNE   A,#40H,LOOP2            
LOOP2:     CJNE   A,#04H,LOOP3            
LOOP3:     JMP    LOOP1
;=============================================
;   LCD 初始化设置
;=============================================-
SET_LCD:
           CLR   EN
           MOV   A,#34H      ;34H--扩充指令操作
           CALL   WCOM
           MOV   A,#30H      ;30H--基本指令操作
           CALL   WCOM
           MOV   A,#0CH      ;开显示,关光标,
           CALL   WCOM
           MOV   A,#01H      ;清除 LCM 显示屏
           CALL   WCOM
           RET
;===================================================
;在 LCM 各行显示信息字符
;===================================================
LCD_SHOW:
           CJNE   A,#1,LINE2   ;判断是否为第一行
   LINE1:   MOV   A,#80H        ;设置 LCD 的第一行地址
           CALL   WCOM         ;写入命令
           CALL   CLR_LINE     ;清除该行字符数据
           MOV   A,#80H        ;设置 LCD 的第一行地址
           CALL   WCOM         ;写入命令
           JMP   FILL
   LINE2:   CJNE   A,#2,LINE3   ;判断是否为第三行
           MOV   A,#090H       ;设置 LCD 的第三行地址
           CALL   WCOM         ;写入命令
           CALL   CLR_LINE     ;清除该行字符数据
           MOV   A,#090H       ;设置 LCD 的第三行地址
           CALL   WCOM
           JMP   FILL
   LINE3:   CJNE   A,#3,LINE4   ;判断是否为第三行
           MOV   A,#088H       ;设置 LCD 的第三行地址
           CALL   WCOM         ;写入命令
           CALL   CLR_LINE     ;清除该行字符数据
           MOV   A,#088H       ;设置 LCD 的第三行地址
           CALL   WCOM
           JMP   FILL
   LINE4:   CJNE   A,#4,LINE5   ;判断是否为第三行
           MOV   A,#098H       ;设置 LCD 的第三行地址
           CALL   WCOM         ;写入命令
           CALL   CLR_LINE     ;清除该行字符数据
           MOV   A,#098H       ;设置 LCD 的第三行地址
           CALL   WCOM
   FILL:    CLR   A             ;填入字符
           MOVC   A,@A+DPTR    ;由消息区取出字符
           CJNE   A,#0,LC1     ;判断是否为结束码
   LINE5:   RET
   LC1:     CALL   WDATA        ;写入数据
           INC   DPTR          ;指针加1
           JMP   FILL          ;继续填入字符
           RET
;=================================================
;清除该行 LCM 的字符
;=================================================
CLR_LINE:
           MOV   R0,#16      
    CL1:    MOV   A,#' '
           CALL   WDATA
           DJNZ   R0,CL1
           RET
;==================================================
;LCM 显示工作菜单信息
;==================================================
MENU1:
          MOV    DPTR,#MENU1A
          MOV    A,#1          ;在第一行显示信息
          CALL   LCD_SHOW
          RET
MENU1A:   DB   "MUC 控制GPRS模块",0
MENU2:
          MOV    DPTR,#MENU2A
          MOV    A,#2          ;在第二行显示信息
          CALL   LCD_SHOW
          RET
MENU2A:   DB   "TEL:13991316679",0
MENU3:
          MOV    DPTR,#MENU3A
          MOV    A,#3          ;在第三行显示信息
          CALL   LCD_SHOW
          RET
MENU3A:   DB   "方案设计: 龚   伟",0
MENU4:
          MOV    DPTR,#MENU4A
          MOV    A,#4          ;在第四行显示信息
          CALL   LCD_SHOW
          RET
MENU4A:   DB   "程序编写: 靳   鹏",0
;==============================================
; 写指令使能子程序
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;==============================================
WCOM:
           MOV   P0,A
           CLR RS
           CLR RW
           SETB EN
           CALL   DELAY0
           CLR EN
           RET
;=============================================
;写数据使能子程序
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;=============================================
WDATA:
           MOV    P0,A
           SETB   RS
           CLR    RW
           SETB   EN
           CALL   DELAY0
           CLR    EN
           RET
DELAY0:    MOV   R7,#250       ;延时500微秒
           DJNZ   R7,$
           RET
         END

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表