📄 lcd-m8.lst
字号:
040A DD73 RCALL _setx
(0322) //*读取数据
(0323) // IN_DBUS(); /*设置为输入
(0324) DI1; //*数据模式*
040B 9A5A SBI 0x0B,2
(0325) RW1; //*读操作*
040C 9A5B SBI 0x0B,3
(0326) //*第一次读
(0327) E0;
040D 985C CBI 0x0B,4
(0328) del(1); //*延迟1us
040E E001 LDI R16,1
040F E010 LDI R17,0
0410 DCF5 RCALL _del
(0329) E1;
0411 9A5C SBI 0x0B,4
(0330) del(1);
0412 E001 LDI R16,1
0413 E010 LDI R17,0
0414 DCF1 RCALL _del
(0331) E0;
0415 985C CBI 0x0B,4
(0332) del(1);
0416 E001 LDI R16,1
0417 E010 LDI R17,0
0418 DCED RCALL _del
(0333) //*第二次读*
(0334) E0;
0419 985C CBI 0x0B,4
(0335) del(1); //*延迟1us
041A E001 LDI R16,1
041B E010 LDI R17,0
041C DCE9 RCALL _del
(0336) E1;
041D 9A5C SBI 0x0B,4
(0337) del(5);
041E E005 LDI R16,5
041F E010 LDI R17,0
0420 DCE5 RCALL _del
(0338) c=PIND;
0421 B149 IN R20,0x09
(0339) E0;
0422 985C CBI 0x0B,4
(0340) del(1);
0423 E001 LDI R16,1
0424 E010 LDI R17,0
0425 DCE0 RCALL _del
(0341) //***********
(0342) RW0;
0426 985B CBI 0x0B,3
(0343) OUT_DBUS();
0427 EF8F LDI R24,0xFF
0428 B984 OUT 0x04,R24
(0344) return c;
0429 2F04 MOV R16,R20
042A D0C5 RCALL pop_gset2
042B 9508 RET
_write_p:
c --> R10
i --> Y+7
y --> R20
x --> R22
042C D0CF RCALL push_gset3
042D 2F42 MOV R20,R18
042E 2F60 MOV R22,R16
042F 9721 SBIW R28,1
(0345) }
(0346)
(0347) void write_p(uchar x,uchar y,uchar i)
(0348) {
(0349) uchar c;
(0350) //*read_x里面用的参数就是第二屏幕的,置操作第二屏幕*
(0351) c=read_x((uchar)(x>>3),y);
0430 2F24 MOV R18,R20
0431 2F06 MOV R16,R22
0432 2711 CLR R17
0433 9515 ASR R17
0434 9507 ROR R16
0435 9515 ASR R17
0436 9507 ROR R16
0437 9515 ASR R17
0438 9507 ROR R16
0439 DFCA RCALL _read_x
043A 2EA0 MOV R10,R16
(0352) if(i=='\0')
043B 800F LDD R0,Y+7
043C 2000 TST R0
043D F441 BNE 0x0446
(0353) {
(0354) c&=~(1<<(x&7));
043E 2F16 MOV R17,R22
043F 7017 ANDI R17,7
0440 E001 LDI R16,1
0441 D0D5 RCALL lsl8
0442 2E20 MOV R2,R16
0443 9420 COM R2
0444 20A2 AND R10,R2
(0355) }
0445 C00E RJMP 0x0454
(0356) else if(i=='\1')
0446 818F LDD R24,Y+7
0447 3081 CPI R24,1
0448 F431 BNE 0x044F
(0357) {
(0358) c|=(1<<(x&7));
0449 2F16 MOV R17,R22
044A 7017 ANDI R17,7
044B E001 LDI R16,1
044C D0CA RCALL lsl8
044D 2AA0 OR R10,R16
(0359) }
044E C005 RJMP 0x0454
(0360) else
(0361) {
(0362) c^=(1<<(x&7));
044F 2F16 MOV R17,R22
0450 7017 ANDI R17,7
0451 E001 LDI R16,1
0452 D0C4 RCALL lsl8
0453 26A0 EOR R10,R16
(0363) }
(0364) w8(y,(uchar)(x>>3),c);
0454 82A8 STD Y+0,R10
0455 2F26 MOV R18,R22
0456 2733 CLR R19
0457 9535 ASR R19
0458 9527 ROR R18
0459 9535 ASR R19
045A 9527 ROR R18
045B 9535 ASR R19
045C 9527 ROR R18
045D 2F04 MOV R16,R20
045E DD2F RCALL _w8
045F 9621 ADIW R28,1
0460 D091 RCALL pop_gset3
0461 9508 RET
(0365)
(0366) }
(0367)
(0368) void initlcd(void)
(0369) {
(0370) CS1_1; CS2_1;
_initlcd:
0462 9A5D SBI 0x0B,5
0463 9A5E SBI 0x0B,6
(0371) restlcd();
0464 DCF1 RCALL _restlcd
(0372) lcdoff();
0465 DD00 RCALL _lcdoff
(0373) lcdon();
0466 DCF9 RCALL _lcdon
(0374) fromx(0);
0467 2700 CLR R16
0468 DD03 RCALL _fromx
(0375) clrlcd();
0469 DD30 RCALL _clrlcd
046A 9508 RET
FILE: D:\ele\AVR\ICC\LCD\lcd-M8\LCD_M8.c
(0001) #include <iom48v.h>
(0002) #include <macros.h>
(0003) #include <stdlib.h>
(0004) #include <eeprom.h>
(0005) #include <math.h>
(0006) #include "head.h"
(0007) #include "lcd.h"
(0008)
(0009) #define MENU 6
(0010)
(0011)
(0012)
(0013) #define verify1 0x0a
(0014) #define verify2 0x46
(0015)
(0016) #define T 490 //检测周期
(0017) #define addr 01 //address
(0018)
(0019)
(0020)
(0021)
(0022) void port_init(void)
(0023) {
(0024) PORTB = 0x00;
_port_init:
046B 2422 CLR R2
046C B825 OUT 0x05,R2
(0025) DDRB = 0xFF;
046D EF8F LDI R24,0xFF
046E B984 OUT 0x04,R24
(0026) PORTC = 0x00; //m103 output only
046F B828 OUT 0x08,R2
(0027) DDRC = 0x00;
0470 B827 OUT 0x07,R2
(0028) PORTD = 0x00;
0471 B82B OUT 0x0B,R2
(0029) DDRD = 0xff;
0472 B98A OUT 0x0A,R24
0473 9508 RET
(0030) }
(0031)
(0032) //call this routine to initialize all peripherals
(0033) void init_devices(void)
(0034) {
(0035) //stop errant interrupts until set up
(0036) CLI(); //disable all interrupts
_init_devices:
0474 94F8 BCLR 7
(0037) port_init();
0475 DFF5 RCALL _port_init
(0038)
(0039) MCUCR = 0x00;
0476 2422 CLR R2
0477 BE25 OUT 0x35,R2
(0040) EICRA = 0x00; //extended ext ints
0478 92200069 STS 0x69,R2
(0041) EIMSK = 0x00;
047A BA2D OUT 0x1D,R2
(0042)
(0043) TIMSK0 = 0x00; //timer 0 interrupt sources
047B 9220006E STS 0x6E,R2
(0044) TIMSK1 = 0x00; //timer 1 interrupt sources
047D 9220006F STS 0x6F,R2
(0045) TIMSK2 = 0x00; //timer 2 interrupt sources
047F 92200070 STS 0x70,R2
(0046)
(0047) PCMSK0 = 0x00; //pin change mask 0
0481 9220006B STS 0x6B,R2
(0048) PCMSK1 = 0x00; //pin change mask 1
0483 9220006C STS 0x6C,R2
(0049) PCMSK2 = 0x00; //pin change mask 2
0485 9220006D STS 0x6D,R2
(0050) PCICR = 0x00; //pin change enable
0487 92200068 STS 0x68,R2
(0051) PRR = 0x00; //power controller
0489 92200064 STS 0x64,R2
(0052) SEI(); //re-enable interrupts
048B 9478 BSET 7
048C 9508 RET
_main:
i --> R20
048D 9722 SBIW R28,2
(0053) //all peripherals are now initialized
(0054) }
(0055)
(0056)
(0057)
(0058) void main(void)
(0059) {
(0060) char i;
(0061)
(0062) delay(100);
048E E604 LDI R16,0x64
048F E010 LDI R17,0
0490 DC87 RCALL _delay
(0063) init_devices();
0491 DFE2 RCALL _init_devices
(0064)
(0065) //initlcd();
(0066) disen_row(16,3,"---WECOME---");
0492 E089 LDI R24,0x9
0493 E091 LDI R25,1
0494 8399 STD Y+1,R25
0495 8388 STD Y+0,R24
0496 E023 LDI R18,3
0497 E100 LDI R16,0x10
0498 DE54 RCALL _disen_row
(0067) delay(10000);
0499 E100 LDI R16,0x10
049A E217 LDI R17,0x27
049B DC7C RCALL _delay
049C C017 RJMP 0x04B4
(0068) while(1)
(0069) {
(0070) i=disen_row(25,3,"4."); disen_row(i+1,3,"B1000"); break;
049D E086 LDI R24,6
049E E091 LDI R25,1
049F 8399 STD Y+1,R25
04A0 8388 STD Y+0,R24
04A1 E023 LDI R18,3
04A2 E109 LDI R16,0x19
04A3 DE49 RCALL _disen_row
04A4 2F40 MOV R20,R16
04A5 E080 LDI R24,0
04A6 E091 LDI R25,1
04A7 8399 STD Y+1,R25
04A8 8388 STD Y+0,R24
04A9 E023 LDI R18,3
04AA 5F0F SUBI R16,0xFF
04AB DE41 RCALL _disen_row
04AC C008 RJMP 0x04B5
(0071) WDR();
04AD 95A8 WDR
(0072) PORTB =~PORTB ;
04AE B025 IN R2,0x05
04AF 9420 COM R2
04B0 B825 OUT 0x05,R2
(0073) delay(100);
FILE: <library>
04B1 E604 LDI R16,0x64
04B2 E010 LDI R17,0
04B3 DC64 RCALL _delay
04B4 CFE8 RJMP 0x049D
04B5 9622 ADIW R28,2
04B6 9508 RET
push_arg4:
04B7 933A ST R19,-Y
04B8 932A ST R18,-Y
push_arg2:
04B9 931A ST R17,-Y
04BA 930A ST R16,-Y
04BB 9508 RET
mod16u:
04BC 9468 BSET 6
04BD C001 RJMP xdiv16u
div16u:
04BE 94E8 BCLR 6
xdiv16u:
04BF 92EA ST R14,-Y
04C0 92FA ST R15,-Y
04C1 938A ST R24,-Y
04C2 24EE CLR R14
04C3 24FF CLR R15
04C4 E180 LDI R24,0x10
04C5 0F00 LSL R16
04C6 1F11 ROL R17
04C7 1CEE ROL R14
04C8 1CFF ROL R15
04C9 16E2 CP R14,R18
04CA 06F3 CPC R15,R19
04CB F018 BCS 0x04CF
04CC 1AE2 SUB R14,R18
04CD 0AF3 SBC R15,R19
04CE 9503 INC R16
04CF 958A DEC R24
04D0 F7A1 BNE 0x04C5
04D1 F416 BRTC 0x04D4
04D2 2D0E MOV R16,R14
04D3 2D1F MOV R17,R15
04D4 9189 LD R24,Y+
04D5 90F9 LD R15,Y+
04D6 90E9 LD R14,Y+
04D7 9508 RET
mod8u:
04D8 9468 BSET 6
04D9 C001 RJMP xdiv8u
div8u:
04DA 94E8 BCLR 6
xdiv8u:
04DB 932A ST R18,-Y
04DC 92FA ST R15,-Y
04DD 92EA ST R14,-Y
04DE 24FF CLR R15
04DF 24EE CLR R14
04E0 E120 LDI R18,0x10
04E1 0F00 LSL R16
04E2 1CFF ROL R15
04E3 1CEE ROL R14
04E4 16E1 CP R14,R17
04E5 F010 BCS 0x04E8
04E6 1AE1 SUB R14,R17
04E7 9503 INC R16
04E8 952A DEC R18
04E9 F7B9 BNE 0x04E1
04EA F40E BRTC 0x04EC
04EB 2D0E MOV R16,R14
04EC 90E9 LD R14,Y+
04ED 90F9 LD R15,Y+
04EE 9129 LD R18,Y+
04EF 9508 RET
pop_gset2:
04F0 E0E2 LDI R30,2
04F1 C012 RJMP pop
pop_gset3:
04F2 E0E4 LDI R30,4
04F3 C010 RJMP pop
pop_gset4:
04F4 E0E8 LDI R30,0x8
04F5 C00E RJMP pop
pop_gset5:
04F6 27EE CLR R30
04F7 C00C RJMP pop
push_gset5:
04F8 92FA ST R15,-Y
04F9 92EA ST R14,-Y
push_gset4:
04FA 92DA ST R13,-Y
04FB 92CA ST R12,-Y
push_gset3:
04FC 92BA ST R11,-Y
04FD 92AA ST R10,-Y
push_gset2:
04FE 937A ST R23,-Y
04FF 936A ST R22,-Y
push_gset1:
0500 935A ST R21,-Y
0501 934A ST R20,-Y
0502 9508 RET
pop_gset1:
0503 E0E1 LDI R30,1
pop:
0504 9149 LD R20,Y+
0505 9159 LD R21,Y+
0506 FDE0 SBRC R30,0
0507 9508 RET
0508 9169 LD R22,Y+
0509 9179 LD R23,Y+
050A FDE1 SBRC R30,1
050B 9508 RET
050C 90A9 LD R10,Y+
050D 90B9 LD R11,Y+
050E FDE2 SBRC R30,2
050F 9508 RET
0510 90C9 LD R12,Y+
0511 90D9 LD R13,Y+
0512 FDE3 SBRC R30,3
0513 9508 RET
0514 90E9 LD R14,Y+
0515 90F9 LD R15,Y+
0516 9508 RET
lsl8:
0517 2311 TST R17
0518 F019 BEQ 0x051C
0519 0F00 LSL R16
051A 951A DEC R17
051B CFFB RJMP lsl8
051C 9508 RET
asgncblk:
051D 93AA ST R26,-Y
051E 93BA ST R27,-Y
051F 93EA ST R30,-Y
0520 93FA ST R31,-Y
0521 920A ST R0,-Y
0522 81AF LDD R26,Y+7
0523 85B8 LDD R27,Y+8
0524 81ED LDD R30,Y+5
0525 81FE LDD R31,Y+6
0526 3000 CPI R16,0
0527 0701 CPC R16,R17
0528 F031 BEQ 0x052F
0529 95C8 LPM
052A 920D ST R0,X+
052B 9631 ADIW R30,1
052C 5001 SUBI R16,1
052D 4010 SBCI R17,0
052E CFF7 RJMP 0x0526
052F 9009 LD R0,Y+
0530 91F9 LD R31,Y+
0531 91E9 LD R30,Y+
0532 91B9 LD R27,Y+
0533 91A9 LD R26,Y+
0534 9624 ADIW R28,4
0535 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -