📄 23.lst
字号:
__start:
__text_start:
0267 E5CF LDI R28,0x5F
0268 E0D4 LDI R29,4
0269 BFCD OUT 0x3D,R28
026A BFDE OUT 0x3E,R29
026B 51C0 SUBI R28,0x10
026C 40D0 SBCI R29,0
026D EA0A LDI R16,0xAA
026E 8308 STD Y+0,R16
026F 2400 CLR R0
0270 E7E9 LDI R30,0x79
0271 E0F0 LDI R31,0
0272 E010 LDI R17,0
0273 37E9 CPI R30,0x79
0274 07F1 CPC R31,R17
0275 F011 BEQ 0x0278
0276 9201 ST R0,Z+
0277 CFFB RJMP 0x0273
0278 8300 STD Z+0,R16
0279 EBE4 LDI R30,0xB4
027A E0F4 LDI R31,4
027B E6A0 LDI R26,0x60
027C E0B0 LDI R27,0
027D E014 LDI R17,4
027E 3CED CPI R30,0xCD
027F 07F1 CPC R31,R17
0280 F021 BEQ 0x0285
0281 95C8 LPM
0282 9631 ADIW R30,1
0283 920D ST R0,X+
0284 CFF9 RJMP 0x027E
0285 940E0582 CALL _main
_exit:
0287 CFFF RJMP _exit
_wcodel:
status --> R20
c --> R16
0288 940E05A3 CALL push_gset1
FILE: F:\新建文件夹\LCD12232APP\LCD12232.C
(0001) //-----------------------------------------------------------------------------
(0002) //-----------------------------------------------------------------------------
(0003) // LCD12232 Library for AVR
(0004) // V0.1c
(0005) // zhongwh
(0006) // Copyright 2003-2005
(0007) // Email: hfkj01@163.com
(0008) // 2005-6-19 15:38:52
(0009) // Compiled with Imagecraft C Compiler for the AVR series
(0010) //-----------------------------------------------------------------------------
(0011) //-----------------------------------------------------------------------------
(0012) #include <iom16v.h>
(0013) #define prepage 0xB8
(0014) #define precol 0X00
(0015) #define E1_H PORTD|=BIT(PD4);
(0016) #define E1_L PORTD&=~BIT(PD4);
(0017) #define A0_H PORTD|=BIT(PD7);
(0018) #define A0_L PORTD&=~BIT(PD7);
(0019) #define LCD_READ PORTD|=BIT(PD6);
(0020) #define LCD_WRITE PORTD&=~BIT(PD6);
(0021) #define E2_H PORTD|=BIT(PD5);
(0022) #define E2_L PORTD&=~BIT(PD5);
(0023) #define LCD_PCT DDRC
(0024) #define LCD_IN PINC
(0025) #define LCD_DATA PORTC
(0026) #define uchar unsigned char
(0027) uchar b1=0,pianyi=0x41,sz0=0x41,sz1=0x41,sz2=0x41,sz3=0x41,sz4=0x41,sz5=0x41;
(0028) const char chartable[35][32];
(0029) void wcodel (uchar c)
(0030) { uchar status;
028A C00A RJMP 0x0295
(0031)
(0032) while(1){
(0033) LCD_PCT=0X00;
028B 2422 CLR R2
028C BA24 OUT 0x14,R2
(0034) E1_H
028D 9A94 SBI 0x12,4
(0035) A0_L
028E 9897 CBI 0x12,7
(0036) LCD_READ
028F 9A96 SBI 0x12,6
(0037) E1_L
0290 9894 CBI 0x12,4
(0038) status=LCD_IN;
0291 B343 IN R20,0x13
(0039) status=status&0x80;
0292 7840 ANDI R20,0x80
(0040) if (status==0) break;
0293 F409 BNE 0x0295
0294 C001 RJMP 0x0296
0295 CFF5 RJMP 0x028B
(0041) }
(0042) LCD_PCT=0XFF;
0296 EF8F LDI R24,0xFF
0297 BB84 OUT 0x14,R24
(0043) E1_H
0298 9A94 SBI 0x12,4
(0044) LCD_WRITE
0299 9896 CBI 0x12,6
(0045) LCD_DATA=c;
029A BB05 OUT 0x15,R16
(0046) E1_L
029B 9894 CBI 0x12,4
(0047)
(0048) }
029C 940E05A6 CALL pop_gset1
029E 9508 RET
_wdatal:
status --> R20
d --> R16
029F 940E05A3 CALL push_gset1
(0049) void wdatal (uchar d)
(0050) { uchar status;
02A1 C00A RJMP 0x02AC
(0051)
(0052) while(1){
(0053) LCD_PCT=0X00;
02A2 2422 CLR R2
02A3 BA24 OUT 0x14,R2
(0054) E1_H
02A4 9A94 SBI 0x12,4
(0055) A0_L
02A5 9897 CBI 0x12,7
(0056) LCD_READ
02A6 9A96 SBI 0x12,6
(0057) E1_L
02A7 9894 CBI 0x12,4
(0058) status=LCD_IN;
02A8 B343 IN R20,0x13
(0059) status=status&0x80;
02A9 7840 ANDI R20,0x80
(0060) if (status==0) break;
02AA F409 BNE 0x02AC
02AB C001 RJMP 0x02AD
02AC CFF5 RJMP 0x02A2
(0061) }
(0062) LCD_PCT=0XFF;
02AD EF8F LDI R24,0xFF
02AE BB84 OUT 0x14,R24
(0063) E1_H
02AF 9A94 SBI 0x12,4
(0064) A0_H
02B0 9A97 SBI 0x12,7
(0065) LCD_WRITE
02B1 9896 CBI 0x12,6
(0066) LCD_DATA=d;
02B2 BB05 OUT 0x15,R16
(0067) E1_L
02B3 9894 CBI 0x12,4
(0068)
(0069) }
02B4 940E05A6 CALL pop_gset1
02B6 9508 RET
_wcoder:
status --> R20
c --> R16
02B7 940E05A3 CALL push_gset1
(0070) void wcoder (uchar c)
(0071) { uchar status;
02B9 C00A RJMP 0x02C4
(0072)
(0073) while(1){
(0074) LCD_PCT=0X00;
02BA 2422 CLR R2
02BB BA24 OUT 0x14,R2
(0075) E2_H
02BC 9A95 SBI 0x12,5
(0076) A0_L
02BD 9897 CBI 0x12,7
(0077) LCD_READ
02BE 9A96 SBI 0x12,6
(0078) E2_L
02BF 9895 CBI 0x12,5
(0079) status=LCD_IN;
02C0 B343 IN R20,0x13
(0080) status=status&0x80;
02C1 7840 ANDI R20,0x80
(0081) if (status==0)
02C2 F409 BNE 0x02C4
(0082) { break;}
02C3 C001 RJMP 0x02C5
02C4 CFF5 RJMP 0x02BA
(0083) }
(0084) LCD_PCT=0XFF;
02C5 EF8F LDI R24,0xFF
02C6 BB84 OUT 0x14,R24
(0085) E2_H
02C7 9A95 SBI 0x12,5
(0086) LCD_WRITE
02C8 9896 CBI 0x12,6
(0087) LCD_DATA=c;
02C9 BB05 OUT 0x15,R16
(0088) E2_L
02CA 9895 CBI 0x12,5
(0089)
(0090) }
02CB 940E05A6 CALL pop_gset1
02CD 9508 RET
_wdatar:
status --> R20
d --> R16
02CE 940E05A3 CALL push_gset1
(0091) void wdatar (uchar d)
(0092) { uchar status;
02D0 C00A RJMP 0x02DB
(0093)
(0094) while(1){ LCD_PCT=0X00;
02D1 2422 CLR R2
02D2 BA24 OUT 0x14,R2
(0095) E2_H
02D3 9A95 SBI 0x12,5
(0096) A0_L
02D4 9897 CBI 0x12,7
(0097) LCD_READ
02D5 9A96 SBI 0x12,6
(0098) E2_L
02D6 9895 CBI 0x12,5
(0099) status=LCD_IN;
02D7 B343 IN R20,0x13
(0100) status=status&0x80;
02D8 7840 ANDI R20,0x80
(0101) if (status==0) break;
02D9 F409 BNE 0x02DB
02DA C001 RJMP 0x02DC
02DB CFF5 RJMP 0x02D1
(0102) }
(0103) LCD_PCT=0XFF;
02DC EF8F LDI R24,0xFF
02DD BB84 OUT 0x14,R24
(0104) E2_H
02DE 9A95 SBI 0x12,5
(0105) A0_H
02DF 9A97 SBI 0x12,7
(0106) LCD_WRITE
02E0 9896 CBI 0x12,6
(0107) LCD_DATA=d;
02E1 BB05 OUT 0x15,R16
(0108) E2_L
02E2 9895 CBI 0x12,5
(0109)
(0110) }
02E3 940E05A6 CALL pop_gset1
02E5 9508 RET
_clear:
page --> R20
col --> R22
symbol --> R10
02E6 940E05BE CALL push_gset3
02E8 2EA0 MOV R10,R16
(0111)
(0112)
(0113) void clear(uchar symbol)
(0114) {
(0115) uchar page=0x00;
02E9 2744 CLR R20
(0116) uchar col=0x00;
02EA 2766 CLR R22
(0117) for (page=0x00;page<0x04;page++)
02EB C00D RJMP 0x02F9
(0118) {
(0119)
(0120) wcodel(prepage+page);
02EC 2F04 MOV R16,R20
02ED 5408 SUBI R16,0x48
02EE DF99 RCALL _wcodel
(0121)
(0122) for (col=0x00;col<0x61;col++)
02EF 2766 CLR R22
02F0 C005 RJMP 0x02F6
(0123) {
(0124) wcodel(precol+col);
02F1 2F06 MOV R16,R22
02F2 DF95 RCALL _wcodel
(0125) wdatal(symbol);
02F3 2D0A MOV R16,R10
02F4 DFAA RCALL _wdatal
02F5 9563 INC R22
02F6 3661 CPI R22,0x61
02F7 F3C8 BCS 0x02F1
02F8 9543 INC R20
02F9 3044 CPI R20,4
02FA F388 BCS 0x02EC
(0126) }
(0127) }
(0128) for (page=0x00;page<0x04;page++)
02FB 2744 CLR R20
02FC C00D RJMP 0x030A
(0129) {
(0130) wcoder(prepage+page);
02FD 2F04 MOV R16,R20
02FE 5408 SUBI R16,0x48
02FF DFB7 RCALL _wcoder
(0131)
(0132) for (col=0x00;col<0x61;col++)
0300 2766 CLR R22
0301 C005 RJMP 0x0307
(0133) {
(0134) wcoder(precol+col);
0302 2F06 MOV R16,R22
0303 DFB3 RCALL _wcoder
(0135) wdatar(symbol);
0304 2D0A MOV R16,R10
0305 DFC8 RCALL _wdatar
0306 9563 INC R22
0307 3661 CPI R22,0x61
0308 F3C8 BCS 0x0302
0309 9543 INC R20
030A 3044 CPI R20,4
030B F388 BCS 0x02FD
(0136) }
(0137) }
(0138) }
030C 940E059D CALL pop_gset3
030E 9508 RET
_addressl:
col --> R20
page --> R22
030F 940E05BA CALL push_gset2
0311 2F42 MOV R20,R18
0312 2F60 MOV R22,R16
(0139) //
(0140) void addressl(uchar page,uchar col)
(0141) {
(0142) wcodel(prepage+page);
0313 2F06 MOV R16,R22
0314 5408 SUBI R16,0x48
0315 DF72 RCALL _wcodel
(0143) wcodel(precol+col);
0316 2F04 MOV R16,R20
0317 DF70 RCALL _wcodel
(0144) }
0318 940E059A CALL pop_gset2
031A 9508 RET
_addressr:
col --> R20
page --> R22
031B 940E05BA CALL push_gset2
031D 2F42 MOV R20,R18
031E 2F60 MOV R22,R16
(0145) //
(0146) void addressr(uchar page,uchar col)
(0147) {
(0148) wcoder(prepage+page);
031F 2F06 MOV R16,R22
0320 5408 SUBI R16,0x48
0321 DF95 RCALL _wcoder
(0149) wcoder(precol+col+3);
0322 2F04 MOV R16,R20
0323 5F0D SUBI R16,0xFD
0324 DF92 RCALL _wcoder
(0150) }
0325 940E059A CALL pop_gset2
0327 9508 RET
(0151) //
(0152) void lcdinit(void)
(0153) { PORTC=0XFF;
_lcdinit:
0328 EF8F LDI R24,0xFF
0329 BB85 OUT 0x15,R24
(0154) DDRC=0X00;
032A 2422 CLR R2
032B BA24 OUT 0x14,R2
(0155) DDRD=0XFF;
032C BB81 OUT 0x11,R24
(0156) DDRA|=BIT(PA7);
032D 9AD7 SBI 0x1A,7
(0157) PORTA|=BIT(PA7);
032E 9ADF SBI 0x1B,7
(0158) wcodel(0xe2);wcoder(0xe2);//reset
032F EE02 LDI R16,0xE2
0330 DF57 RCALL _wcodel
0331 EE02 LDI R16,0xE2
0332 DF84 RCALL _wcoder
(0159) wcodel(0xae);wcoder(0xae);//display off
0333 EA0E LDI R16,0xAE
0334 DF53 RCALL _wcodel
0335 EA0E LDI R16,0xAE
0336 DF80 RCALL _wcoder
(0160) wcodel(0xA4);wcoder(0xA4);//display off
0337 EA04 LDI R16,0xA4
0338 DF4F RCALL _wcodel
0339 EA04 LDI R16,0xA4
033A DF7C RCALL _wcoder
(0161) wcodel(0xa9);wcoder(0xa9);//duty select :1/32
033B EA09 LDI R16,0xA9
033C DF4B RCALL _wcodel
033D EA09 LDI R16,0xA9
033E DF78 RCALL _wcoder
(0162) wcodel(0xa0);wcoder(0xa0);//clock
033F EA00 LDI R16,0xA0
0340 DF47 RCALL _wcodel
0341 EA00 LDI R16,0xA0
0342 DF74 RCALL _wcoder
(0163) wcodel(0xEE);wcoder(0xEE);//display off
0343 EE0E LDI R16,0xEE
0344 DF43 RCALL _wcodel
0345 EE0E LDI R16,0xEE
0346 DF70 RCALL _wcoder
(0164) wcodel(0xc0);wcoder(0xc0);//start line: 1
0347 EC00 LDI R16,0xC0
0348 DF3F RCALL _wcodel
0349 EC00 LDI R16,0xC0
034A DF6C RCALL _wcoder
(0165) wcodel(0x00);wcoder(0x00); //column address set:0
034B 2700 CLR R16
034C DF3B RCALL _wcodel
034D 2700 CLR R16
034E DF68 RCALL _wcoder
(0166) clear(0X00);
034F 2700 CLR R16
0350 DF95 RCALL _clear
(0167) wcodel(0xAF);wcoder(0xAF);//page address set:1
0351 EA0F LDI R16,0xAF
0352 DF35 RCALL _wcodel
0353 EA0F LDI R16,0xAF
(0168)
(0169) }
0354 CF62 RJMP _wcoder
_displaystring:
w --> R14
j --> R22
z --> R10
i --> R20
onechar --> Y+16
y --> Y+14
x --> Y+12
0355 940E0595 CALL push_arg4
0357 940E05C6 CALL push_gset5
0359 9722 SBIW R28,2
(0170) void displaystring(uchar x,uchar y,uchar *onechar)
(0171) {
(0172) uchar i=0,z=0,j=0,w;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -