📄 lcd.lst
字号:
A51 MACRO ASSEMBLER LCD 03/24/2009 19:21:11 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN LCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE LCD.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;/********************************************************************************
2 ;* 标题: xl系列单片机实验仪演示程序 1602字符型LCD显示演示程序 *
3 ;* 文件: xllcdw.asm *
4 ;* 日期: 2006-1-5 *
5 ;* 版本: 3.0 (试验通过版)可用xl600-xl1000单片机综合试验仪试验 *
6 ;* 邮箱: sxj1974@163.com *
7 ;* 网站: http://www.51c51.com www.8951.com *
8 ;*********************************************************************************
9 ;* 描述: *
10 ;* 1602字符型LCD显示演示程序 *
11 ;* 在第一行显示 welcome *
12 ;* 在第二行显示 www.51c51.com *
13 ;* *
14 ;********************************************************************************
15 ;* 【版权】 Copyright(C)深圳市学林电子有限公司 www.51c51.com *
16 ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
17 ;* 【技术支持】请访问http://www.51c51.com/bbs/index.asp 官方论坛 *
18 ;********************************************************************************/
19 ; 端口定义
00A6 20 RS EQU P2.6
00A5 21 RW EQU P2.5
00A7 22 EP EQU P2.7
23
0000 24 ORG 0000H
0000 020003 25 LJMP MAIN
0003 26 MAIN:
0003 120060 27 LCALL LCD_INIT ; 初始化LCD
0006 740F 28 MOV A,#15
0008 1200EB 29 LCALL DELAY_MS ;
30
000B 31 MAIN_LOOP:
32 ; 在第一行显示字符串"welcome!"
000B 7404 33 MOV A,#4
000D 12009C 34 LCALL SET_LCD_POS ; 设置LCD光标到第一行的第5个字符
35
0010 900105 36 MOV DPTR,#TAB_WELCOME ; "welcome!"字串表格地址
0013 120050 37 LCALL DISPLAY_STRING ; 显示字符串
38 ; 在第二行显示字符串"www.willar.com"
0016 7441 39 MOV A,#41H ;
0018 12009C 40 LCALL SET_LCD_POS ; 设置LCD光标到第二行第二个字符
41
001B 9000F5 42 MOV DPTR,#TAB_WILLAR
001E 120050 43 LCALL DISPLAY_STRING
44
45 ; 闪烁显示内容
0021 74C8 46 MOV A,#200 ;
0023 1200EB 47 LCALL DELAY_MS ;
48
0026 120086 49 LCALL LCD_TURN_OFF
0029 74C8 50 MOV A,#200 ;
002B 1200EB 51 LCALL DELAY_MS ;
52
002E 12007B 53 LCALL LCD_TURN_ON
54
0031 74C8 55 MOV A,#200 ;
0033 1200EB 56 LCALL DELAY_MS ;
57
0036 120086 58 LCALL LCD_TURN_OFF
A51 MACRO ASSEMBLER LCD 03/24/2009 19:21:11 PAGE 2
59
0039 74C8 60 MOV A,#200 ;
003B 1200EB 61 LCALL DELAY_MS ;
62
003E 12007B 63 LCALL LCD_TURN_ON
64
0041 74C8 65 MOV A,#200 ;
0043 1200EB 66 LCALL DELAY_MS ;
67 ;清屏
0046 120091 68 LCALL LCD_CLEAR
0049 7401 69 MOV A,#1
004B 1200EB 70 LCALL DELAY_MS
71 ; 重新显示
004E 80BB 72 JMP MAIN_LOOP
73
74 ;显示字符串函数
75 ;传入参数:DPTR(字符串表格地址)
76 ;返回值:无
0050 77 DISPLAY_STRING:
0050 E4 78 CLR A
0051 93 79 MOVC A,@A+DPTR ;
0052 600B 80 JZ END_DISPLAY_STRING ; 如果遇到00H表示表格结束
0054 1200BC 81 LCALL LCD_WRITE_DATA ; 写数据到LCD
0057 A3 82 INC DPTR ; 指向表格的下一字符
0058 74C8 83 MOV A, #200 ;
005A 1200EB 84 LCALL DELAY_MS ;
005D 80F1 85 SJMP DISPLAY_STRING ; 循环直到字符串结束
005F 86 END_DISPLAY_STRING:
005F 22 87 RET
88
89
90 ; 初始化LCD
0060 91 LCD_INIT:
92
93 ; 设置显示格式---
0060 7438 94 MOV A,#38H ; 38H --- 16*2行显示,5*7点阵,8位数据接口
0062 1200A2 95 LCALL LCD_WRITE_COMMAND
0065 7401 96 MOV A,#1
0067 1200EB 97 LCALL DELAY_MS
98 ;开显示
006A 12007B 99 LCALL LCD_TURN_ON
100 ;读写后指针加1
006D 7406 101 MOV A,#06H ; 06H --- 读写后指针加1
006F 1200A2 102 LCALL LCD_WRITE_COMMAND
0072 7401 103 MOV A,#1
0074 1200EB 104 LCALL DELAY_MS
105 ; 清除LCD屏幕
0077 120091 106 LCALL LCD_CLEAR
007A 22 107 RET
108
109
110 ;开显示
007B 111 LCD_TURN_ON:
007B 740C 112 MOV A,#0CH ; 0CH --- 开显示,无光标
007D 1200A2 113 LCALL LCD_WRITE_COMMAND
0080 7401 114 MOV A,#1
0082 1200EB 115 LCALL DELAY_MS
0085 22 116 RET
117
118 ; 关显示
0086 119 LCD_TURN_OFF:
0086 7408 120 MOV A,#08H ; 08H --- 关显示
0088 1200A2 121 LCALL LCD_WRITE_COMMAND
008B 7401 122 MOV A,#1
008D 1200EB 123 LCALL DELAY_MS
0090 22 124 RET
A51 MACRO ASSEMBLER LCD 03/24/2009 19:21:11 PAGE 3
125
126 ; 清除LCD屏幕
0091 127 LCD_CLEAR:
0091 7401 128 MOV A,#01H ; 01H清屏指令
0093 1200A2 129 LCALL LCD_WRITE_COMMAND
0096 7401 130 MOV A,#1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -