找回密码
 注册
搜索
查看: 1146|回复: 2

[MCU资料] 1602液晶全屏幕显示0-9

[复制链接]
发表于 2009-9-29 12:12:16 | 显示全部楼层 |阅读模式
;********************************************************************************
;1602液晶全屏幕显示0-9                                                          *
;********************************************************************************
;*  日期:  2007-3-25                                                            *
;*  版本:  3.0                                                                  *
;*  作者:  深圳学林电子有限公司     专业8051单片机教学站                        *
;*  邮箱: sxj1974@163.com                                                       *
;*  网站: http://www.51c51.com     http://www.8951.com    更多例程请登陆网站   *
;********************************************************************************
;*  硬件:此程序在本公司xlisp系列单片机实验仪运行通过                           *
;********************************************************************************
;* 【版权】 Copyright(C)深圳学林电子有限公司 www.51c51.com  All Rights Reserved *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;********************************************************************************
RSPIN   EQU     P2.0
RWPIN   EQU     P2.1
EPIN    EQU     P2.2
XPOS    EQU     20H        ;列方向地址指针(用于LCDPOS子程序)
YPOS    EQU     21H        ;行方向地址指针(用于LCDPOS子程序)
        ORG     0080H
        JMP     START
START:  MOV     SP,#60H
        CLR     EPIN
MAIN:
        MOV     R7,#'0'    ;测试主程序
MN_PA:                     ;整屏循环显示"0"到"9"及空格
        CALL    LCDRESET
        MOV     A,R7
        CALL    LCDFILL
        CALL    DELAY400MS
        INC     R7
        MOV     A,R7
        CJNE    A,#'9'+1,MN_PA
        MOV     A,#' '
        CALL    LCDFILL
        CALL    DELAY400MS
        JMP     MAIN
LCDFILL:
        MOV     B,A
        MOV     YPOS,#0
LFL_PB: MOV     XPOS,#0    ;整屏显示A中所代表字符
LFL_PA: MOV     A,B
        CALL    LCDWRITE
        INC     XPOS
        MOV     A,XPOS
        CJNE    A,#20,LFL_PA
        INC     YPOS
        MOV     A,YPOS
        CJNE    A,#4,LFL_PB
        RET
LCDPOS:                        ;设置第(XPOS,YPOS)个字符的DDRAM地址
        PUSH    ACC
        CLR     C              ;X位置范围(0到19)
        MOV     A,XPOS
        SUBB    A,#20
        JC      LPS_LBX
        MOV     XPOS,#0
LPS_LBX:ANL     YPOS,#03H      ;Y位置范围(0到3)
        MOV     A,YPOS         ;(XPOS,YPOS)对应DDRAM地址
        CJNE    A,#00,LPS_LA1
        MOV     A,XPOS         ;(第一行)X: 第0----19个字符
        JMP     LPS_LAX        ;    DDRAM:   0----13H
LPS_LA1:CJNE    A,#01,LPS_LA2
        MOV     A,XPOS         ;(第二行)X: 第0----19个字符
        ADD     A,#40H         ;    DDRAM:  40----53H
        JMP     LPS_LAX        ;
LPS_LA2:CJNE    A,#02,LPS_LAY
        MOV     A,XPOS         ;(第三行)X: 第0----19个字符
        ADD     A,#14H         ;    DDRAM:  14----27H
        JMP     LPS_LAX
LPS_LAY:MOV     A,XPOS         ;(第四行)X: 第0----19个字符
        ADD     A,#54H         ;    DDRAM:  54----67H
LPS_LAX:ORL     A,#80H         ;设置DDRAM地址
        CALL    LCDWC
        POP     ACC
        RET
LCDWRITE:                      ;定位写字符子程序
        CALL    LCDPOS         ;定位显示地址
        CALL    LCDWD          ;写字符
        RET
LCDRESET:                       ;初始化程序
        CALL    DELAY5MS        ;延时15MS
        CALL    DELAY5MS
        CALL    DELAY5MS
        MOV     A,#38H          ;显示模式设置(不检测忙信号)
        CALL    LCDWCN          ;共三次
        CALL    DELAY5MS
        MOV     A,#38H
        CALL    LCDWCN
        CALL    DELAY5MS
        MOV     A,#38H
        CALL    LCDWCN
        MOV     A,#38H          ;显示模式设置(以后均检测忙信号)
        CALL    LCDWC
        MOV     A,#08H          ;显示关闭
        CALL    LCDWC
        MOV     A,#01H          ;显示清屏
        CALL    LCDWC
        MOV     A,#06H          ;显示光标移动设置
        CALL    LCDWC
        MOV     A,#0CH          ;显示开及光标设置
        CALL    LCDWC
        RET
LCDWC:                          ;送控制字子程序(检测忙信号)
        CALL    WAITIDLE
LCDWCN:                         ;送控制字子程序(不检测忙信号)
        CLR     RSPIN           ;RS=0 RW=0 E=高脉冲
        CLR     RWPIN
        MOV     P0,A
        SETB    EPIN
        NOP
        CLR     EPIN
        RET
LCDWD:                              ;写字符子程序
        CALL    WAITIDLE
        SETB    RSPIN               ;RS=1 RW=0 E=高脉冲
        CLR     RWPIN
        MOV     P0,A
        SETB    EPIN
        NOP
        CLR     EPIN
        RET
WAITIDLE:
        PUSH    ACC                 ;正常读写操作之前必须检测LCD控制器状态
        MOV     P0,#0FFH
        CLR     RSPIN               ;RS=0 RW=1 E=高电平
        SETB    RWPIN
        SETB    EPIN
WTD_PA: NOP                         ;DB7:    0  LCD控制器空闲
        JB      P0.7,WTD_PA         ;        1  LCD控制器忙
        CLR     EPIN
        POP     ACC
        RET
DELAY5MS:
        MOV     R1,#25              ;延时子程序(5MS)
DL5_PA: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL5_PA
        RET
DELAY400MS:
        MOV     R0,#20              ;延时子程序(400MS)
DL4_PA: MOV     R1,#100
DL4_PB: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL4_PB
        DJNZ    R0,DL4_PA
        RET
        END




[em01]
发表于 2009-10-7 22:17:15 | 显示全部楼层
好东东[em01][em01]
点评回复

使用道具 举报

发表于 2010-5-30 12:29:51 | 显示全部楼层
我只跟帖,不发表意见!
本文来自:我爱研发网(52RD.com) - R&D大本营
详细出处:http://www.52rd.com/bbs/post.asp?action=re&BoardID=127&replyID=345481&id=92020&star=1&reply=true
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 22:52 , Processed in 0.046045 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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