📄 gps.s
字号:
; }
; //光标开关,1开,0关
; void guangbiao(uchar x) //
; {
.dbline 264
; if(x==1) WriteCommand(0x0c|0x03);
cpi R20,1
brne L27
.dbline 264
ldi R16,15
xcall _WriteCommand
xjmp L28
L27:
.dbline 265
ldi R16,12
xcall _WriteCommand
L28:
.dbline -2
L26:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbend
.dbfunc e Set_display_Adress _Set_display_Adress fV
; address -> R20
; x -> R22
; y -> R20
.even
_Set_display_Adress::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 270
; else WriteCommand(0x0c);
; }
;
; // 设置显示坐标:y行,x列
; void Set_display_Adress(uchar y,uchar x)//
; {
.dbline 272
; uchar address;
; switch(y)
clr R21
cpi R20,0
cpc R20,R21
breq L33
X0:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L34
cpi R20,2
ldi R30,0
cpc R21,R30
breq L35
cpi R20,3
ldi R30,0
cpc R21,R30
breq L36
xjmp L30
X1:
.dbline 273
; {
L33:
.dbline 275
; case 0:
; address=0x80+x;
mov R20,R22
subi R20,128 ; addi 128
.dbline 276
; break;
xjmp L31
L34:
.dbline 278
; case 1:
; address=0x90+x;
mov R20,R22
subi R20,112 ; addi 144
.dbline 279
; break;
xjmp L31
L35:
.dbline 281
; case 2:
; address=0x88+x;
mov R20,R22
subi R20,120 ; addi 136
.dbline 282
; break;
xjmp L31
L36:
.dbline 284
; case 3:
; address=0x98+x;
mov R20,R22
subi R20,104 ; addi 152
.dbline 285
; break;
L30:
L31:
.dbline 287
; }
; WriteCommand(address);
mov R16,R20
xcall _WriteCommand
.dbline -2
L29:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r address 20 c
.dbsym r x 22 c
.dbsym r y 20 c
.dbend
.dbfunc e display_String _display_String fV
; i -> R20
; s -> R22,R23
; x -> R10
; y -> R12
.even
_display_String::
xcall push_gset5
mov R10,R18
mov R12,R16
ldd R22,y+10
ldd R23,y+11
.dbline -1
.dbline 291
; }
; //显示字符串
; void display_String(uchar y,uchar x,uchar *s) //
; {
.dbline 292
; uchar i=0;
clr R20
.dbline 293
; if(*s=='\0')return;
movw R30,R22
ldd R2,z+0
tst R2
brne L38
.dbline 293
xjmp L37
L38:
.dbline 294
; for(i=0;;i++)
clr R20
L40:
.dbline 295
; {
.dbline 296
; if(*(s+i)=='\0')break;
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
tst R2
brne L44
.dbline 296
xjmp L42
L44:
.dbline 297
; if(!i%2)
tst R20
brne L48
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L49
L48:
clr R14
clr R15
L49:
ldi R18,2
ldi R19,0
movw R16,R14
xcall mod16s
cpi R16,0
cpc R16,R17
breq L46
X2:
.dbline 298
; Set_display_Adress(y,x);
mov R18,R10
mov R16,R12
xcall _Set_display_Adress
L46:
.dbline 299
; WriteData(*(s+i));
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _WriteData
.dbline 300
; if(i%2)x++;
ldi R17,2
mov R16,R20
xcall mod8u
tst R16
breq L50
.dbline 300
inc R10
L50:
.dbline 301
; if(x>7){y++,x=0;}
ldi R24,7
cp R24,R10
brsh L52
.dbline 301
.dbline 301
inc R12
clr R10
.dbline 301
L52:
.dbline 302
L41:
.dbline 294
inc R20
.dbline 294
xjmp L40
L42:
.dbline -2
L37:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r s 22 pc
.dbsym r x 10 c
.dbsym r y 12 c
.dbend
.dbfunc e display_Char _display_Char fV
; ch -> y+4
; x -> R22
; y -> R20
.even
_display_Char::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 306
; }
; }
; //显示单个字符
; void display_Char(uchar y,uchar x,char ch)
; {
.dbline 307
; Set_display_Adress(y,x);
mov R18,R22
mov R16,R20
xcall _Set_display_Adress
.dbline 308
; WriteData(ch);
ldd R16,y+4
xcall _WriteData
.dbline -2
L54:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l ch 4 c
.dbsym r x 22 c
.dbsym r y 20 c
.dbend
.dbfunc e display_Num _display_Num fV
; tmp -> y+0
; i -> R20
; N -> R22
; num -> R10,R11
; x -> R12
; y -> R14
.even
_display_Num::
xcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,5
ldd R10,y+15
ldd R11,y+16
ldd R22,y+17
.dbline -1
.dbline 313
;
; }
; //可以显示 N 位的的整数num,(从个位起)最多显示6位
; void display_Num(uchar y,uchar x,uint num,char N)//
; {
.dbline 316
; char tmp[5],i;//加大数组可以达到加多显示数位的效果
; //N%=6;
; for(i=0;i<N;i++)
clr R20
xjmp L59
L56:
.dbline 317
.dbline 318
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 319
ldi R18,10
ldi R19,0
movw R16,R10
xcall div16u
movw R10,R16
.dbline 320
L57:
.dbline 316
inc R20
L59:
.dbline 316
cp R20,R22
brlo L56
.dbline 320
; {
; tmp[i]=(num%10);
; num/=10;
; };
.dbline 321
; i--;
dec R20
xjmp L61
L60:
.dbline 323
; while(1)
; {
.dbline 324
; Set_display_Adress(y,x);
mov R18,R12
mov R16,R14
xcall _Set_display_Adress
.dbline 325
; WriteData(tmp[i--]+0x30);
mov R2,R20
clr R3
subi R20,1
movw R24,R28
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 326
; if(!i)
tst R20
brne L63
.dbline 327
; {WriteData(tmp[i]+0x30);break;}
.dbline 327
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 327
xjmp L62
L63:
.dbline 328
; WriteData(tmp[i--]+0x30);
mov R2,R20
clr R3
subi R20,1
movw R24,R28
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 329
; if(!i)
tst R20
brne L65
.dbline 330
; {WriteData(tmp[i]+0x30);break;}
.dbline 330
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
subi R16,208 ; addi 48
xcall _WriteData
.dbline 330
xjmp L62
L65:
.dbline 331
inc R12
.dbline 332
L61:
.dbline 322
xjmp L60
L62:
.dbline 333
; x++;
; }
; x--;
dec R12
.dbline -2
L55:
adiw R28,5
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l tmp 0 A[5:5]c
.dbsym r i 20 c
.dbsym r N 22 c
.dbsym r num 10 i
.dbsym r x 12 c
.dbsym r y 14 c
.dbend
.dbfunc e Display_Picture _Display_Picture fV
; i -> R20,R21
; x -> R22,R23
; y -> R14,R15
; j -> R10,R11
; l -> y+0
; k -> R12,R13
; tab -> y+12
.even
_Display_Picture::
st -y,r17
st -y,r16
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 337
; }
; //全屏显示图形子程序 128*64
; void Display_Picture(const uchar *tab )
; {
.dbline 338
; unsigned i,j,k,l=0,x=0x80,y;
clr R0
clr R1
std y+1,R1
std y+0,R0
.dbline 338
ldi R22,128
ldi R23,0
.dbline 339
; for(i=0;i<2;i++) //x=0x80 为第一行
clr R20
clr R21
xjmp L71
L68:
.dbline 340
; {
.dbline 341
; for(j=0,y=0x80; j<32;j++,y++)//y为水平方向以字节为单位
clr R10
clr R11
ldi R24,128
ldi R25,0
movw R14,R24
xjmp L75
L72:
.dbline 342
; {
.dbline 343
; WriteCommand(0x36); //8位扩充指令集,允许绘图
ldi R16,54
xcall _WriteCommand
.dbline 344
; WriteCommand(y);//地址设置
mov R16,R14
xcall _WriteCommand
.dbline 345
; WriteCommand(x);
mov R16,R22
xcall _WriteCommand
.dbline 346
; WriteCommand(0x30);
ldi R16,48
xcall _WriteCommand
.dbline 347
; k=16;
ldi R24,16
ldi R25,0
movw R12,R24
xjmp L77
L76:
.dbline 349
ldd R2,y+0
ldd R3,y+1
movw R24,R2
adiw R24,1
std y+1,R25
std y+0,R24
movw R30,R2
ldd R0,y+12
ldd R1,y+13
add R30,R0
adc R31,R1
lpm R16,Z
xcall _WriteData
L77:
.dbline 348
movw R2,R12
movw R24,R2
sbiw R24,1
movw R12,R24
tst R2
brne L76
tst R3
brne L76
X3:
.dbline 350
L73:
.dbline 341
movw R24,R10
adiw R24,1
movw R10,R24
movw R24,R14
adiw R24,1
movw R14,R24
L75:
.dbline 341
movw R24,R10
cpi R24,32
ldi R30,0
cpc R25,R30
brsh X4
xjmp L72
X4:
.dbline 351
ldi R22,136
ldi R23,0
.dbline 352
L69:
.dbline 339
subi R20,255 ; offset = 1
sbci R21,255
L71:
.dbline 339
cpi R20,2
ldi R30,0
cpc R21,R30
brsh X5
xjmp L68
X5:
.dbline -2
L67:
adiw R28,2
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r x 22 i
.dbsym r y 14 i
.dbsym r j 10 i
.dbsym l l 0 i
.dbsym r k 12 i
.dbsym l tab 12 pkc
.dbend
.dbfunc e Display_Picture32 _Display_Picture32 fV
; i -> <dead>
; x -> R22,R23
; y -> R10,R11
; j -> R20,R21
; l -> y+0
; k -> R14,R15
; tab -> R12,R13
.even
_Display_Picture32::
xcall push_gset5
movw R12,R16
sbiw R28,2
.dbline -1
.dbline 356
; while(k--)
; WriteData(tab[l++]); //时间复杂度(16*32)*2=32*32=32个H代码控制一个汉字,共有32个汉字,则是全屏
; } //按顺序读入:0->(32*32-1)
; x=0x88;//第三行
; }
; }
; //显示图形子程序 32*32
; void Display_Picture32( unsigned char *tab )//
; {
.dbline 357
; unsigned i,j,k,l=0,x=0x80,y;
clr R0
clr R1
std y+1,R1
std y+0,R0
.dbline 357
ldi R22,128
ldi R23,0
.dbline 359
;
; for(j=0,y=0x80; j<32;j++,y++)//水平扫描32行 第一个32行(汉字的两行)为一个连续地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -