📄 main.lst
字号:
(0159) void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0160) unsigned char SelscP,unsigned char num,unsigned char flag)//Add:显示数据的起始地址
(0161) { unsigned char i,m=0,dat; //xAdd,yAdd:显示位置
0194 2744 CLR R20
(0162) //SelscP:选择屏1,2,3
(0163) OutI(SelscP,xAdd++); //x首地址 //mun显示宽度,一般为16
0195 842C LDD R2,Y+12
0196 2D82 MOV R24,R2
0197 5F8F SUBI R24,0xFF
0198 878C STD Y+12,R24
0199 2D22 MOV R18,R2
019A 8908 LDD R16,Y+16
019B DF6F RCALL _OutI
(0164) OutI(SelscP,yAdd); //y首地址 //flag:是否清字位1不清
019C 852E LDD R18,Y+14
019D 8908 LDD R16,Y+16
019E DF6C RCALL _OutI
019F C026 RJMP 0x01C6
(0165) while(m<num+2)
(0166) { for(i=0;i<num;i++)
01A0 2766 CLR R22
01A1 C017 RJMP 0x01B9
(0167) { if(flag==0) dat=0;
01A2 20AA TST R10
01A3 F411 BNE 0x01A6
01A4 24EE CLR R14
01A5 C00F RJMP 0x01B5
(0168) else dat=font[Add+i+m];
01A6 2E26 MOV R2,R22
01A7 2433 CLR R3
01A8 85EA LDD R30,Y+10
01A9 85FB LDD R31,Y+11
01AA 0DE2 ADD R30,R2
01AB 1DF3 ADC R31,R3
01AC 2E24 MOV R2,R20
01AD 2433 CLR R3
01AE 0DE2 ADD R30,R2
01AF 1DF3 ADC R31,R3
01B0 E584 LDI R24,0x54
01B1 E090 LDI R25,0
01B2 0FE8 ADD R30,R24
01B3 1FF9 ADC R31,R25
01B4 90E4 LPM R14,0(Z)
(0169) OutD(SelscP,dat);
01B5 2D2E MOV R18,R14
01B6 8908 LDD R16,Y+16
01B7 DF82 RCALL _OutD
01B8 9563 INC R22
01B9 156C CP R22,R12
01BA F338 BCS 0x01A2
(0170) }
(0171) OutI(SelscP,xAdd++);
01BB 842C LDD R2,Y+12
01BC 2D82 MOV R24,R2
01BD 5F8F SUBI R24,0xFF
01BE 878C STD Y+12,R24
01BF 2D22 MOV R18,R2
01C0 8908 LDD R16,Y+16
01C1 DF49 RCALL _OutI
(0172) OutI(SelscP,yAdd);
01C2 852E LDD R18,Y+14
01C3 8908 LDD R16,Y+16
01C4 DF46 RCALL _OutI
(0173) m+=num;
01C5 0D4C ADD R20,R12
01C6 2D8C MOV R24,R12
01C7 5F8E SUBI R24,0xFE
01C8 1748 CP R20,R24
01C9 F2B0 BCS 0x01A0
01CA 940E0265 CALL pop_gset5
01CC 9624 ADIW R28,4
01CD 9508 RET
_DisplayLine:
p --> Y+8
r --> R20
l --> R22
i --> R10
flag --> R12
line --> R14
com --> R22
Add --> Y+17
01CE 940E0242 CALL push_arg4
01D0 940E0268 CALL push_gset5
01D2 2F62 MOV R22,R18
01D3 9727 SBIW R28,7
01D4 88ED LDD R14,Y+21
01D5 88CF LDD R12,Y+23
(0174) }
(0175) }
(0176)
(0177) void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag)
(0178) { unsigned char i,p,l,r; //Add:数据起始位置
(0179) //com:空位置个数,4字为满
(0180) r=com&0x0f; //line: 显示行位置
01D6 2F46 MOV R20,R22
01D7 704F ANDI R20,0xF
(0181) l=com>>4; //flag:是否清字符1不清
01D8 2F86 MOV R24,R22
01D9 9582 SWAP R24
01DA 708F ANDI R24,0xF
01DB 2F68 MOV R22,R24
(0182) for(i=0;i<r;i++)
01DC 24AA CLR R10
01DD C01F RJMP 0x01FD
(0183) DisplayWord(Add+i*32,0xb8+(line%4)*2,0x40+(i+l)*16,(line/4)+1,16,flag);
01DE 82CE STD Y+6,R12
01DF E180 LDI R24,0x10
01E0 838C STD Y+4,R24
01E1 2D8E MOV R24,R14
01E2 9586 LSR R24
01E3 9586 LSR R24
01E4 5F8F SUBI R24,0xFF
01E5 838A STD Y+2,R24
01E6 2C2A MOV R2,R10
01E7 0E26 ADD R2,R22
01E8 E180 LDI R24,0x10
01E9 9D82 MUL R24,R2
01EA 2D80 MOV R24,R0
01EB 5C80 SUBI R24,0xC0
01EC 8388 STD Y+0,R24
01ED E014 LDI R17,4
01EE 2D0E MOV R16,R14
01EF 940E0247 CALL mod8u
01F1 E082 LDI R24,2
01F2 9F80 MUL R24,R16
01F3 2D20 MOV R18,R0
01F4 5428 SUBI R18,0x48
01F5 E280 LDI R24,0x20
01F6 9D8A MUL R24,R10
01F7 8909 LDD R16,Y+17
01F8 891A LDD R17,Y+18
01F9 0D00 ADD R16,R0
01FA 1D11 ADC R17,R1
01FB DF92 RCALL _DisplayWord
01FC 94A3 INC R10
01FD 16A4 CP R10,R20
01FE F2F8 BCS 0x01DE
01FF 9627 ADIW R28,7
0200 940E0265 CALL pop_gset5
0202 9624 ADIW R28,4
0203 9508 RET
FILE: F:\工程文件\程序\12864\huomen.c
(0001) //ICC-AVR application builder : 2006-11-4 10:04:08
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004)
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include <stdlib.h>
(0008)
(0009) #include "12864.h"
(0010) int i,j;
(0011) void port_init(void)
(0012) {
(0013) PORTA = 0xFF;
_port_init:
0204 EF8F LDI R24,0xFF
0205 BB8B OUT 0x1B,R24
(0014) DDRA = 0xFF;
0206 BB8A OUT 0x1A,R24
(0015) PORTB = 0xFF;
0207 BB88 OUT 0x18,R24
(0016) DDRB = 0xFF;
0208 BB87 OUT 0x17,R24
(0017) PORTC = 0xFF; //m103 output only
0209 BB85 OUT 0x15,R24
(0018) DDRC = 0xFF;
020A BB84 OUT 0x14,R24
(0019) PORTD = 0xFF;
020B BB82 OUT 0x12,R24
(0020) DDRD = 0xFF;
020C BB81 OUT 0x11,R24
020D 9508 RET
(0021) }
(0022)
(0023) //call this routine to initialise all peripherals
(0024) void init_devices(void)
(0025) {
(0026) //stop errant interrupts until set up
(0027) CLI(); //disable all interrupts
_init_devices:
020E 94F8 BCLR 7
(0028) port_init();
020F DFF4 RCALL _port_init
(0029)
(0030) MCUCR = 0x00;
0210 2422 CLR R2
0211 BE25 OUT 0x35,R2
(0031) GICR = 0x00;
0212 BE2B OUT 0x3B,R2
(0032) TIMSK = 0x00; //timer interrupt sources
0213 BE29 OUT 0x39,R2
(0033) SEI(); //re-enable interrupts
0214 9478 BSET 7
0215 9508 RET
_main:
k --> Y+4
0216 9723 SBIW R28,3
(0034) //all peripherals are now initialised
(0035) }
(0036)
(0037) //
(0038) void main(void)
(0039) {
(0040) int k;
(0041) init_devices();
0217 DFF6 RCALL _init_devices
(0042)
(0043)
(0044) OutI(0,0x3e);
0218 E32E LDI R18,0x3E
0219 2700 CLR R16
021A DEF0 RCALL _OutI
(0045) OutI(0,0xb8);
021B EB28 LDI R18,0xB8
021C 2700 CLR R16
021D DEED RCALL _OutI
(0046) OutI(0,0x40);
021E E420 LDI R18,0x40
021F 2700 CLR R16
0220 DEEA RCALL _OutI
(0047)
(0048) OutI(0,0xC0);
0221 EC20 LDI R18,0xC0
0222 2700 CLR R16
0223 DEE7 RCALL _OutI
(0049) OutI(0,0x3f); //启动LCD
0224 E32F LDI R18,0x3F
0225 2700 CLR R16
0226 DEE4 RCALL _OutI
(0050) ClearDisplay();
0227 DF4D RCALL _ClearDisplay
(0051) ClearDisplay();
0228 DF4C RCALL _ClearDisplay
(0052) DisplayLine(0,0x04,0,1);
0229 E081 LDI R24,1
022A 838A STD Y+2,R24
022B 2422 CLR R2
022C 8228 STD Y+0,R2
022D E024 LDI R18,4
022E 2700 CLR R16
022F 2711 CLR R17
0230 DF9D RCALL _DisplayLine
(0053) DisplayLine(128,0x04,4,1);
0231 E081 LDI R24,1
0232 838A STD Y+2,R24
0233 E084 LDI R24,4
0234 8388 STD Y+0,R24
0235 E024 LDI R18,4
0236 E800 LDI R16,0x80
0237 E010 LDI R17,0
0238 DF95 RCALL _DisplayLine
(0054) DisplayLine(256,0x04,1,1);
FILE: <library>
0239 E081 LDI R24,1
023A 838A STD Y+2,R24
023B 8388 STD Y+0,R24
023C E024 LDI R18,4
023D E000 LDI R16,0
023E E011 LDI R17,1
023F DF8E RCALL _DisplayLine
0240 9623 ADIW R28,3
0241 9508 RET
push_arg4:
0242 933A ST R19,-Y
0243 932A ST R18,-Y
push_arg2:
0244 931A ST R17,-Y
0245 930A ST R16,-Y
0246 9508 RET
mod8u:
0247 9468 BSET 6
0248 C001 RJMP xdiv8u
div8u:
0249 94E8 BCLR 6
xdiv8u:
024A 932A ST R18,-Y
024B 92FA ST R15,-Y
024C 92EA ST R14,-Y
024D 24FF CLR R15
024E 24EE CLR R14
024F E120 LDI R18,0x10
0250 0F00 LSL R16
0251 1CFF ROL R15
0252 1CEE ROL R14
0253 16E1 CP R14,R17
0254 F010 BCS 0x0257
0255 1AE1 SUB R14,R17
0256 9503 INC R16
0257 952A DEC R18
0258 F7B9 BNE 0x0250
0259 F40E BRTC 0x025B
025A 2D0E MOV R16,R14
025B 90E9 LD R14,Y+
025C 90F9 LD R15,Y+
025D 9129 LD R18,Y+
025E 9508 RET
pop_gset2:
025F E0E2 LDI R30,2
0260 940C0274 JMP pop
pop_gset3:
0262 E0E4 LDI R30,4
0263 940C0274 JMP pop
pop_gset5:
0265 27EE CLR R30
0266 940C0274 JMP pop
push_gset5:
0268 92FA ST R15,-Y
0269 92EA ST R14,-Y
push_gset4:
026A 92DA ST R13,-Y
026B 92CA ST R12,-Y
push_gset3:
026C 92BA ST R11,-Y
026D 92AA ST R10,-Y
push_gset2:
026E 937A ST R23,-Y
026F 936A ST R22,-Y
push_gset1:
0270 935A ST R21,-Y
0271 934A ST R20,-Y
0272 9508 RET
pop_gset1:
0273 E0E1 LDI R30,1
pop:
0274 9149 LD R20,Y+
0275 9159 LD R21,Y+
0276 FDE0 SBRC R30,0
0277 9508 RET
0278 9169 LD R22,Y+
0279 9179 LD R23,Y+
027A FDE1 SBRC R30,1
027B 9508 RET
027C 90A9 LD R10,Y+
027D 90B9 LD R11,Y+
027E FDE2 SBRC R30,2
027F 9508 RET
0280 90C9 LD R12,Y+
0281 90D9 LD R13,Y+
0282 FDE3 SBRC R30,3
0283 9508 RET
0284 90E9 LD R14,Y+
0285 90F9 LD R15,Y+
0286 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -