?? lcddrive.lis
字號:
0206 0895 ret
0208 .dbsym l HH 1 i
0208 .dbsym l LASC 4 c
0208 .dbsym l HASC 2 c
0208 .dbsym r y 12 c
0208 .dbsym r x 10 c
0208 .dbend
0208 .dbfunc e PrintS _PrintS fV
0208 ; Ty -> R10
0208 ; Tx -> R20
0208 ; i -> R22
0208 ; str -> R12,R13
0208 ; y -> R20
0208 ; x -> R14
.even
0208 _PrintS::
0208 00D0 rcall push_xgsetF0FC
020A 422F mov R20,R18
020C E02E mov R14,R16
020E 2397 sbiw R28,3
0210 CD84 ldd R12,y+13
0212 DE84 ldd R13,y+14
0214 .dbline -1
0214 .dbline 180
0214 ; }
0214 ;
0214 ; //**************************************在指定位置處打印ASCII字符串**********************************
0214 ; //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7
0214 ; //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3
0214 ; //*str:存放ASCII字符串的指針
0214 ; void PrintS(uchar x,uchar y,uchar *str) //在指定位置打印字符串
0214 ; {
0214 .dbline 183
0214 ; uchar i,Tx,Ty;
0214 ; // EA=0;
0214 ; Ty=y;Tx=x;
0214 A42E mov R10,R20
0216 .dbline 183
0216 4E2D mov R20,R14
0218 .dbline 184
0218 ; for(i=0;str[i]!='\0';i=i+2)
0218 6627 clr R22
021A 15C0 rjmp L49
021C L46:
021C .dbline 185
021C ; {
021C .dbline 186
021C ; DispHalfWord(Tx,Ty,str[i],str[i+1]);
021C 262E mov R2,R22
021E 3324 clr R3
0220 2C0C add R2,R12
0222 3D1C adc R3,R13
0224 F101 movw R30,R2
0226 2180 ldd R2,z+1
0228 2A82 std y+2,R2
022A 2080 ldd R2,z+0
022C 2882 std y+0,R2
022E 2A2D mov R18,R10
0230 042F mov R16,R20
0232 C7DF rcall _DispHalfWord
0234 .dbline 187
0234 ; Tx++;
0234 4395 inc R20
0236 .dbline 188
0236 ; if (Tx>=8) { Ty=(Ty+1)&0x03;Tx=0; }
0236 4830 cpi R20,8
0238 28F0 brlo L50
023A X11:
023A .dbline 188
023A .dbline 188
023A 8A2D mov R24,R10
023C 8F5F subi R24,255 ; addi 1
023E 8370 andi R24,3
0240 A82E mov R10,R24
0242 .dbline 188
0242 4427 clr R20
0244 .dbline 188
0244 L50:
0244 .dbline 189
0244 ; }
0244 L47:
0244 .dbline 184
0244 6E5F subi R22,254 ; addi 2
0246 L49:
0246 .dbline 184
0246 E62F mov R30,R22
0248 FF27 clr R31
024A EC0D add R30,R12
024C FD1D adc R31,R13
024E 2080 ldd R2,z+0
0250 2220 tst R2
0252 21F7 brne L46
0254 X12:
0254 .dbline -2
0254 L45:
0254 .dbline 0 ; func end
0254 2396 adiw R28,3
0256 00C0 rjmp pop_xgsetF0FC
0258 .dbsym r Ty 10 c
0258 .dbsym r Tx 20 c
0258 .dbsym r i 22 c
0258 .dbsym r str 12 pc
0258 .dbsym r y 20 c
0258 .dbsym r x 14 c
0258 .dbend
0258 .dbfunc e PrintSLen _PrintSLen fV
0258 ; Ty -> R10
0258 ; Tx -> R22
0258 ; i -> R20
0258 ; Len -> R12
0258 ; str -> R14,R15
0258 ; y -> R22
0258 ; x -> R20
.even
0258 _PrintSLen::
0258 00D0 rcall push_xgsetF0FC
025A 622F mov R22,R18
025C 402F mov R20,R16
025E 2397 sbiw R28,3
0260 ED84 ldd R14,y+13
0262 FE84 ldd R15,y+14
0264 CF84 ldd R12,y+15
0266 .dbline -1
0266 .dbline 201
0266 ; // EA=1;
0266 ; }
0266 ;
0266 ;
0266 ;
0266 ; //**************************************在指定位置打印指定長度字符串**********************************
0266 ; //x:串首字符在LCD屏幕上列的位置(水平位置) 0<=x<=7
0266 ; //y:串首字符在LCD屏幕上行的位置(垂直位置) 0<=y<=3
0266 ; //*str:存放ASCII字符串的指針
0266 ; //Len:字符串的長度,字節為單位
0266 ; void PrintSLen(uchar x,uchar y,uchar *str,uchar Len) //在指定位置打印字符串
0266 ; {
0266 .dbline 203
0266 ; uchar i,Tx,Ty;
0266 ; Ty=y;Tx=x;
0266 A62E mov R10,R22
0268 .dbline 203
0268 642F mov R22,R20
026A .dbline 204
026A ; for(i=0;i<Len;i=i+2)
026A 4427 clr R20
026C 25C0 rjmp L56
026E L53:
026E .dbline 205
026E ; {
026E .dbline 206
026E ; if((Len-i)==1) DispHalfWord(Tx,Ty,str[i],'\0'); else DispHalfWord(Tx,Ty,str[i],str[i+1]);
026E 8C2D mov R24,R12
0270 841B sub R24,R20
0272 8130 cpi R24,1
0274 61F4 brne L57
0276 X13:
0276 .dbline 206
0276 2224 clr R2
0278 2A82 std y+2,R2
027A E42F mov R30,R20
027C FF27 clr R31
027E EE0D add R30,R14
0280 FF1D adc R31,R15
0282 2080 ldd R2,z+0
0284 2882 std y+0,R2
0286 2A2D mov R18,R10
0288 062F mov R16,R22
028A 9BDF rcall _DispHalfWord
028C 0CC0 rjmp L58
028E L57:
028E .dbline 206
028E 242E mov R2,R20
0290 3324 clr R3
0292 2E0C add R2,R14
0294 3F1C adc R3,R15
0296 F101 movw R30,R2
0298 2180 ldd R2,z+1
029A 2A82 std y+2,R2
029C 2080 ldd R2,z+0
029E 2882 std y+0,R2
02A0 2A2D mov R18,R10
02A2 062F mov R16,R22
02A4 8EDF rcall _DispHalfWord
02A6 L58:
02A6 .dbline 207
02A6 ; Tx++;
02A6 6395 inc R22
02A8 .dbline 208
02A8 ; if (Tx>=8) { Ty=(Ty+1)&0x03;Tx=0; }
02A8 6830 cpi R22,8
02AA 28F0 brlo L59
02AC X14:
02AC .dbline 208
02AC .dbline 208
02AC 8A2D mov R24,R10
02AE 8F5F subi R24,255 ; addi 1
02B0 8370 andi R24,3
02B2 A82E mov R10,R24
02B4 .dbline 208
02B4 6627 clr R22
02B6 .dbline 208
02B6 L59:
02B6 .dbline 209
02B6 ; }
02B6 L54:
02B6 .dbline 204
02B6 4E5F subi R20,254 ; addi 2
02B8 L56:
02B8 .dbline 204
02B8 4C15 cp R20,R12
02BA C8F2 brlo L53
02BC X15:
02BC .dbline -2
02BC L52:
02BC .dbline 0 ; func end
02BC 2396 adiw R28,3
02BE 00C0 rjmp pop_xgsetF0FC
02C0 .dbsym r Ty 10 c
02C0 .dbsym r Tx 22 c
02C0 .dbsym r i 20 c
02C0 .dbsym r Len 12 c
02C0 .dbsym r str 14 pc
02C0 .dbsym r y 22 c
02C0 .dbsym r x 20 c
02C0 .dbend
02C0 .dbfunc e DisplayNumChar _DisplayNumChar fV
02C0 ; srnum -> R12
02C0 ; tnnum -> R22
02C0 ; hunum -> R20
02C0 ; knnum -> R14
02C0 ; ll -> R22,R23
02C0 ; h -> R10
02C0 ; l -> y+13
.even
02C0 _DisplayNumChar::
02C0 00D0 rcall push_arg4
02C2 00D0 rcall push_xgsetF0FC
02C4 A22E mov R10,R18
02C6 2397 sbiw R28,3
02C8 6989 ldd R22,y+17
02CA 7A89 ldd R23,y+18
02CC .dbline -1
02CC .dbline 215
02CC ; // EA=1;
02CC ; }
02CC ;
02CC ;
02CC ; void DisplayNumChar(unsigned char l,unsigned char h,unsigned int ll)
02CC ; {
02CC .dbline 217
02CC ; unsigned char knnum,hunum,tnnum,srnum; //百、十、個位
02CC ; knnum=ll/1000;
02CC 28EE ldi R18,1000
02CE 33E0 ldi R19,3
02D0 8B01 movw R16,R22
02D2 00D0 rcall div16u
02D4 E02E mov R14,R16
02D6 .dbline 218
02D6 ; hunum=ll/100-10*knnum; //百位
02D6 8AE0 ldi R24,10
02D8 8E9D mul R24,R14
02DA 1001 movw R2,R0
02DC 24E6 ldi R18,100
02DE 30E0 ldi R19,0
02E0 8B01 movw R16,R22
02E2 00D0 rcall div16u
02E4 402F mov R20,R16
02E6 4219 sub R20,R2
02E8 5309 sbc R21,R3
02EA .dbline 219
02EA ; srnum=ll%10; //個位
02EA 2AE0 ldi R18,10
02EC 30E0 ldi R19,0
02EE 8B01 movw R16,R22
02F0 00D0 rcall mod16u
02F2 C02E mov R12,R16
02F4 .dbline 220
02F4 ; tnnum=(ll-knnum*1000-hunum*100)/10; //十位
02F4 2E2D mov R18,R14
02F6 3327 clr R19
02F8 08EE ldi R16,1000
02FA 13E0 ldi R17,3
02FC 00D0 rcall empy16s
02FE 1801 movw R2,R16
0300 8B01 movw R16,R22
0302 0219 sub R16,R2
0304 1309 sbc R17,R3
0306 84E6 ldi R24,100
0308 849F mul R24,R20
030A 0019 sub R16,R0
030C 1109 sbc R17,R1
030E 2AE0 ldi R18,10
0310 30E0 ldi R19,0
0312 00D0 rcall div16u
0314 602F mov R22,R16
0316 .dbline 222
0316 ;
0316 ; knnum+=0x30;hunum+=0x30;srnum+=0x30;tnnum+=0x30;
0316 8E2D mov R24,R14
0318 805D subi R24,208 ; addi 48
031A E82E mov R14,R24
031C .dbline 222
031C 405D subi R20,208 ; addi 48
031E .dbline 222
031E 8C2D mov R24,R12
0320 805D subi R24,208 ; addi 48
0322 C82E mov R12,R24
0324 .dbline 222
0324 605D subi R22,208 ; addi 48
0326 .dbline 223
0326 ; DispHalfWord(l,h,knnum,hunum);
0326 4A83 std y+2,R20
0328 E882 std y+0,R14
032A 2A2D mov R18,R10
032C 0D85 ldd R16,y+13
032E 49DF rcall _DispHalfWord
0330 .dbline 224
0330 ; DispHalfWord(l+1,h,tnnum,srnum);
0330 CA82 std y+2,R12
0332 6883 std y+0,R22
0334 2A2D mov R18,R10
0336 0D85 ldd R16,y+13
0338 0F5F subi R16,255 ; addi 1
033A 43DF rcall _DispHalfWord
033C .dbline -2
033C L61:
033C .dbline 0 ; func end
033C 2396 adiw R28,3
033E 00D0 rcall pop_xgsetF0FC
0340 2496 adiw R28,4
0342 0895 ret
0344 .dbsym r srnum 12 c
0344 .dbsym r tnnum 22 c
0344 .dbsym r hunum 20 c
0344 .dbsym r knnum 14 c
0344 .dbsym r ll 22 i
0344 .dbsym r h 10 c
0344 .dbsym l l 13 c
0344 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\學習\AVRpro\Mega8程序\TestADC\LCDDrive.C
0000 _AC_Y::
0000 .blkb 1
0001 .dbsym e AC_Y _AC_Y c
0001 _AC_X::
0001 .blkb 1
0002 .dbsym e AC_X _AC_X c
0002 _LCD_DAT::
0002 .blkb 1
0003 .dbsym e LCD_DAT _LCD_DAT c
0003 _LCD_COM::
0003 .blkb 1
0004 .dbsym e LCD_COM _LCD_COM c
0004 ; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -