📄 main.lis
字号:
01FE AA9A sbi 0x15,2
0200 .dbline 120
0200 ; // RW=0;
0200 ; PORTA=lcddata;
0200 4BBB out 0x1b,R20
0202 .dbline 122
0202 ; // E=0;
0202 ; PORTC&=~E;
0202 AC98 cbi 0x15,4
0204 .dbline 123
0204 ; delay(1);
0204 01E0 ldi R16,1
0206 10E0 ldi R17,0
0208 8ADF rcall _delay
020A .dbline -2
020A L50:
020A 00D0 rcall pop_gset1
020C .dbline 0 ; func end
020C 0895 ret
020E .dbsym r lcddata 20 c
020E .dbend
020E .dbfunc e writecom _writecom fV
020E ; lcddata -> R20
.even
020E _writecom::
020E 00D0 rcall push_gset1
0210 402F mov R20,R16
0212 .dbline -1
0212 .dbline 127
0212 ; }
0212 ; /////////////////////////////////
0212 ; void writecom(uchar lcddata)
0212 ; {
0212 .dbline 129
0212 ; // E=1;
0212 ; PORTC|=E;
0212 AC9A sbi 0x15,4
0214 .dbline 131
0214 ; // RS=0;
0214 ; PORTC&=~RS;
0214 AA98 cbi 0x15,2
0216 .dbline 133
0216 ; // RW=0;
0216 ; PORTA=lcddata;
0216 4BBB out 0x1b,R20
0218 .dbline 135
0218 ; // E=0;
0218 ; PORTC&=~E;
0218 AC98 cbi 0x15,4
021A .dbline 136
021A ; delay(1);
021A 01E0 ldi R16,1
021C 10E0 ldi R17,0
021E 7FDF rcall _delay
0220 .dbline -2
0220 L51:
0220 00D0 rcall pop_gset1
0222 .dbline 0 ; func end
0222 0895 ret
0224 .dbsym r lcddata 20 c
0224 .dbend
0224 .dbfunc e writeline _writeline fV
0224 ; pt -> R20,R21
0224 ; x -> R22
.even
0224 _writeline::
0224 00D0 rcall push_gset2
0226 A901 movw R20,R18
0228 602F mov R22,R16
022A .dbline -1
022A .dbline 140
022A ; }
022A ;
022A ; void writeline(uchar x,uchar const *pt)
022A ; {
022A .dbline 141
022A ; if(x==0)
022A 6623 tst R22
022C 29F4 brne L53
022E .dbline 142
022E ; {
022E .dbline 143
022E ; writecom(0x01);
022E 01E0 ldi R16,1
0230 EEDF rcall _writecom
0232 .dbline 144
0232 ; writecom(0x80);
0232 00E8 ldi R16,128
0234 ECDF rcall _writecom
0236 .dbline 145
0236 ; }
0236 07C0 rjmp L54
0238 L53:
0238 .dbline 147
0238 .dbline 148
0238 E62F mov R30,R22
023A FF27 clr R31
023C 3197 sbiw R30,1
023E E40F add R30,R20
0240 F51F adc R31,R21
0242 0491 lpm R16,Z
0244 D9DF rcall _writedata
0246 .dbline 149
0246 L54:
0246 .dbline -2
0246 L52:
0246 00D0 rcall pop_gset2
0248 .dbline 0 ; func end
0248 0895 ret
024A .dbsym r pt 20 pkc
024A .dbsym r x 22 c
024A .dbend
024A .dbfunc e initlcd _initlcd fV
.even
024A _initlcd::
024A .dbline -1
024A .dbline 154
024A ; else
024A ; {
024A ; writedata(pt[x-1]);
024A ; }
024A ; }
024A ;
024A ; ///////////////////////////////////
024A ; void initlcd()
024A ; {
024A .dbline 155
024A ; writecom(0x01);
024A 01E0 ldi R16,1
024C E0DF rcall _writecom
024E .dbline 156
024E ; writecom(0x38);
024E 08E3 ldi R16,56
0250 DEDF rcall _writecom
0252 .dbline 157
0252 ; writecom(0x0f);
0252 0FE0 ldi R16,15
0254 DCDF rcall _writecom
0256 .dbline 158
0256 ; writecom(0x06);
0256 06E0 ldi R16,6
0258 DADF rcall _writecom
025A .dbline 159
025A ; writecom(0x01);
025A 01E0 ldi R16,1
025C D8DF rcall _writecom
025E .dbline 160
025E ; writecom(0x80);
025E 00E8 ldi R16,128
0260 D6DF rcall _writecom
0262 .dbline -2
0262 L55:
0262 .dbline 0 ; func end
0262 0895 ret
0264 .dbend
0264 .dbfunc e GetKey _GetKey fc
0264 ; temp -> R20
0264 ; key -> R22
.even
0264 _GetKey::
0264 00D0 rcall push_gset2
0266 .dbline -1
0266 .dbline 169
0266 ; }
0266 ; ///////////////////////////////////
0266 ;
0266 ;
0266 ;
0266 ;
0266 ; //////////////////////////////////
0266 ; uchar GetKey(void)
0266 ; {
0266 .dbline 174
0266 ; uchar key;
0266 ; uchar temp;
0266 ; //temp的高4位是按下的列
0266 ; //temp低4位是按下的行
0266 ; DDRD&=~(C0+C1+C2);//输
0266 81B3 in R24,0x11
0268 837E andi R24,227
026A 81BB out 0x11,R24
026C .dbline 175
026C ; DDRD|=R0+R1;//输
026C 81B3 in R24,0x11
026E 806C ori R24,192
0270 81BB out 0x11,R24
0272 .dbline 176
0272 ; PORTD&=~(R0+R1);
0272 82B3 in R24,0x12
0274 8F73 andi R24,63
0276 82BB out 0x12,R24
0278 .dbline 177
0278 ; key=PIND;
0278 60B3 in R22,0x10
027A .dbline 178
027A ; key>>=2;
027A 6695 lsr R22
027C 6695 lsr R22
027E .dbline 179
027E ; key&=0x07;
027E 6770 andi R22,7
0280 .dbline 180
0280 ; if(key!=0x07)
0280 6730 cpi R22,7
0282 D1F0 breq L57
0284 .dbline 181
0284 ; {
0284 .dbline 182
0284 ; delay(1);
0284 01E0 ldi R16,1
0286 10E0 ldi R17,0
0288 4ADF rcall _delay
028A .dbline 183
028A ; key=PIND;
028A 60B3 in R22,0x10
028C .dbline 184
028C ; key>>=2;
028C 6695 lsr R22
028E 6695 lsr R22
0290 .dbline 185
0290 ; key&=0x07;
0290 6770 andi R22,7
0292 .dbline 186
0292 ; if(key!=0x07)
0292 6730 cpi R22,7
0294 89F0 breq L59
0296 .dbline 187
0296 ; {
0296 .dbline 189
0296 ; //确实有键按下
0296 ; temp=key;
0296 462F mov R20,R22
0298 .dbline 190
0298 ; DDRD|=C0+C1+C2;//输出
0298 81B3 in R24,0x11
029A 8C61 ori R24,28
029C 81BB out 0x11,R24
029E .dbline 191
029E ; DDRD&=~(R0+R1);//输入
029E 81B3 in R24,0x11
02A0 8F73 andi R24,63
02A2 81BB out 0x11,R24
02A4 .dbline 192
02A4 ; PORTD|=C0+C1+C2;
02A4 82B3 in R24,0x12
02A6 8C61 ori R24,28
02A8 82BB out 0x12,R24
02AA .dbline 193
02AA ; key=PIND;
02AA 60B3 in R22,0x10
02AC .dbline 194
02AC ; key>>=2;
02AC 6695 lsr R22
02AE 6695 lsr R22
02B0 .dbline 195
02B0 ; key&=0x30;
02B0 6073 andi R22,48
02B2 .dbline 196
02B2 ; temp+=key;
02B2 460F add R20,R22
02B4 .dbline 197
02B4 ; return temp;
02B4 042F mov R16,R20
02B6 01C0 rjmp L56
02B8 L59:
02B8 .dbline 199
02B8 ; }
02B8 ; }
02B8 L57:
02B8 .dbline 200
02B8 ; return 0xff;
02B8 0FEF ldi R16,255
02BA .dbline -2
02BA L56:
02BA 00D0 rcall pop_gset2
02BC .dbline 0 ; func end
02BC 0895 ret
02BE .dbsym r temp 20 c
02BE .dbsym r key 22 c
02BE .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\ATMega8515\测试程序\main.c
0000 _temp::
0000 .blkb 1
0001 .dbsym e temp _temp c
0001 _key::
0001 .blkb 1
0002 .dbsym e key _key c
.area data(ram, con, rel)
0008 .dbfile C:\ATMega8515\测试程序\main.c
0008 L2:
0008 .blkb 46
.area idata
0008 2D2D2D2D2D2D2D2D2D2D2D5465737420 .byte 45,45,45,45,45,45,45,45,45,45,45,'T,'e,'s,'t,32
0018 466F722041544D656761383531352D2D .byte 'F,'o,'r,32,'A,'T,'M,'e,'g,'a,56,53,49,53,45,45
0028 2D2D2D2D2D2D2D2D2D2D2D2D0A00 .byte 45,45,45,45,45,45,45,45,45,45,45,45,10,0
.area data(ram, con, rel)
0036 .dbfile C:\ATMega8515\测试程序\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -