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

📄 1.s

📁 点阵显示汉字
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 348
	sbi 0x12,0
	.dbline 349
	ldi R16,2
	ldi R17,0
	xcall _delay_nus
	.dbline 350
	sbi 0x18,4
	.dbline 351
	ldi R24,<_ROW
	ldi R25,>_ROW
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	out 0x18,R30
	.dbline 352
	cbi 0x12,0
	.dbline 353
	ldi R16,200
	ldi R17,0
	xcall _delay_nus
	.dbline 354
L64:
	.dbline 332
	inc R22
L66:
	.dbline 332
	cpi R22,16
	brsh X4
	xjmp L63
X4:
	.dbline 355
; 	  }
; 	 }
; 	set_G();
; 	delay_nus(2);
;     set_STB();//锁存
; 	PORTB=ROW[i];//i行控制位   共阴的二极管允许了接地
; 	clr_G();//行控制有效
; 	delay_nus(displayTime);
;   }
;   delay_nus(200);
	ldi R16,200
	ldi R17,0
	xcall _delay_nus
	.dbline 356
;   set_G();
	sbi 0x12,0
	.dbline -2
L62:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbsym r colour 20 c
	.dbend
	.dbfunc e left_move _left_move fV
;          data1 -> R22
;          data0 -> R20
;              i -> R16
;              j -> R18
	.even
_left_move::
	xcall push_gset2
	.dbline -1
	.dbline 360
;  }
;  //下面函数功能为把信号(汉字)前移
;  void left_move(void)
; {
	.dbline 362
;   uchar data0,data1,i,j;
;   for(i=0;i<16;i++)
	clr R16
	xjmp L81
L78:
	.dbline 363
;   {
	.dbline 364
;     for(j=0;j<(howmany0+hanzishu)*2;j++)//如41=(howmany0+hanzishu)*2+1
	clr R18
	xjmp L85
L82:
	.dbline 365
	.dbline 366
	ldi R24,58
	mul R24,R16
	movw R2,R0
	ldi R24,<_Ledplay
	ldi R25,>_Ledplay
	add R2,R24
	adc R3,R25
	mov R30,R18
	clr R31
	add R30,R2
	adc R31,R3
	ldd R20,z+0
	.dbline 367
	ldi R24,58
	mul R24,R16
	movw R2,R0
	ldi R24,<_Ledplay
	ldi R25,>_Ledplay
	add R2,R24
	adc R3,R25
	mov R30,R18
	clr R31
	adiw R30,1
	add R30,R2
	adc R31,R3
	ldd R22,z+0
	.dbline 368
	ldi R24,58
	mul R24,R16
	movw R2,R0
	ldi R24,<_Ledplay
	ldi R25,>_Ledplay
	add R2,R24
	adc R3,R25
	mov R30,R18
	clr R31
	add R30,R2
	adc R31,R3
	mov R2,R22
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	mov R3,R20
	lsl R3
	or R3,R2
	std z+0,R3
	.dbline 369
L83:
	.dbline 364
	inc R18
L85:
	.dbline 364
	cpi R18,56
	brsh X5
	xjmp L82
X5:
	.dbline 370
L79:
	.dbline 362
	inc R16
L81:
	.dbline 362
	cpi R16,16
	brsh X6
	xjmp L78
X6:
	.dbline -2
L77:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r data1 22 c
	.dbsym r data0 20 c
	.dbsym r i 16 c
	.dbsym r j 18 c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
L87:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
	.dbfunc e left_MOVE_display _left_MOVE_display fV
	.dbsym s king L87 i
;              k -> R20,R21
;              i -> R22,R23
;         colour -> R10
	.even
_left_MOVE_display::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 377
; 	{
; 	   data0=Ledplay[i][j];
; 	   data1=Ledplay[i][j+1];
; 	   Ledplay[i][j]=(data0<<1)|(data1>>7);//从第二个字符起它的信号始终没有掉失,
; 	}                                     //只不过是把第一列的信号给了上一16*16的第16列‘
;   }									      //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
; }     							          //信号开始失掉
; 	                                      //两个for中的参数: 16是规格格式,41是扫描41列(0->40),显示10空字10汉字则要40列
;                                           //多出的一列是为了用其最高位来补Ledplay[i][39](最后一列)的最低位(最后一列<<1有了最低们这个空位)
;                                           //则要用多出的一列(0x00)的最最位来补(这列也可以以程序默认来补,即可删这行)。
;                                           //若程序每次把汉字移动两列则要用二列来补。
; void left_MOVE_display(unsigned char colour)
; {  
	.dbline 379
;      static uint king=0;
;      uint i=0,k;
	clr R22
	clr R23
	.dbline 380
; 	 king=0;
	clr R2
	clr R3
	sts L87+1,R3
	sts L87,R2
	.dbline 381
; 	 bn=0;// 全局 列变量
	sts _bn,R2
	.dbline 382
; 	 clearRAM();//使 Ledplay[i][j]所指空间清0
	xcall _clearRAM
	.dbline 383
	clr R20
	clr R21
	xjmp L91
L88:
	.dbline 383
	.dbline 383
	ldi R16,6
	xcall _putin
	.dbline 383
L89:
	.dbline 383
	subi R20,255  ; offset = 1
	sbci R21,255
L91:
	.dbline 383
; 	 for(k=0;k<howmany0;k++){putin(position);}  //实质上是使 Ledplay[i][j]填入空字                    *****************************
	cpi R20,10
	ldi R30,0
	cpc R21,R30
	brlo L88
	.dbline 384
	clr R20
	clr R21
	xjmp L95
L92:
	.dbline 384
	.dbline 384
	mov R16,R20
	xcall _putin
	.dbline 384
L93:
	.dbline 384
	subi R20,255  ; offset = 1
	sbci R21,255
L95:
	.dbline 384
; 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	brlo L92
	xjmp L97
L96:
	.dbline 386
; 	 while(1)
; 	 {//开始移动
	.dbline 387
; 	 for(i=0;i<shopshow;i++)//动态显示一段时间
	clr R22
	clr R23
	xjmp L102
L99:
	.dbline 388
	.dbline 389
	mov R16,R10
	xcall _DisPlay_onetime
	.dbline 390
L100:
	.dbline 387
	subi R22,255  ; offset = 1
	sbci R23,255
L102:
	.dbline 387
	cpi R22,9
	ldi R30,0
	cpc R23,R30
	brlo L99
	.dbline 391
; 	 {
;      DisPlay_onetime(colour);//*************************************************************
; 	 }
; 	 left_move();
	xcall _left_move
	.dbline 392
; 	 king++;
	lds R24,L87
	lds R25,L87+1
	adiw R24,1
	sts L87+1,R25
	sts L87,R24
	.dbline 393
; 	 if(king>159+16*18)
	ldi R24,447
	ldi R25,1
	lds R2,L87
	lds R3,L87+1
	cp R24,R2
	cpc R25,R3
	brsh L103
	.dbline 394
; 	 break;
	xjmp L98
L103:
	.dbline 395
L97:
	.dbline 385
	xjmp L96
L98:
	.dbline -2
L86:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 i
	.dbsym r i 22 i
	.dbsym r colour 10 c
	.dbend
	.dbfunc e UP_move _UP_move fV
;              j -> R16
;              i -> R18
	.even
_UP_move::
	.dbline -1
	.dbline 442
; 	}//停止移动
; 	/*for(i=0;i<600;i++)//静止显示一段时间***************************
; 	{
; 	 DisPlay_onetime(colour);
; 	}*/
; }
; //不理想
; /*void right_move(void)
; {
;   uchar data0,data1,i,j;
;   for(i=0;i<16;i++)
;   {
;     for(j=0;j<(howmany0+hanzishu)*2+1;j++)//如41=(howmany0+hanzishu)*2+1
; 	{
; 	   data0=Ledplay[i][j];
; 	   data1=Ledplay[i][j+1];
; 	   Ledplay[i][j+1]=(data0<<7)|(data1>>1);//从第二个字符起它的信号始终没有掉失,
; 	}                                     //只不过是把第一列的信号给了上一16*16的第16列‘
;   }									      //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
; }   
; void right_MOVE_display(unsigned char colour)
; {  
;      static uint king=0;
;      uint i=0,k;
; 	 king=0;
; 	 bn=0;// 全局 列变量
; 	 clearRAM();//使 Ledplay[i][j]所指空间清0
; 	 for(k=0;k<howmany0;k++){putin(position);}  //实质上是使 Ledplay[i][j]填入空字                    *****************************
; 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
; 	 while(1)
; 	 {//开始移动
; 	 for(i=0;i<shopshow;i++)//动态显示一段时间
; 	 {
;      DisPlay_onetime(colour);//*************************************************************
; 	 }
; 	 right_move();
; 	 king++;
; 	 if(king>143)
; 	 break;
; 	}//停止移动
; 	//for(i=0;i<600;i++)//静止显示一段时间***************************
; 	//{
; 	// DisPlay_onetime(colour);
; 	//}//
; }  	*/				
; //下面数功能为把信号移
; void UP_move(void)
; {
	.dbline 444
;   uchar i,j;
;   for(j=0;j<(howmany0+hanzishu)*2;j++)
	clr R16
	xjmp L109
L106:
	.dbline 445
;   {
	.dbline 446
;     for(i=0;i<16;i++)
	clr R18
	xjmp L113
L110:
	.dbline 447
	.dbline 448
	ldi R24,58
	mul R24,R18
	ldi R24,<_Ledplay+58
	ldi R25,>_Ledplay+58
	movw R2,R0
	add R2,R24
	adc R3,R25
	mov R30,R16
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_Ledplay
	ldi R25,>_Ledplay
	movw R4,R0
	add R4,R24
	adc R5,R25
	mov R30,R16
	clr R31
	add R30,R4
	adc R31,R5
	std z+0,R2
	.dbline 449
L111:
	.dbline 446
	inc R18
L113:
	.dbline 446
	cpi R18,16
	brlo L110
	.dbline 450
; 	{
; 	Ledplay[i][j]=Ledplay[i+1][j];//让本列的下一行的来取代自已的位置,来实现下一行信号下移的功能,第16行下移后的空位由多出的一行(0x00)
; 	}                             //来补,这是Ledplay有17行的所以了。
; 	if(j<(howmany0+hanzishu)*2-10)
	cpi R16,46
	brsh L115
	.dbline 451
; 	Ledplay[15][j]=Ledplay[0][j+10];//本程序开始时以10个空字占満版面,j=0时,把第6个字的信号给第一个字位最低行,j=1时把第7个字信号给第2个字
	ldi R24,<_Ledplay+10
	ldi R25,>_Ledplay+10
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_Ledplay+870
	ldi R25,>_Ledplay+870
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L115:
	.dbline 452
L107:
	.dbline 444
	inc R16
L109:
	.dbline 444
	cpi R16,56
	brsh X7
	xjmp L106
X7:
	.dbline -2
L105:
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbsym r i 18 c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
L120:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
	.dbfunc e UP_MOVE_display _UP_MOVE_display fV
	.dbsym s up L120 i
;              k -> R20,R21
;              i -> R22,R23
;         colour -> R10
	.even
_UP_MOVE_display::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 455
; 	}                                //第10列即第6个字
; }                              
; void UP_MOVE_display(unsigned char colour)
; {  
	.dbline 457
;      static uint up=0;
;      uint i=0,k=0;
	clr R22
	clr R23
	.dbline 457
	clr R20
	clr R21
	.dbline 458
; 	 up=0;
	clr R2
	clr R3
	sts L120+1,R3
	sts L120,R2
	.dbline 459
; 	 bn=0;
	sts _bn,R2
	.dbline 460
; 	 clearRAM();
	xcall _clearRAM
	.dbline 461
	xjmp L124
L121:
	.dbline 461
	.dbline 461
	ldi R16,6
	xcall _putin
	.dbline 461
L122:
	.dbline 461
	subi R20,255  ; offset = 1
	sbci R21,255
L124:
	.dbline 461
; 	 for(k=0;k<howmany0;k++){putin(position);}//实质上是使 Ledplay[i][j]所指空间清0
	cpi R20,10
	ldi R30,0
	cpc R21,R30
	brlo L121
	.dbline 462
	clr R20
	clr R21
	xjmp L128
L125:
	.dbline 462
	.dbline 462
	mov R16,R20
	xcall _putin
	.dbline 462
L126:
	.dbline 462
	subi R20,255  ; offset = 1
	sbci R21,255
L128:
	.dbline 462
; 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	brlo L125
	xjmp L130
L129:
	.dbline 464
; 	 while(1)
; 	 {
	.dbline 465
; 	 for(i=0;i<shopshow+6;i++)	 
	clr R22
	clr R23
	xjmp L135
L132:
	.dbline 466
	mov R16,R10
	xcall _DisPlay_onetime
L133:
	.dbline 465
	subi R22,255  ; offset = 1
	sbci R23,255
L135:
	.dbline 465
	cpi R22,15
	ldi R30,0
	cpc R23,R30
	brlo L132
	.dbline 467
;      DisPlay_onetime(colour);	 
; 	 UP_move();
	xcall _UP_move
	.dbline 468
; 	 up++;
	lds R24,L120
	lds R25,L120+1
	adiw R24,1
	sts L120+1,R25
	sts L120,R24
	.dbline 469
; 	 if(up==32*3)
	cpi R24,96
	ldi R30,0
	cpc R25,R30
	brne L136
	.dbline 470
; 	 break;
	xjmp L131
L136:
	.dbline 471
L130:
	.dbline 463
	xjmp L129
L131:
	.dbline -2
L119:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 i
	.dbsym r i 22 i
	.dbsym r colour 10 c
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 483
; 	}
; 	/*for(i=0;i<300;i++)
; 	{
; 	 DisPlay_onetime(colour);
; 	}*/
; }
; /***************************************************************************************************
;                                        上面32*80大点阵驱动程序
; ****************************************************************************************************/
; 
; //端口初始化
; void port_init(void)
; {
	.dbline 484
;  PORTB = 0x00;
	clr R2
	out 0x18,R2
	.dbline 485
;  DDRB  = 0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 486
;  PORTD = 0x01;
	ldi R24,1
	out 0x12,R24
	.dbline 487
;  DDRD  = 0x01;
	out 0x11,R24
	.dbline -2
L138:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 491
; }
; 
; void init_devices(void)
; {
	.dbline 492
;  CLI(); //禁止所有中断
	cli
	.dbline 493
;  port_init();
	xcall _port_init
	.dbline 494
;  SEI();//开全局中断
	sei
	.dbline -2
L139:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;              j -> <dead>
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 498
; }
; //主函数
; void main(void)
; {
	.dbline 500
;  char i,j;
;  init_devices();
	xcall _init_devices
	.dbline 501
;  clearping();
	xcall _clearping
	xjmp L142
L141:
	.dbline 503
	.dbline 506
	ldi R16,1
	xcall _left_MOVE_display
	.dbline 507
	ldi R16,2
	xcall _UP_MOVE_display
	.dbline 508
L142:
	.dbline 502
	xjmp L141
X8:
	.dbline -2
L140:
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\单片机\AVR程序\32x80大点阵\1.c
_Ledplay::
	.blkb 986
	.dbsym e Ledplay _Ledplay A[986:17:58]c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -