📄 1602.lst
字号:
(0134) t = *pBuffer;
18B 01FB MOVW R30,R22
18C 90A7 ELPM R10,Z+
18D 90B6 ELPM R11,18(Z)
(0135) PORTG|=(1<<EN);
18E 9180 0065 LDS R24,0x0065
190 6084 ORI R24,4
191 9380 0065 STS 0x0065,R24
(0136) PORTA = t;
193 BAAB OUT 0x1B,R10
(0137) PORTG&=~(1<<EN);
194 9180 0065 LDS R24,0x0065
196 7F8B ANDI R24,0xFB
197 9380 0065 STS 0x0065,R24
(0138) pBuffer++;
199 5F6E SUBI R22,0xFE
19A 4F7F SBCI R23,0xFF
19B 5041 SUBI R20,1
19C 4050 SBCI R21,0
19D 3040 CPI R20,0
19E 0745 CPC R20,R21
19F F759 BNE 0x018B
1A0 940C 02B4 JMP pop_xgsetF00C
_WriteMenu:
t --> R10
i --> R22
pBuffer --> R20
1A2 940E 02AD CALL push_xgsetF00C
1A4 01A8 MOVW R20,R16
(0139) }
(0140)
(0141) }
(0142)
(0143) //=================================================
(0144) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0145) //入口:菜单数组首地址
(0146) //出口:无
(0147) //=================================================
(0148) void WriteMenu(const uchar *pBuffer)
(0149) {
(0150) uchar i,t;
(0151) writecom(0x80); //数据地址
1A5 E800 LDI R16,0x80
1A6 DF13 RCALL _writecom
(0152)
(0153) PORTG|=(1<<RS);
1A7 9180 0065 LDS R24,0x0065
1A9 6081 ORI R24,1
1AA 9380 0065 STS 0x0065,R24
(0154) PORTG&=~(1<<RW);
1AC 9180 0065 LDS R24,0x0065
1AE 7F8D ANDI R24,0xFD
1AF 9380 0065 STS 0x0065,R24
(0155) s_ms(50);
1B1 E302 LDI R16,0x32
1B2 E010 LDI R17,0
1B3 DEC2 RCALL _s_ms
(0156) for(i=0;i<16;i++)
1B4 2766 CLR R22
1B5 C013 RJMP 0x01C9
(0157) {
(0158) t = *pBuffer;
1B6 01FA MOVW R30,R20
1B7 90A6 ELPM R10,19(Z)
(0159) PORTA = t;
1B8 BAAB OUT 0x1B,R10
(0160) PORTG|=(1<<EN);
1B9 9180 0065 LDS R24,0x0065
1BB 6084 ORI R24,4
1BC 9380 0065 STS 0x0065,R24
(0161) s_ms(50);
1BE E302 LDI R16,0x32
1BF E010 LDI R17,0
1C0 DEB5 RCALL _s_ms
(0162) PORTG&=~(1<<EN);
1C1 9180 0065 LDS R24,0x0065
1C3 7F8B ANDI R24,0xFB
1C4 9380 0065 STS 0x0065,R24
(0163) pBuffer++;
1C6 5F4F SUBI R20,0xFF
1C7 4F5F SBCI R21,0xFF
1C8 9563 INC R22
1C9 3160 CPI R22,0x10
1CA F358 BCS 0x01B6
(0164) }
(0165) writecom(0xC0);
1CB EC00 LDI R16,0xC0
1CC DEED RCALL _writecom
(0166)
(0167) PORTG|=(1<<RS);
1CD 9180 0065 LDS R24,0x0065
1CF 6081 ORI R24,1
1D0 9380 0065 STS 0x0065,R24
(0168) PORTG&=~(1<<RW);
1D2 9180 0065 LDS R24,0x0065
1D4 7F8D ANDI R24,0xFD
1D5 9380 0065 STS 0x0065,R24
(0169) s_ms(50);
1D7 E302 LDI R16,0x32
1D8 E010 LDI R17,0
1D9 DE9C RCALL _s_ms
(0170) for(i=0;i<16;i++)
1DA 2766 CLR R22
1DB C013 RJMP 0x01EF
(0171) {
(0172) t = *pBuffer;
1DC 01FA MOVW R30,R20
1DD 90A6 ELPM R10,19(Z)
(0173) PORTA = t;
1DE BAAB OUT 0x1B,R10
(0174) PORTG|=(1<<EN);
1DF 9180 0065 LDS R24,0x0065
1E1 6084 ORI R24,4
1E2 9380 0065 STS 0x0065,R24
(0175) s_ms(50);
1E4 E302 LDI R16,0x32
1E5 E010 LDI R17,0
1E6 DE8F RCALL _s_ms
(0176) PORTG&=~(1<<EN);
1E7 9180 0065 LDS R24,0x0065
1E9 7F8B ANDI R24,0xFB
1EA 9380 0065 STS 0x0065,R24
(0177) pBuffer++;
1EC 5F4F SUBI R20,0xFF
1ED 4F5F SBCI R21,0xFF
1EE 9563 INC R22
1EF 3160 CPI R22,0x10
1F0 F358 BCS 0x01DC
1F1 940C 02B4 JMP pop_xgsetF00C
_WriteNum:
num --> R20
col --> R10
row --> R22
1F3 940E 02AD CALL push_xgsetF00C
1F5 0159 MOVW R10,R18
1F6 01B8 MOVW R22,R16
1F7 814E LDD R20,Y+6
1F8 815F LDD R21,Y+7
(0178) }
(0179) }
(0180) //====================================================
(0181) // 描述:在任意位置写数字函数
(0182) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0183) // ’col‘表示要写数字所在的列地址,只能为0--15
(0184) // ‘num’表示要写的数字,只能为0--9
(0185) // 出口:无
(0186) //===================================================
(0187) void WriteNum(uint row,uint col,uint num)
(0188) {
(0189) if (row == 1) row = 0x80 + col;
1F9 3061 CPI R22,1
1FA E0E0 LDI R30,0
1FB 077E CPC R23,R30
1FC F421 BNE 0x0201
1FD 01B5 MOVW R22,R10
1FE 5860 SUBI R22,0x80
1FF 4F7F SBCI R23,0xFF
200 C003 RJMP 0x0204
(0190) else row = 0xC0 + col;
201 01B5 MOVW R22,R10
202 5460 SUBI R22,0x40
203 4F7F SBCI R23,0xFF
(0191) writecom(row);
204 2F06 MOV R16,R22
205 DEB4 RCALL _writecom
(0192) if (num<=0 | num>9) num =0x30;
206 3040 CPI R20,0
207 0745 CPC R20,R21
208 F421 BNE 0x020D
209 E081 LDI R24,1
20A E090 LDI R25,0
20B 015C MOVW R10,R24
20C C002 RJMP 0x020F
20D 24AA CLR R10
20E 24BB CLR R11
20F E089 LDI R24,0x9
210 E090 LDI R25,0
211 1784 CP R24,R20
212 0795 CPC R25,R21
213 F418 BCC 0x0217
214 E061 LDI R22,1
215 E070 LDI R23,0
216 C002 RJMP 0x0219
217 2766 CLR R22
218 2777 CLR R23
219 0115 MOVW R2,R10
21A 2A26 OR R2,R22
21B 2A37 OR R3,R23
21C 2022 TST R2
21D F411 BNE 0x0220
21E 2033 TST R3
21F F019 BEQ 0x0223
220 E340 LDI R20,0x30
221 E050 LDI R21,0
222 C002 RJMP 0x0225
(0193) else num = 0x30 + num;
223 5D40 SUBI R20,0xD0
224 4F5F SBCI R21,0xFF
(0194)
(0195) PORTG|=(1<<RS);
225 9180 0065 LDS R24,0x0065
227 6081 ORI R24,1
228 9380 0065 STS 0x0065,R24
(0196) s_ms(500);
22A EF04 LDI R16,0xF4
22B E011 LDI R17,1
22C DE49 RCALL _s_ms
(0197) PORTG&=~(1<<RW);
22D 9180 0065 LDS R24,0x0065
22F 7F8D ANDI R24,0xFD
230 9380 0065 STS 0x0065,R24
(0198) s_ms(500);
232 EF04 LDI R16,0xF4
233 E011 LDI R17,1
234 DE41 RCALL _s_ms
(0199) PORTA = num;
235 BB4B OUT 0x1B,R20
(0200) s_ms(500);
236 EF04 LDI R16,0xF4
237 E011 LDI R17,1
238 DE3D RCALL _s_ms
(0201) PORTG|=(1<<EN);
239 9180 0065 LDS R24,0x0065
23B 6084 ORI R24,4
23C 9380 0065 STS 0x0065,R24
(0202) s_ms(500);
23E EF04 LDI R16,0xF4
23F E011 LDI R17,1
240 DE35 RCALL _s_ms
(0203) PORTG&=~(1<<EN);
241 9180 0065 LDS R24,0x0065
243 7F8B ANDI R24,0xFB
244 9380 0065 STS 0x0065,R24
(0204) s_ms(500);
246 EF04 LDI R16,0xF4
247 E011 LDI R17,1
248 DE2D RCALL _s_ms
249 940C 02B4 JMP pop_xgsetF00C
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
24B 940E 02BB CALL push_xgsetF03C
24D 2EA2 MOV R10,R18
24E 2F60 MOV R22,R16
24F 854A LDD R20,Y+10
250 855B LDD R21,Y+11
(0205) }
(0206) //================================================================
(0207) // 描述:在任意位置写任意多个字符
(0208) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0209) // ‘col’要写的字符所在的列,只能为0---15
(0210) // ‘num’要写字符的个数
(0211) // ‘pbuffer’要写字符的首地址
(0212) //==================================================================
(0213) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0214) {
(0215) uchar i,t;
(0216) if (row == 1) row = 0x80 + col;
251 3061 CPI R22,1
252 F419 BNE 0x0256
253 2D6A MOV R22,R10
254 5860 SUBI R22,0x80
255 C002 RJMP 0x0258
(0217) else row = 0xC0 + col;
256 2D6A MOV R22,R10
257 5460 SUBI R22,0x40
(0218) writecom(row);
258 2F06 MOV R16,R22
259 DE60 RCALL _writecom
(0219) //if (num<=0 | num>9) num =0x30;
(0220) //else num = 0x30 + num;
(0221)
(0222) PORTG|=(1<<RS);
25A 9180 0065 LDS R24,0x0065
25C 6081 ORI R24,1
25D 9380 0065 STS 0x0065,R24
(0223) s_ms(500);
25F EF04 LDI R16,0xF4
260 E011 LDI R17,1
261 DE14 RCALL _s_ms
(0224) PORTG&=~(1<<RW);
262 9180 0065 LDS R24,0x0065
264 7F8D ANDI R24,0xFD
265 9380 0065 STS 0x0065,R24
(0225) s_ms(500);
267 EF04 LDI R16,0xF4
268 E011 LDI R17,1
269 DE0C RCALL _s_ms
(0226) for(i=num;i!=0;i--)
26A 84A8 LDD R10,Y+8
26B C01C RJMP 0x0288
(0227) {
(0228) t = *pBuffer;
26C 01FA MOVW R30,R20
26D 80C0 LDD R12,Z+0
(0229) s_ms(500);
26E EF04 LDI R16,0xF4
26F E011 LDI R17,1
270 DE05 RCALL _s_ms
(0230) PORTA = t;
271 BACB OUT 0x1B,R12
(0231) s_ms(500);
272 EF04 LDI R16,0xF4
273 E011 LDI R17,1
274 DE01 RCALL _s_ms
(0232) PORTG|=(1<<EN);
275 9180 0065 LDS R24,0x0065
277 6084 ORI R24,4
278 9380 0065 STS 0x0065,R24
(0233) s_ms(500);
27A EF04 LDI R16,0xF4
27B E011 LDI R17,1
27C DDF9 RCALL _s_ms
(0234) PORTG&=~(1<<EN);
27D 9180 0065 LDS R24,0x0065
27F 7F8B ANDI R24,0xFB
280 9380 0065 STS 0x0065,R24
(0235) s_ms(500);
282 EF04 LDI R16,0xF4
283 E011 LDI R17,1
284 DDF1 RCALL _s_ms
(0236) pBuffer++;
285 5F4F SUBI R20,0xFF
286 4F5F SBCI R21,0xFF
287 94AA DEC R10
288 20AA TST R10
289 F711 BNE 0x026C
28A 940C 02C4 JMP pop_xgsetF03C
_main:
28C 9724 SBIW R28,4
FILE: E:\产品\开发板\mega128-board\光盘\实验程序\1602液晶\1602.c
(0001) ///////////////////////////////////////////////////////////
(0002) //////////////北京东控自动化技术有限公司///////////////////
(0003) /////////////////////作者:乌东东//////////////////////////
(0004) ///////////////////////2008-9-18///////////////////////////
(0005) ///////////////////////版权所有////////////////////////////
(0006)
(0007)
(0008) #include<iom128v.h>
(0009) #include"1602.h"
(0010) #define uchar unsigned char
(0011) #define uint unsigned int
(0012)
(0013) uchar wz[]={"WWW.ISMCU.COM"};
(0014) uchar gd[]={"Good Luck!"};
(0015)
(0016) main()
(0017) {
(0018) DDRA=0xff;
28D EF8F LDI R24,0xFF
28E BB8A OUT 0x1A,R24
(0019) PORTA=0xff;
28F BB8B OUT 0x1B,R24
(0020) DDRG=0xff;
290 9380 0064 STS 0x0064,R24
(0021) PORTG=0xff;
292 9380 0065 STS 0x0065,R24
(0022) LcdInit();
294 DE51 RCALL _LcdInit
(0023) WriteChar(1,1,13,wz);
295 E080 LDI R24,0
296 E091 LDI R25,1
297 839B STD Y+3,R25
298 838A STD Y+2,R24
299 E08D LDI R24,0xD
29A E090 LDI R25,0
29B 8399 STD Y+1,R25
29C 8388 STD Y+0,R24
29D E021 LDI R18,1
29E E001 LDI R16,1
29F DFAB RCALL _WriteChar
(0024) WriteChar(2,3,10,gd);
FILE: <library>
2A0 E08E LDI R24,0xE
2A1 E091 LDI R25,1
2A2 839B STD Y+3,R25
2A3 838A STD Y+2,R24
2A4 E08A LDI R24,0xA
2A5 E090 LDI R25,0
2A6 8399 STD Y+1,R25
2A7 8388 STD Y+0,R24
2A8 E023 LDI R18,3
2A9 E002 LDI R16,2
2AA DFA0 RCALL _WriteChar
2AB 9624 ADIW R28,4
2AC 9508 RET
push_xgsetF00C:
2AD 937A ST R23,-Y
2AE 936A ST R22,-Y
2AF 935A ST R21,-Y
2B0 934A ST R20,-Y
2B1 92BA ST R11,-Y
2B2 92AA ST R10,-Y
2B3 9508 RET
pop_xgsetF00C:
2B4 90A9 LD R10,Y+
2B5 90B9 LD R11,Y+
2B6 9149 LD R20,Y+
2B7 9159 LD R21,Y+
2B8 9169 LD R22,Y+
2B9 9179 LD R23,Y+
2BA 9508 RET
push_xgsetF03C:
2BB 937A ST R23,-Y
2BC 936A ST R22,-Y
2BD 935A ST R21,-Y
2BE 934A ST R20,-Y
2BF 92DA ST R13,-Y
2C0 92CA ST R12,-Y
2C1 92BA ST R11,-Y
2C2 92AA ST R10,-Y
2C3 9508 RET
pop_xgsetF03C:
2C4 90A9 LD R10,Y+
2C5 90B9 LD R11,Y+
2C6 90C9 LD R12,Y+
2C7 90D9 LD R13,Y+
2C8 9149 LD R20,Y+
2C9 9159 LD R21,Y+
2CA 9169 LD R22,Y+
2CB 9179 LD R23,Y+
2CC 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -