📄 ir-1602lcd.lst
字号:
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN IR-1602LCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-1602LCD.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************************
2 ;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - 遥控键值解码-1602LCD显示 *
3 ;* 文件: IR-LCD.asm *
4 ;* 日期: 2005-3-20 *
5 ;* 版本: 1.0 *
6 ;* 作者: gguoqing *
7 ;* 邮箱: gguoqing@willar.com *
8 ;* 网站: http://www.willar.com *
9 ;********************************************************************************
10 ;* 描述: *
11 ;* ME300B 键值读取器 *
12 ;* 1602LCD显示, P0口为LCD的数据口 *
13 ;* *
14 ;* K17键按下,继电器吸合。K19键按下,继电器关闭。 *
15 ;* *
16 ;********************************************************************************
17 ;* 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
18 ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
19 ;********************************************************************************
20
21 ;-----------------------------------------------
0020 22 IRCOM EQU 20H ;20H-23H IR使用
0026 23 X EQU 26H ;LCD 地址变量
24
00B2 25 IRIN EQU P3.2
00B7 26 BEEP EQU P3.7
0093 27 RELAY EQU P1.3
28
00A0 29 RS EQU P2.0
00A1 30 RW EQU P2.1
00A2 31 EN EQU P2.2
32 ;------------------------------------------------
0000 33 ORG 0000H
0000 8000 34 JMP MAIN
35 ;------------------------------------------------
0002 36 MAIN:
0002 758140 37 MOV SP,#40H
0005 7400 38 MOV A,#00H
0007 7820 39 MOV R0,#20H
0009 F6 40 LOOP0: MOV @R0,A ;20H-26H清零
000A 08 41 INC R0
000B B827FB 42 CJNE R0,#27H,LOOP0
000E D2B2 43 SETB IRIN
0010 1126 44 CALL SET_LCD
0012 1188 45 CALL MENU1
0014 46 LOOP1:
0014 11EF 47 CALL IR_IN
0016 3135 48 CALL IR_SHOW
0018 E522 49 MOV A,22H
001A B44002 50 CJNE A,#40H,LOOP2 ;K17键按下
001D C293 51 CLR RELAY ;继电器吸合
001F B40402 52 LOOP2: CJNE A,#04H,LOOP3 ;K19键按下
0022 D293 53 SETB RELAY ;继电器关闭
0024 80EE 54 LOOP3: JMP LOOP1
55
56 ;-----------------------------------------------------
57 ; LCD 初始化设置
58 ;-----------------------------------------------------
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 2
0026 59 SET_LCD:
0026 C2A2 60 CLR EN
0028 113B 61 CALL INIT_LCD ;初始化 LCD
002A 319E 62 CALL DELAY1
002C 9000A1 63 MOV DPTR,#INFO1 ;指针指到显示信息1
002F 7401 64 MOV A,#1 ;显示在第一行
0031 115A 65 CALL LCD_SHOW
0033 9000B2 66 MOV DPTR,#INFO2 ;指针指到显示信息2
0036 7402 67 MOV A,#2 ;显示在第二行
0038 115A 68 CALL LCD_SHOW
003A 22 69 RET
70 ;-----------------------------------------------------
003B 71 INIT_LCD: ;8位I/O控制 LCD 接口初始化
003B 7438 72 MOV A,#38H ;双列显示,字形5*7点阵
003D 11C3 73 CALL WCOM
003F 319E 74 CALL DELAY1
0041 7438 75 MOV A,#38H ;双列显示,字形5*7点阵
0043 11C3 76 CALL WCOM
0045 319E 77 CALL DELAY1
0047 7438 78 MOV A,#38H ;双列显示,字形5*7点阵
0049 11C3 79 CALL WCOM
004B 319E 80 CALL DELAY1
004D 740C 81 MOV A,#0CH ;开显示,关光标,
004F 11C3 82 CALL WCOM
0051 319E 83 CALL DELAY1
0053 7401 84 MOV A,#01H ;清除 LCD 显示屏
0055 11C3 85 CALL WCOM
0057 319E 86 CALL DELAY1
0059 22 87 RET
88 ;----------------------------------------------------
005A 89 LCD_SHOW: ;在LCD的第一行或第二行显示信息字符
90
005A B4010C 91 CJNE A,#1,LINE2 ;判断是否为第一行
005D 7480 92 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
005F 11C3 93 CALL WCOM ;写入命令
0061 117F 94 CALL CLR_LINE ;清除该行字符数据
0063 7480 95 MOV A,#80H ;设置 LCD 的第一行地址
0065 11C3 96 CALL WCOM ;写入命令
0067 800A 97 JMP FILL
98
0069 74C0 99 LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
006B 11C3 100 CALL WCOM ;写入命令
006D 117F 101 CALL CLR_LINE ;清除该行字符数据
006F 74C0 102 MOV A,#0C0H ;设置 LCD 的第二行地址
0071 11C3 103 CALL WCOM
0073 E4 104 FILL: CLR A ;填入字符
0074 93 105 MOVC A,@A+DPTR ;由消息区取出字符
0075 B40001 106 CJNE A,#0,LC1 ;判断是否为结束码
0078 22 107 RET
0079 11D0 108 LC1: CALL WDATA ;写入数据
007B A3 109 INC DPTR ;指针加1
007C 80F5 110 JMP FILL ;继续填入字符
007E 22 111 RET
112 ;---------------------------------------------------
007F 113 CLR_LINE: ;清除该行 LCD 的字符
007F 7818 114 MOV R0,#24
0081 7420 115 CL1: MOV A,#' '
0083 11D0 116 CALL WDATA
0085 D8FA 117 DJNZ R0,CL1
0087 22 118 RET
119 ;----------------------------------------------------
0088 120 MENU1: ;LCD 显示工作菜单信息
0088 900090 121 MOV DPTR,#MENU2
008B 7401 122 MOV A,#1 ;在第一行显示信息
008D 115A 123 CALL LCD_SHOW
008F 22 124 RET
A51 MACRO ASSEMBLER IR_1602LCD 03/29/2005 16:11:52 PAGE 3
0090 2052454D 125 MENU2: DB " REMOTE CONTROL ",0
0094 4F544520
0098 434F4E54
009C 524F4C20
00A0 00
126 ;-----------------------------------------------------
00A1 20202020 127 INFO1: DB " ",0 ;LCD 第一行显示信息
00A5 20202020
00A9 20202020
00AD 20202020
00B1 00
00B2 20204952 128 INFO2: DB " IR-CODE: --H ",0 ;LCD 第二行显示信息
00B6 2D434F44
00BA 453A202D
00BE 2D482020
00C2 00
129 ;-----------------------------------------------------
130
131 ;-----------------------------------------------------
132 ; 写指令、数据使能子程序
133 ;-----------------------------------------------------
00C3 134 WCOM:
00C3 F580 135 MOV P0,A ;写指令使能
00C5 C2A0 136 CLR RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
00C7 C2A1 137 CLR RW
00C9 D2A2 138 SETB EN
00CB 11DD 139 CALL DELAY0
00CD C2A2 140 CLR EN
00CF 22 141 RET
142
00D0 143 WDATA:
00D0 F580 144 MOV P0,A ;写数据使能
00D2 D2A0 145 SETB RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲
00D4 C2A1 146 CLR RW
00D6 D2A2 147 SETB EN
00D8 11DD 148 CALL DELAY0
00DA C2A2 149 CLR EN
00DC 22 150 RET
151
00DD 7FFA 152 DELAY0: MOV R7,#250 ;延时500微秒
00DF DFFE 153 DJNZ R7,$
00E1 22 154 RET
155 ;---------------------------------------------------
156 ;在 LCD 第二行显示字符
157 ;A=ASC DATA, B=LINE X POS
158 ;---------------------------------------------------
00E2 159 LCDP2: ;在LCD的第二行显示字符
00E2 C0E0 160 PUSH ACC ;
00E4 E5F0 161 MOV A,B ;设置显示地址
00E6 24C0 162 ADD A,#0C0H ;设置LCD的第二行地址
00E8 11C3 163 CALL WCOM ;写入命令
00EA D0E0 164 POP ACC ;由堆栈取出A
00EC 11D0 165 CALL WDATA ;写入数据
00EE 22 166 RET
167 ;---------------------------------------------------
168 ; IR 译码子程序
169 ;---------------------------------------------------
00EF 170 IR_IN:
00EF 7820 171 MOV R0,#IRCOM
00F1 30B202 172 I1: JNB IRIN,I2 ;等待 IR 信号出现
00F4 80FB 173 JMP I1
00F6 7C14 174 I2: MOV R4,#20
00F8 3191 175 I20: CALL DEL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -