📄 test.lst
字号:
022E C02B RJMP 0x025A
(0059) else if((temp&0x02)==0)right=3;
022F 90200157 LDS R2,temp
0231 FC21 SBRC R2,1
0232 C004 RJMP 0x0237
0233 E083 LDI R24,3
0234 93800064 STS right,R24
0236 C023 RJMP 0x025A
(0060) else if((temp&0x04)==0)right=5;
0237 90200157 LDS R2,temp
0239 FC22 SBRC R2,2
023A C01F RJMP 0x025A
023B E085 LDI R24,5
023C 93800064 STS right,R24
(0061) }
023E C01B RJMP 0x025A
(0062) else if((key&0x20)!=0)
023F 90200158 LDS R2,key
0241 FE25 SBRS R2,5
0242 C017 RJMP 0x025A
(0063) {
(0064) if((temp&0x01)==0)right=2;
0243 90200157 LDS R2,temp
0245 FC20 SBRC R2,0
0246 C004 RJMP 0x024B
0247 E082 LDI R24,2
0248 93800064 STS right,R24
024A C00F RJMP 0x025A
(0065) else if((temp&0x02)==0)right=4;
024B 90200157 LDS R2,temp
024D FC21 SBRC R2,1
024E C004 RJMP 0x0253
024F E084 LDI R24,4
0250 93800064 STS right,R24
0252 C007 RJMP 0x025A
(0066) else if((temp&0x04)==0)right=6;
0253 90200157 LDS R2,temp
0255 FC22 SBRC R2,2
0256 C003 RJMP 0x025A
0257 E086 LDI R24,6
0258 93800064 STS right,R24
025A CF78 RJMP 0x01D3
025B 9508 RET
_delay:
x --> R20
ticks --> R16
025C D2BB RCALL push_gset1
(0067) }
(0068) /////////////////////////////////////
(0069) }
(0070)
(0071)
(0072) }
(0073) //////////////////////////////
(0074) void delay(uint ticks)
(0075) {
(0076) uchar x;
(0077) for(;ticks!=0;ticks--)for(x=100;x!=0;x--);
025D C007 RJMP 0x0265
025E E644 LDI R20,0x64
025F C001 RJMP 0x0261
0260 954A DEC R20
0261 2344 TST R20
0262 F7E9 BNE 0x0260
0263 5001 SUBI R16,1
0264 4010 SBCI R17,0
0265 3000 CPI R16,0
0266 0701 CPC R16,R17
0267 F7B1 BNE 0x025E
0268 D2B2 RCALL pop_gset1
0269 9508 RET
_display:
i --> R20
026A D2AD RCALL push_gset1
(0078) }
(0079)
(0080) void display()
(0081) {
(0082) uchar i;
(0083) PORTA=~leddata;
026B 90200062 LDS R2,leddata
026D 9420 COM R2
026E BA2B OUT 0x1B,R2
(0084) PORTC&=~LED;
026F 98AD CBI 0x15,5
(0085) delay(1);
0270 E001 LDI R16,1
0271 E010 LDI R17,0
0272 DFE9 RCALL _delay
(0086) PORTC|=LED;
0273 9AAD SBI 0x15,5
(0087) ///////////
(0088) PORTA=Tab[left];
0274 E284 LDI R24,0x24
0275 E090 LDI R25,0
0276 91E00063 LDS R30,left
0278 27FF CLR R31
0279 0FE8 ADD R30,R24
027A 1FF9 ADC R31,R25
027B 91E4 LPM R30,0(Z)
027C BBEB OUT 0x1B,R30
(0089) PORTC&=~SEG0;
027D 98AF CBI 0x15,7
(0090) delay(1);
027E E001 LDI R16,1
027F E010 LDI R17,0
0280 DFDB RCALL _delay
(0091) PORTC|=SEG0;
0281 9AAF SBI 0x15,7
(0092) /////////////////
(0093) PORTA=Tab[right];
0282 E284 LDI R24,0x24
0283 E090 LDI R25,0
0284 91E00064 LDS R30,right
0286 27FF CLR R31
0287 0FE8 ADD R30,R24
0288 1FF9 ADC R31,R25
0289 91E4 LPM R30,0(Z)
028A BBEB OUT 0x1B,R30
(0094) PORTC&=~SEG1;
028B 98AE CBI 0x15,6
(0095) delay(1);
028C E001 LDI R16,1
028D E010 LDI R17,0
028E DFCD RCALL _delay
(0096) PORTC|=SEG1;
028F 9AAE SBI 0x15,6
(0097) //////////////////
(0098) for(i=0;i!=8;i++)
0290 2744 CLR R20
0291 C032 RJMP 0x02C4
(0099) {
(0100)
(0101) PORTB|=0x01;
0292 9AC0 SBI 0x18,0
(0102) SPDR=pic1[i];
0293 E585 LDI R24,0x55
0294 E090 LDI R25,0
0295 2FE4 MOV R30,R20
0296 27FF CLR R31
0297 0FE8 ADD R30,R24
0298 1FF9 ADC R31,R25
0299 91E4 LPM R30,0(Z)
029A B9EF OUT 0x0F,R30
(0103) SomeNop
029B 0000 NOP
029C 0000 NOP
029D 0000 NOP
029E 0000 NOP
029F 0000 NOP
02A0 0000 NOP
02A1 0000 NOP
02A2 0000 NOP
02A3 0000 NOP
02A4 0000 NOP
02A5 0000 NOP
02A6 0000 NOP
02A7 0000 NOP
02A8 0000 NOP
02A9 0000 NOP
02AA 0000 NOP
02AB 0000 NOP
02AC 0000 NOP
(0104) PORTB&=0xf1;
02AD B388 IN R24,0x18
02AE 7F81 ANDI R24,0xF1
02AF BB88 OUT 0x18,R24
(0105) PORTB|=line[i+index];
02B0 90200069 LDS R2,index
02B2 2433 CLR R3
02B3 2FE4 MOV R30,R20
02B4 27FF CLR R31
02B5 0DE2 ADD R30,R2
02B6 1DF3 ADC R31,R3
02B7 E485 LDI R24,0x45
02B8 E090 LDI R25,0
02B9 0FE8 ADD R30,R24
02BA 1FF9 ADC R31,R25
02BB 91E4 LPM R30,0(Z)
02BC B228 IN R2,0x18
02BD 2A2E OR R2,R30
02BE BA28 OUT 0x18,R2
(0106) PORTB&=~0x01;
02BF 98C0 CBI 0x18,0
(0107) delay(1);
02C0 E001 LDI R16,1
02C1 E010 LDI R17,0
02C2 DF99 RCALL _delay
02C3 9543 INC R20
02C4 3048 CPI R20,0x8
02C5 F009 BEQ 0x02C7
02C6 CFCB RJMP 0x0292
02C7 D253 RCALL pop_gset1
02C8 9508 RET
_writedata:
lcddata --> R20
02C9 D24E RCALL push_gset1
02CA 2F40 MOV R20,R16
(0108) }
(0109) }
(0110)
(0111) /////////////////LCD///////////////////////
(0112) ///////////////////////////////
(0113) void writedata(uchar lcddata)
(0114) {
(0115) // E=1;
(0116) PORTC|=E;
02CB 9AAC SBI 0x15,4
(0117) // RS=1;
(0118) PORTC|=RS;
02CC 9AAA SBI 0x15,2
(0119) // RW=0;
(0120) PORTA=lcddata;
02CD BB4B OUT 0x1B,R20
(0121) // E=0;
(0122) PORTC&=~E;
02CE 98AC CBI 0x15,4
(0123) delay(1);
02CF E001 LDI R16,1
02D0 E010 LDI R17,0
02D1 DF8A RCALL _delay
02D2 D248 RCALL pop_gset1
02D3 9508 RET
_writecom:
lcddata --> R20
02D4 D243 RCALL push_gset1
02D5 2F40 MOV R20,R16
(0124) }
(0125) /////////////////////////////////
(0126) void writecom(uchar lcddata)
(0127) {
(0128) // E=1;
(0129) PORTC|=E;
02D6 9AAC SBI 0x15,4
(0130) // RS=0;
(0131) PORTC&=~RS;
02D7 98AA CBI 0x15,2
(0132) // RW=0;
(0133) PORTA=lcddata;
02D8 BB4B OUT 0x1B,R20
(0134) // E=0;
(0135) PORTC&=~E;
02D9 98AC CBI 0x15,4
(0136) delay(1);
02DA E001 LDI R16,1
02DB E010 LDI R17,0
02DC DF7F RCALL _delay
02DD D23D RCALL pop_gset1
02DE 9508 RET
_writeline:
pt --> R20
x --> R22
02DF D236 RCALL push_gset2
02E0 01A9 MOVW R20,R18
02E1 2F60 MOV R22,R16
(0137) }
(0138)
(0139) void writeline(uchar x,uchar const *pt)
(0140) {
(0141) if(x==0)
02E2 2366 TST R22
02E3 F429 BNE 0x02E9
(0142) {
(0143) writecom(0x01);
02E4 E001 LDI R16,1
02E5 DFEE RCALL _writecom
(0144) writecom(0x80);
02E6 E800 LDI R16,0x80
02E7 DFEC RCALL _writecom
(0145) }
02E8 C007 RJMP 0x02F0
(0146) else
(0147) {
(0148) writedata(pt[x-1]);
02E9 2FE6 MOV R30,R22
02EA 27FF CLR R31
02EB 9731 SBIW R30,1
02EC 0FE4 ADD R30,R20
02ED 1FF5 ADC R31,R21
02EE 9104 LPM R16,0(Z)
02EF DFD9 RCALL _writedata
(0149) }
02F0 D219 RCALL pop_gset2
02F1 9508 RET
(0150) }
(0151)
(0152) ///////////////////////////////////
(0153) void initlcd()
(0154) {
(0155) writecom(0x01);
_initlcd:
02F2 E001 LDI R16,1
02F3 DFE0 RCALL _writecom
(0156) writecom(0x38);
02F4 E308 LDI R16,0x38
02F5 DFDE RCALL _writecom
(0157) writecom(0x0f);
02F6 E00F LDI R16,0xF
02F7 DFDC RCALL _writecom
(0158) writecom(0x06);
02F8 E006 LDI R16,6
02F9 DFDA RCALL _writecom
(0159) writecom(0x01);
02FA E001 LDI R16,1
02FB DFD8 RCALL _writecom
(0160) writecom(0x80);
02FC E800 LDI R16,0x80
02FD DFD6 RCALL _writecom
02FE 9508 RET
_GetKey:
temp --> R20
key --> R22
02FF D216 RCALL push_gset2
(0161) }
(0162) ///////////////////////////////////
(0163)
(0164)
(0165)
(0166)
(0167) //////////////////////////////////
(0168) uchar GetKey(void)
(0169) {
(0170) uchar key;
(0171) uchar temp;
(0172) //temp的高4位是按下的列
(0173) //temp低4位是按下的行
(0174) DDRD&=~(C0+C1+C2);//输
0300 B381 IN R24,0x11
0301 7E83 ANDI R24,0xE3
0302 BB81 OUT 0x11,R24
(0175) DDRD|=R0+R1;//输
0303 B381 IN R24,0x11
0304 6C80 ORI R24,0xC0
0305 BB81 OUT 0x11,R24
(0176) PORTD&=~(R0+R1);
0306 B382 IN R24,0x12
0307 738F ANDI R24,0x3F
0308 BB82 OUT 0x12,R24
(0177) key=PIND;
0309 B360 IN R22,0x10
(0178) key>>=2;
030A 9566 LSR R22
030B 9566 LSR R22
(0179) key&=0x07;
030C 7067 ANDI R22,7
(0180) if(key!=0x07)
030D 3067 CPI R22,7
030E F0D1 BEQ 0x0329
(0181) {
(0182) delay(1);
030F E001 LDI R16,1
0310 E010 LDI R17,0
0311 DF4A RCALL _delay
(0183) key=PIND;
0312 B360 IN R22,0x10
(0184) key>>=2;
0313 9566 LSR R22
0314 9566 LSR R22
(0185) key&=0x07;
0315 7067 ANDI R22,7
(0186) if(key!=0x07)
0316 3067 CPI R22,7
0317 F089 BEQ 0x0329
(0187) {
(0188) //确实有键按下
(0189) temp=key;
0318 2F46 MOV R20,R22
(0190) DDRD|=C0+C1+C2;//输出
0319 B381 IN R24,0x11
031A 618C ORI R24,0x1C
031B BB81 OUT 0x11,R24
(0191) DDRD&=~(R0+R1);//输入
031C B381 IN R24,0x11
031D 738F ANDI R24,0x3F
031E BB81 OUT 0x11,R24
(0192) PORTD|=C0+C1+C2;
031F B382 IN R24,0x12
0320 618C ORI R24,0x1C
0321 BB82 OUT 0x12,R24
(0193) key=PIND;
0322 B360 IN R22,0x10
(0194) key>>=2;
0323 9566 LSR R22
0324 9566 LSR R22
(0195) key&=0x30;
0325 7360 ANDI R22,0x30
(0196) temp+=key;
0326 0F46 ADD R20,R22
(0197) return temp;
0327 2F04 MOV R16,R20
0328 C001 RJMP 0x032A
(0198) }
(0199) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -