最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

单片机:LCD(1602)动态显示(汇编)

来源:动视网 责编:小OO 时间:2025-09-23 18:13:16
文档

单片机:LCD(1602)动态显示(汇编)

单片机:LCD(1602)动态显示(汇编)2009年06月13日星期六15:31作者:gguoqing  出处:伟纳电子http://www.willar.com/mcu_view.asp?id=15显示内容:  CHINESE                                                                                                *;*              NEWYEAR               
推荐度:
导读单片机:LCD(1602)动态显示(汇编)2009年06月13日星期六15:31作者:gguoqing  出处:伟纳电子http://www.willar.com/mcu_view.asp?id=15显示内容:  CHINESE                                                                                                *;*              NEWYEAR               
单片机:LCD(1602)动态显示(汇编)

2009年06月13日 星期六 15:31

作者:gguoqing   出处:伟纳电子http://www.willar.com/mcu_view.asp?id=15

显示内容:   CHINESE                                                                                                 *

;*               NEW YEAR                                                                                                *

;*                                                                                                                                  *

;* 显示方式:                                                                                                                  *

;* 1、LCD第一行显示: CHINESE                                                                                    *

;*      LCD第二行显示: NEW YEAR                                                                                  *

;* 2、先将两行字符写入DDRAM中,然后从右至左逐字移出显示。                                            *

;* 3、在指定位置停留1.6秒后,闪烁2次,清屏。                                                                  *

;* 4、反复循环上述显示方式。                                                                                           *

;*******************************************************************

          LCD_RS EQU P1.0

          LCD_RW EQU P1.1

          LCD_EN EQU P1.2

;*******************************************************************

             ORG 0000H

             AJMP MAIN

             ORG 0030H

;*******************************************************************

MAIN:

             MOV SP,#60H

             ACALL LCD_INIT          ;LCD初始化

MAIN1:

             ACALL CLR_LCD           ;清LCD

             MOV A,#90H                ;在第一行第17列的位置

             ACALL LCD_CMD

             MOV DPTR,#LINE1       ;第一行字符串的起始地址送入DPTR。

             ACALL WRITE

             MOV A,#0D0H              ;在第二行第17列的位置

             ACALL LCD_CMD

             MOV DPTR,#LINE2       ;第二行字符串的起始地址送入DPTR。

             ACALL WRITE

             MOV R3,#10H            ;向左移动16格

LOOPA:

             MOV A,#18H               ;字符同时左移一格

             ACALL LCD_CMD

             MOV R5,#03H            ;延时375MS

             ACALL DELAY125MS

             DJNZ R3,LOOPA

             

             ACALL DELAY4            ;延时1.6s

             ACALL DELAY4

             MOV R4,#02H            ;设置闪烁次数

             ACALL FLASH              ;开始闪烁

             AJMP MAIN1

                                   

LINE1:

        DB "    CHINESE     ",00H

LINE2:

        DB "    NEW YEAR    ",00H

;***************************************************************

;LCD初始化设定子程序

;***************************************************************

LCD_INIT:

          ACALL DELAY5MS            ;延时15MS

          ACALL DELAY5MS            ;等待LCD电源稳定

          ACALL DELAY5MS

          MOV A,#38H                  ;16*2显示,5*7点阵,8位数据

          ACALL LCD_CMD_NC      ;不进行LCD忙检测

          ACALL DELAY5MS

          MOV A,#38H                    ;16*2显示,5*7点阵,8位数据

          ACALL LCD_CMD_NC      ;不进行LCD忙检测

          ACALL DELAY5MS

          MOV A,#38H                  ;16*2显示,5*7点阵,8位数据

          ACALL LCD_CMD_NC      ;不进行LCD忙检测

          ACALL DELAY5MS

          MOV A,#08H                ;显示关

          ACALL LCD_CMD            ;进行LCD忙检测

          MOV A,#01H                  ;清除屏幕

          ACALL LCD_CMD            ;进行LCD忙检测

          MOV A,#0CH                ;显示开,关光标

          ACALL LCD_CMD          ;进行LCD忙检测

          RET

;***************************************************************

;清LCD子程序

;***************************************************************

CLR_LCD:

           MOV A,#01H                ;清除屏幕

           ACALL LCD_CMD         ;进行LCD忙检测

           RET

;***************************************************************

;写指令数据到LCD

;RS=L,RW=L,D0-D7=指令码,E=高脉冲

;***************************************************************

LCD_CMD:

          CALL CHECKBUSY

LCD_CMD_NC:

          CLR LCD_RS

          CLR LCD_RW

          MOV P0,A

          SETB LCD_EN

          NOP

          NOP

          NOP

          NOP

          CLR LCD_EN

          RET

;***************************************************************

;写显示数据到LCD

;RS=H,RW=L,D0-D7=数据,E=高脉冲

;***************************************************************

LCD_WDATA:

          ACALL CHECKBUSY

          SETB LCD_RS

          CLR   LCD_RW

          MOV   P0,A

          SETB LCD_EN

          NOP

          NOP

          NOP

          NOP

          CLR   LCD_EN

          RET

;***************************************************************

;检测LCD控制器忙状态

;读数据

;RS=L,RW=H,E=H,输出:D0-D7=数据

;P0.7=1,LCD忙,等待。P0.7=0,LCD闲,可以进行读写操作。

;***************************************************************

CHECKBUSY:

          PUSH ACC

          MOV P0,#0FFH

          CLR   LCD_RS

          SETB LCD_RW

          SETB LCD_EN

BUSYLOOP:

          NOP

          JB P0.7,BUSYLOOP

          CLR LCD_EN

          POP ACC

          RET

;***************************************************************

; 发送字符串子程序

;***************************************************************

WRITE:

          PUSH ACC

WRITE1:

          CLR A

          MOVC A,@A+DPTR

          JZ WRITE2

          INC DPTR

          ACALL LCD_WDATA

          JMP WRITE1

WRITE2:

          POP ACC

          RET

;***************************************************************

;闪烁子程序

;***************************************************************

FLASH:

          MOV A,#08H                ;关闭显示

          ACALL LCD_CMD

          ACALL DELAY4

          MOV A,#0CH                ;开显示,关闭光标

          ACALL LCD_CMD

          ACALL DELAY4

          DJNZ R4,FLASH               

          RET

;***************************************************************

;延时5MS子程序

;LCD初始化使用

;***************************************************************

DELAY5MS:

          MOV R6,#10

DL1:

          MOV R7,#249

DL2:

          DJNZ R7,DL2

          DJNZ R6,DL1

          RET

;***************************************************************

;延时125MS子程序

;字符串移动时使用

;***************************************************************

DELAY125MS:

DL3:

          MOV R6,#250

DL4:

          MOV R7,#249

DL5:

          DJNZ R7,DL5

          DJNZ R6,DL4

          DJNZ R5,DL3

          RET

;***************************************************************

;延时800MS子程序

;闪烁时使用

;***************************************************************

DELAY4:

          MOV R5,#40

DL6:

          MOV R6,#100

DL7:

          MOV R7,#100

DL8:

          DJNZ R7,DL8

          DJNZ R6,DL7

          DJNZ R5,DL6

          RET

;***************************************************************

          END

文档

单片机:LCD(1602)动态显示(汇编)

单片机:LCD(1602)动态显示(汇编)2009年06月13日星期六15:31作者:gguoqing  出处:伟纳电子http://www.willar.com/mcu_view.asp?id=15显示内容:  CHINESE                                                                                                *;*              NEWYEAR               
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top