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

📄 display_board2.1.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	xcall _RAM_Write
	.dbline 294
; 	   DataIndex++;
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	adiw R24,1
	sts _DataIndex+1,R25
	sts _DataIndex,R24
	.dbline 295
; 	   if(DataIndex <2)                      //送文件长度数据到变量
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brge L78
	.dbline 296
; 	   {
	.dbline 298
; 	       //FileLength |=data <<DataIndex;    
; 	       FileLength =316;
	ldi R24,316
	ldi R25,1
	sts _FileLength+1,R25
	sts _FileLength,R24
	.dbline 299
; 	   }                                     //数据指针
L78:
	.dbline 300
; 	   if((DataIndex >=FileLength)&& (DataIndex >16))
	lds R2,_FileLength
	lds R3,_FileLength+1
	lds R4,_DataIndex
	lds R5,_DataIndex+1
	cp R4,R2
	cpc R5,R3
	brlt L80
	ldi R24,16
	ldi R25,0
	cp R24,R4
	cpc R25,R5
	brge L80
	.dbline 301
; 	   {
	.dbline 302
; 		   HeadEN =1;
	ldi R24,1
	sts _HeadEN,R24
	.dbline 303
; 		   FileEnd =1;
	sts _FileEnd,R24
	.dbline 304
; 	   }
L80:
	.dbline 305
;    }
L76:
	.dbline 306
;    if(HeadEN ==1)                            //循环检测文件起始标志
	lds R24,_HeadEN
	cpi R24,1
	brne L82
	.dbline 307
;    {
	.dbline 308
;       Head[HeadLoad] =data;
	ldi R24,<_Head
	ldi R25,>_Head
	lds R30,_HeadLoad
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 309
;       HeadLoad++;
	lds R24,_HeadLoad
	subi R24,255    ; addi 1
	sts _HeadLoad,R24
	.dbline 310
; 	  if(HeadLoad ==3)
	cpi R24,3
	brne L84
	.dbline 311
; 	  { 
	.dbline 312
; 	     if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
	lds R24,_Head
	cpi R24,76
	brne L86
	lds R24,_Head+1
	cpi R24,69
	brne L86
	lds R24,_Head+2
	cpi R24,68
	brne L86
	.dbline 313
; 		 {
	.dbline 314
; 		     HeadEN =0;
	clr R2
	sts _HeadEN,R2
	.dbline 315
; 			 FileEnd =0;
	sts _FileEnd,R2
	.dbline 316
; 		 }
L86:
	.dbline 317
;       }
L84:
	.dbline 318
L82:
	.dbline -2
L73:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e Disp_Model _Disp_Model fV
;       PFileMax -> R16,R17
;    file_length -> R18,R19
	.even
_Disp_Model::
	.dbline -1
	.dbline 326
;    }
; }
; /**************************************************
; 
; 			 显示效果处理	 
; 			 
; ****************************************************/
; void Disp_Model(void)
; {   
	.dbline 327
;     unsigned int file_length =0;
	clr R18
	clr R19
	.dbline 331
; 	int PFileMax;
; 	//DispModel =RAM_Read(2) & (RAM_Read(3)<<8); 			 //model控制字节
; 	//PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3;	     //计算缓冲区域的最大列数
; 	if(ModelDelayTime ==0)
	lds R2,_ModelDelayTime
	lds R3,_ModelDelayTime+1
	tst R2
	breq X6
	xjmp L91
X6:
	tst R3
	breq X7
	xjmp L91
X7:
X2:
	.dbline 332
; 	{
	.dbline 333
; 	     switch(DispModel)
	lds R18,_DispModel
	clr R19
	cpi R18,0
	cpc R18,R19
	breq L96
X3:
	cpi R18,1
	ldi R30,0
	cpc R19,R30
	breq L97
	cpi R18,2
	ldi R30,0
	cpc R19,R30
	breq L98
	cpi R18,3
	ldi R30,0
	cpc R19,R30
	brne X8
	xjmp L94
X8:
	cpi R18,4
	ldi R30,0
	cpc R19,R30
	breq L100
	cpi R18,5
	ldi R30,0
	cpc R19,R30
	brne X9
	xjmp L94
X9:
	xjmp L93
X4:
	.dbline 334
; 		 {
L96:
	.dbline 336
; 	        case 0:
; 		    {                //基本显示
	.dbline 337
; 			   PDataYMin =4;
	ldi R24,4
	ldi R25,0
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 338
; 		   	   PDataYMax =154;
	ldi R24,154
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 339
; 			   break;
	xjmp L94
L97:
	.dbline 342
; 			}
; 			case 1:
; 		    {             	 //滚屏
	.dbline 343
; 			   PDataY++;
	lds R24,_PDataY
	lds R25,_PDataY+1
	adiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 344
; 			   break;
	xjmp L94
L98:
	.dbline 347
; 		    }
; 			case 2:
; 		    {  	   	 		 //反向滚屏
	.dbline 348
; 			   PDataY--;
	lds R24,_PDataY
	lds R25,_PDataY+1
	sbiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 349
; 			   break;
	xjmp L94
X5:
	.dbline 352
; 		    }
; 			case 3:
; 		    {  
	.dbline 353
; 			   break;
L100:
	.dbline 356
; 		    }
; 			case 4:
; 		    {                //覆盖模式
	.dbline 357
; 			   if(ModelContJuge =1)
	ldi R24,1
	sts _ModelContJuge,R24
	tst R24
	breq L101
	.dbline 358
; 			   {
	.dbline 359
; 			       PDataYMax++;
	lds R24,_PDataYMax
	lds R25,_PDataYMax+1
	adiw R24,1
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 360
; 			   	   PDataYMin++;
	lds R24,_PDataYMin
	lds R25,_PDataYMin+1
	adiw R24,1
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 361
; 			   }
	xjmp L102
L101:
	.dbline 363
; 			   else
; 			   {
	.dbline 364
; 			       PDataYMax--;
	lds R24,_PDataYMax
	lds R25,_PDataYMax+1
	sbiw R24,1
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 365
; 			   	   PDataYMin--;
	lds R24,_PDataYMin
	lds R25,_PDataYMin+1
	sbiw R24,1
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 366
; 			   }
L102:
	.dbline 367
; 			   if(PDataYMax >PFileMax)
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R16,R2
	cpc R17,R3
	brge L103
	.dbline 368
; 			   {   
	.dbline 369
; 				  ModelContJuge =0;
	clr R2
	sts _ModelContJuge,R2
	.dbline 370
; 			   }
L103:
	.dbline 371
; 			   if(PDataYMax <PFileMax)
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R2,R16
	cpc R3,R17
	brge L94
	.dbline 372
; 			   {   
	.dbline 373
; 				  ModelContJuge =1;
	ldi R24,1
	sts _ModelContJuge,R24
	.dbline 374
; 			   }
	.dbline 375
; 			   break;
	.dbline 378
; 		    }
; 			case 5:
; 		    {
	.dbline 379
; 			   break;      
L93:
L94:
	.dbline 383
	ldi R24,400
	ldi R25,1
	sts _ModelDelayTime+1,R25
	sts _ModelDelayTime,R24
	.dbline 384
L91:
	.dbline -2
L90:
	.dbline 0 ; func end
	ret
	.dbsym r PFileMax 16 I
	.dbsym r file_length 18 i
	.dbend
	.dbfunc e KEY_event _KEY_event fV
	.even
_KEY_event::
	.dbline -1
	.dbline 393
; 	        }
; 		 }
; 	//ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
; 	ModelDelayTime =400;
; 	}
; }
; 
; /**************************************************
; 
; 			  按键\显示事件处理区	 
; 			  
; ****************************************************/
; void KEY_event(void)
; { /********* 添加按键处理代码 ***************/
	.dbline 394
;     switch(key_num)
	lds R16,_key_num
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L110
X10:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L110
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L114
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L117
	xjmp L109
X11:
	.dbline 395
; 	{
	.dbline 397
; 	    case 0:
; 		{//And your code
	.dbline 399
; 		   //RAM_Write(0x0010,0xCF);
; 		   break;
	.dbline 402
; 		}
; 		case 1:
; 		{
	.dbline 405
; 		   //Disp_Buff[0] =RAM_Read(0x0010)&0xf;
; 		   //Disp_Buff[1] =RAM_Read(0x0010)>>4;
; 		   break;
L114:
	.dbline 408
; 		}
; 		case 2:
; 		{  
	.dbline 409
; 		   DispModel++;
	lds R24,_DispModel
	subi R24,255    ; addi 1
	sts _DispModel,R24
	.dbline 410
; 		   if(DispModel >8)
	ldi R24,8
	lds R2,_DispModel
	cp R24,R2
	brsh L110
	.dbline 411
; 		      DispModel =0;
	clr R2
	sts _DispModel,R2
	.dbline 412
; 		   break;
	xjmp L110
L117:
	.dbline 415
; 		}
; 		case 3:
; 		{
	.dbline 416
; 		   PORTD &=0b10111111;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 417
; 		   break;
L109:
L110:
	.dbline -2
L108:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Display_event _Display_event fV
	.even
_Display_event::
	.dbline -1
	.dbline 424
; 		}
; 		/*..................*/   
; 	}
; }
; // 显示事件添加
; void Display_event(void)
; { /************* 添加显示 ***********************/
	.dbline 427
; 	 //Disp_Buff[1] =>>4;
; 	 //Disp_Buff[6] =head[2]&0x0f;
; 	 Disp_Buff[0] =DataIndex&0x0f;
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	andi R24,15
	andi R25,0
	sts _Disp_Buff,R24
	.dbline 428
; 	 Disp_Buff[1] =(DataIndex>>4)&0x0f;
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	asr R25
	ror R24
	asr R25
	ror R24
	asr R25
	ror R24
	asr R25
	ror R24
	andi R24,15
	andi R25,0
	sts _Disp_Buff+1,R24
	.dbline 429
; 	 Disp_Buff[2] =DataIndex>>8;
	lds R2,_DataIndex
	lds R3,_DataIndex+1
	mov R2,R3
	clr R3
	sbrc R2,7
	com R3
	sts _Disp_Buff+2,R2
	.dbline 430
; 	 Disp_Buff[4] =PDataY&0x0f;
	lds R24,_PDataY
	lds R25,_PDataY+1
	andi R24,15
	andi R25,0
	sts _Disp_Buff+4,R24
	.dbline 431
; 	 Disp_Buff[3] =DispModel;
	lds R2,_DispModel
	sts _Disp_Buff+3,R2
	.dbline 432
; 	 Disp_Buff[6] =HeadEN;
	lds R2,_HeadEN
	sts _Disp_Buff+6,R2
	.dbline 433
; 	 Disp_Buff[7] =FileEnd;
	lds R2,_FileEnd
	sts _Disp_Buff+7,R2
	.dbline -2
L118:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           temp -> <dead>
	.even
_main::
	.dbline -1
	.dbline 440
; 	 
; }
; 
; /******************* 结束 ***********************************/
; /**********     主函数区  *****************************/
; void main(void)
; {
	.dbline 442
;     char temp;
; 	device_int();
	xcall _device_int
L126:
	.dbline 444
	.dbline 445
	.dbline 446
L127:
	.dbline 443
	xjmp L126
X12:
	.dbline -2
L125:
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 c
	.dbend
	.dbfunc e exi_int0 _exi_int0 fV
;         adress -> R20,R21
;              i -> R22
	.even
_exi_int0::
	xcall push_lset
	xcall push_gset2
	.dbline -1
	.dbline 457
; 	while(1)
; 	{
; 	    ;
; 	}      
; }
;          
; /************  中断函数区   *************************/
; 
; /************************************
;              外中断
; 		   数电机脉冲
; *************************************/
; 
; void exi_int0(void)   
; {    
	.dbline 458
; 	char i =0;
	clr R22
	.dbline 460
; 	int adress;
; 	adress =PDataY<<3;
	lds R20,_PDataY
	lds R21,_PDataY+1
	lsl R20
	rol R21
	lsl R20
	rol R21
	lsl R20
	rol R21
	.dbline 461
; 	for(;i <8;i++)              
	xjmp L133
L130:
	.dbline 462
	.dbline 463
	movw R2,R20
	subi R20,255  ; offset = 1
	sbci R21,255
	movw R16,R2
	xcall _RAM_Read
	ldi R24,<_DispTemp
	ldi R25,>_DispTemp
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 464
L131:
	.dbline 461
	inc R22
L133:
	.dbline 461
	cpi R22,8
	brlo L130
	.dbline 465
	xcall _Screen_send
	.dbline 466
	lds R24,_PDataY
	lds R25,_PDataY+1
	adiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 467
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R24,R2
	cpc R25,R3
	brne L134
	.dbline 468
	lds R2,_PDataYMin
	lds R3,_PDataYMin+1
	sts _PDataY+1,R3
	sts _PDataY,R2
L134:
	.dbline -2
L129:
	xcall pop_gset2
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r adress 20 I
	.dbsym r i 22 c
	.dbend
	.dbfunc e timer1_vof _timer1_vof fV
	.even
_timer1_vof::
	xcall push_lset
	.dbline -1
	.dbline 476
; 	{
;  	   DispTemp[i] =RAM_Read(adress++);//地址偏移,取数到显示缓冲区
; 	}
; 	Screen_send();              //送显示屏幕数据
; 	PDataY++;
; 	if(PDataY == PDataYMax)      //数据定位
; 		PDataY =PDataYMin;	    
; }
; 
; /*******************************************
;               定时器中断
; 			系统主要时钟基准
; ********************************************/
; void timer1_vof(void)
; {   
	.dbline 477
;      SEI();
	sei
	.dbline 478
;      TCNT1H = 0xd4; //setup
	ldi R24,212
	out 0x2d,R24
	.dbline 479
;  	 TCNT1L = 0xce;
	ldi R24,206
	out 0x2c,R24
	.dbline 481
; 	 
; 	 sys_cont++;             //系统调用时间变量
	lds R24,_sys_cont
	lds R25,_sys_cont+1
	adiw R24,1
	sts _sys_cont+1,R25
	sts _sys_cont,R24
	.dbline 483
; 	 
; 	 if(sys_cont ==1000)
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L137
	.dbline 484
; 	     sys_cont =0;
	clr R2
	clr R3
	sts _sys_cont+1,R3
	sts _sys_cont,R2
L137:
	.dbline 486
; 
; 	 if(key_delay >0)        //键盘去抖动延时变量
	clr R2
	lds R3,_key_delay
	cp R2,R3
	brsh L139
	.dbline 487
;          key_delay--;
	mov R24,R3
	subi R24,1
	sts _key_delay,R24
L139:
	.dbline 489
; 	 
; 	 if(delay_time_count >0)
	lds R2,_delay_time_count
	lds R3,_delay_time_count+1
	tst R2
	brne X13
	tst R3
	breq L141
X13:
	.dbline 490
;          delay_time_count--; //ms延时用变量
	lds R24,_delay_time_count
	lds R25,_delay_time_count+1
	sbiw R24,1
	sts _delay_time_count+1,R25
	sts _delay_time_count,R24
L141:
	.dbline 492
; 	 
; 	 if(ModelDelayTime >0)   //模式切换时间
	clr R2
	clr R3
	lds R4,_ModelDelayTime
	lds R5,_ModelDelayTime+1
	cp R2,R4
	cpc R3,R5
	brge L143
	.dbline 493
; 	     ModelDelayTime--;
	movw R24,R4
	sbiw R24,1
	sts _ModelDelayTime+1,R25
	sts _ModelDelayTime,R24
L143:
	.dbline 495
; 	 
; 	 Disp_key_group();       //显示刷新,取键值到缓冲区
	xcall _Disp_key_group
	.dbline 496
;      Key_num();              //键值后期处理以及去抖函数
	xcall _Key_num
	.dbline 497
; 	 Disp_Model();           //屏幕显示特效模式
	xcall _Disp_Model
	.dbline 498
; 	 KEY_event();            //按键事件处理
	xcall _KEY_event
	.dbline 499
; 	 Display_event();        //显示事件
	xcall _Display_event
	.dbline 500
; 	 Screen_send();
	xcall _Screen_send
	.dbline -2
L136:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e usart_rcx _usart_rcx fV
;      uart_data -> R20
	.even
_usart_rcx::
	xcall push_lset
	xcall push_gset1
	.dbline -1
	.dbline 508
; 
; }
; 
; /*************************************
;        USART 接受中断   
;  ******************************/
; void usart_rcx(void)
; {
	.dbline 510
;    unsigned char uart_data;
;    uart_data =UDR;
	in R20,0xc
	.dbline 511
;    data_store(uart_data);
	mov R16,R20
	xcall _data_store
	.dbline 512
;    uart_TX(0xAA);
	ldi R16,170
	xcall _uart_TX
	.dbline 513
;    time_out_ms=0;
	clr R2
	clr R3
	sts _time_out_ms+1,R3
	sts _time_out_ms,R2
	.dbline 514
;    time_out_s=0;
	sts _time_out_s,R2
	.dbline -2
L145:
	xcall pop_gset1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r uart_data 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile display_board2.1.c
_Head::
	.blkb 3
	.dbsym e Head _Head A[3:3]c
_DispTemp::
	.blkb 8
	.dbsym e DispTemp _DispTemp A[8:8]c

⌨️ 快捷键说明

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