⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.s

📁 利用AVRM16单片机读与GPS接收模块进行通信
💻 S
📖 第 1 页 / 共 3 页
字号:
; }
; //光标开关,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 + -