📄 ir-12864lcd.lst
字号:
A51 MACRO ASSEMBLER IR_12864LCD 10/12/2006 09:00:05 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN IR-12864LCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-12864LCD.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2
3
0020 4 IRCOM EQU 20H ;20H-23H IR使用
0026 5 X EQU 26H ;LCD 地址变量
6
00B2 7 IRIN EQU P3.2
00B7 8 BEEP EQU P3.7
0093 9 RELAY EQU P1.3
10
00A0 11 RS EQU P2.0
00A1 12 RW EQU P2.1
00A2 13 EN EQU P2.2
00A3 14 PSB EQU P2.3
00A5 15 RST EQU P2.5
16 ;------------------------------------------------
0000 17 ORG 0000H
0000 8003 18 JMP MAIN
19
0003 20 ORG 0003H ;外部中断INT0入口地址
0003 213B 21 JMP IR_IN ;中断服务程序
22 ;------------------------------------------------
0005 23 MAIN:
0005 758140 24 MOV SP,#40H
0008 7400 25 MOV A,#00H
000A 7820 26 MOV R0,#20H
000C F6 27 LOOP0: MOV @R0,A ;20H-26H清零
000D 08 28 INC R0
000E B827FB 29 CJNE R0,#27H,LOOP0
0011 75A881 30 MOV IE,#81H ;允许总中断中断,使能 INT0 外部中断
0014 758801 31 MOV TCON,#01H ;触发方式为脉冲负边沿触发
0017 D2B2 32 SETB IRIN
0019 D2A5 33 SETB RST
001B 00 34 NOP
001C D2A3 35 SETB PSB ;8位数据,并口
36
001E 1136 37 CALL SET_LCD ;初始化TS12864A-3
0020 11A0 38 CALL MENU1
0022 11B9 39 CALL MENU2
0024 11D2 40 CALL MENU3
0026 11EA 41 CALL MENU4
0028 42 LOOP1:
0028 E522 43 MOV A,22H
002A B44002 44 CJNE A,#40H,LOOP2 ;K17键按下
002D C293 45 CLR RELAY ;继电器吸合
002F B40402 46 LOOP2: CJNE A,#04H,LOOP3 ;K19键按下
0032 D293 47 SETB RELAY ;继电器关闭
0034 80F2 48 LOOP3: JMP LOOP1
49
50 ;=============================================
51 ; LCD 初始化设置
52 ;=============================================-
0036 53 SET_LCD:
0036 C2A2 54 CLR EN
0038 7434 55 MOV A,#34H ;34H--扩充指令操作
003A 3102 56 CALL WCOM
003C 5134 57 CALL DELAY1
003E 7430 58 MOV A,#30H ;30H--基本指令操作
A51 MACRO ASSEMBLER IR_12864LCD 10/12/2006 09:00:05 PAGE 2
0040 3102 59 CALL WCOM
0042 5134 60 CALL DELAY1
61
0044 740C 62 MOV A,#0CH ;开显示,关光标,
0046 3102 63 CALL WCOM
0048 5134 64 CALL DELAY1
004A 7401 65 MOV A,#01H ;清除 LCM 显示屏
004C 3102 66 CALL WCOM
004E 5134 67 CALL DELAY1
0050 22 68 RET
69 ;===================================================
70 ;在 LCM 各行显示信息字符
71 ;===================================================
0051 72 LCD_SHOW:
73
0051 B4010C 74 CJNE A,#1,LINE2 ;判断是否为第一行
0054 7480 75 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
0056 3102 76 CALL WCOM ;写入命令
0058 1197 77 CALL CLR_LINE ;清除该行字符数据
005A 7480 78 MOV A,#80H ;设置 LCD 的第一行地址
005C 3102 79 CALL WCOM ;写入命令
005E 802B 80 JMP FILL
81
0060 B4020C 82 LINE2: CJNE A,#2,LINE3 ;判断是否为第三行
0063 7490 83 MOV A,#090H ;设置 LCD 的第三行地址
0065 3102 84 CALL WCOM ;写入命令
0067 1197 85 CALL CLR_LINE ;清除该行字符数据
0069 7490 86 MOV A,#090H ;设置 LCD 的第三行地址
006B 3102 87 CALL WCOM
006D 801C 88 JMP FILL
89
006F B4030C 90 LINE3: CJNE A,#3,LINE4 ;判断是否为第三行
0072 7488 91 MOV A,#088H ;设置 LCD 的第三行地址
0074 3102 92 CALL WCOM ;写入命令
0076 1197 93 CALL CLR_LINE ;清除该行字符数据
0078 7488 94 MOV A,#088H ;设置 LCD 的第三行地址
007A 3102 95 CALL WCOM
007C 800D 96 JMP FILL
97
007E B4040F 98 LINE4: CJNE A,#4,LINE5 ;判断是否为第三行
0081 7498 99 MOV A,#098H ;设置 LCD 的第三行地址
0083 3102 100 CALL WCOM ;写入命令
0085 1197 101 CALL CLR_LINE ;清除该行字符数据
0087 7498 102 MOV A,#098H ;设置 LCD 的第三行地址
0089 3102 103 CALL WCOM
104
008B E4 105 FILL: CLR A ;填入字符
008C 93 106 MOVC A,@A+DPTR ;由消息区取出字符
008D B40001 107 CJNE A,#0,LC1 ;判断是否为结束码
0090 22 108 LINE5: RET
0091 310F 109 LC1: CALL WDATA ;写入数据
0093 A3 110 INC DPTR ;指针加1
0094 80F5 111 JMP FILL ;继续填入字符
0096 22 112 RET
113 ;=================================================
114 ;清除该行 LCM 的字符
115 ;=================================================
0097 116 CLR_LINE:
0097 7810 117 MOV R0,#16 ;
0099 7420 118 CL1: MOV A,#' '
009B 310F 119 CALL WDATA
009D D8FA 120 DJNZ R0,CL1
009F 22 121 RET
122 ;==================================================
123 ;LCM 显示工作菜单信息
124 ;==================================================
A51 MACRO ASSEMBLER IR_12864LCD 10/12/2006 09:00:05 PAGE 3
00A0 125 MENU1:
00A0 9000A8 126 MOV DPTR,#MENU1A
00A3 7401 127 MOV A,#1 ;在第一行显示信息
00A5 1151 128 CALL LCD_SHOW
00A7 22 129 RET
00A8 BAECCDE2 130 MENU1A: DB "红外遥控码读取器",0
00AC D2A3BFD8
00B0 C2EBB6C1
00B4 C8A1C6F7
00B8 00
131
00B9 132 MENU2:
00B9 9000C1 133 MOV DPTR,#MENU2A
00BC 7402 134 MOV A,#2 ;在第二行显示信息
00BE 1151 135 CALL LCD_SHOW
00C0 22 136 RET
00C1 2D777777 137 MENU2A: DB "-www.hificat.com",0
00C5 2E686966
00C9 69636174
00CD 2E636F6D
00D1 00
138
00D2 139 MENU3:
00D2 9000DA 140 MOV DPTR,#MENU3A
00D5 7403 141 MOV A,#3 ;在第三行显示信息
00D7 1151 142 CALL LCD_SHOW
00D9 22 143 RET
00DA BCFCD6B5 144 MENU3A: DB "键值编码:- - H",0
00DE B1E0C2EB
00E2 A3BA2D20
00E6 2D204800
145
00EA 146 MENU4:
00EA 9000F2 147 MOV DPTR,#MENU4A
00ED 7404 148 MOV A,#4 ;在第四行显示信息
00EF 1151 149 CALL LCD_SHOW
00F1 22 150 RET
00F2 BCFCD6B5 151 MENU4A: DB "键值反码:- - H",0
00F6 B7B4C2EB
00FA A3BA2D20
00FE 2D204800
152
153 ;==============================================
154 ; 写指令使能子程序
155 ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
156 ;==============================================
0102 157 WCOM:
0102 F580 158 MOV P0,A
0104 C2A0 159 CLR RS
0106 C2A1 160 CLR RW
0108 D2A2 161 SETB EN
010A 311C 162 CALL DELAY0
010C C2A2 163 CLR EN
010E 22 164 RET
165 ;=============================================
166 ;写数据使能子程序
167 ;RS=H,RW=L,D0-D7=数据,E=高脉冲
168 ;=============================================
010F 169 WDATA:
010F F580 170 MOV P0,A
0111 D2A0 171 SETB RS
0113 C2A1 172 CLR RW
0115 D2A2 173 SETB EN
0117 311C 174 CALL DELAY0
0119 C2A2 175 CLR EN
011B 22 176 RET
A51 MACRO ASSEMBLER IR_12864LCD 10/12/2006 09:00:05 PAGE 4
177
011C 7FFA 178 DELAY0: MOV R7,#250 ;延时500微秒
011E DFFE 179 DJNZ R7,$
0120 22 180 RET
181 ;===============================================
182 ;在 LCM 第三行、第四行显示字符
183 ;A=ASC DATA, B=LINE X POS
184 ;===============================================
0121 185 LCDP3: ;在LCD的第三行显示字符
0121 C0E0 186 PUSH ACC ;
0123 E5F0 187 MOV A,B ;设置显示地址
0125 2488 188 ADD A,#088H ;设置LCD的第三行地址
0127 3102 189 CALL WCOM ;写入命令
0129 D0E0 190 POP ACC ;由堆栈取出A
012B 310F 191 CALL WDATA ;写入数据
012D 22 192 RET
193
012E 194 LCDP4: ;在LCD的第四行显示字符
012E C0E0 195 PUSH ACC ;
0130 E5F0 196 MOV A,B ;设置显示地址
0132 2498 197 ADD A,#098H ;设置LCD的第四行地址
0134 3102 198 CALL WCOM ;写入命令
0136 D0E0 199 POP ACC ;由堆栈取出A
0138 310F 200 CALL WDATA ;写入数据
013A 22 201 RET
202 ;=================================================
203 ; IR 译码子程序
204 ;中断服务程序
205 ;=================================================
013B 206 IR_IN:
013B C2AF 207 CLR EA ;暂时关闭CPU的所有中断请求
013D C0E0 208 PUSH ACC
013F C0D0 209 PUSH PSW
0141 D2D3 210 SETB PSW.3 ;选择工作寄存器组1
0143 C2D4 211 CLR PSW.4
212
0145 7820 213 MOV R0,#IRCOM
0147 7904 214 MOV R1,#04H
0149 30B207 215 I1: JNB IRIN,I2 ;等待 IR 信号出现
014C 1201A4 216 LCALL CONV
014F D9F8 217 DJNZ R1,I1
0151 803E 218 JMP IR_OUT
0153 7C14 219 I2: MOV R4,#20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -