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

📄 display_board2.0.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 3 页
字号:
; 			   PDataY++;
	lds R24,_PDataY
	lds R25,_PDataY+1
	adiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 319
; 			   break;
	xjmp L81
L85:
	.dbline 322
; 		    }
; 			case 2:
; 		    {  	   	 		 //反向滚屏
	.dbline 323
; 			   PDataY--;
	lds R24,_PDataY
	lds R25,_PDataY+1
	sbiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 324
; 			   break;
	xjmp L81
X4:
	.dbline 327
; 		    }
; 			case 3:
; 		    {  
	.dbline 328
; 			   break;
L87:
	.dbline 331
; 		    }
; 			case 4:
; 		    {                //覆盖模式
	.dbline 332
; 			   if(ModelContJuge =1)
	ldi R24,1
	sts _ModelContJuge,R24
	tst R24
	breq L88
	.dbline 333
; 			   {
	.dbline 334
; 			       PDataYMax++;
	lds R24,_PDataYMax
	lds R25,_PDataYMax+1
	adiw R24,1
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 335
; 			   	   PDataYMin++;
	lds R24,_PDataYMin
	lds R25,_PDataYMin+1
	adiw R24,1
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 336
; 			   }
	xjmp L89
L88:
	.dbline 338
; 			   else
; 			   {
	.dbline 339
; 			       PDataYMax--;
	lds R24,_PDataYMax
	lds R25,_PDataYMax+1
	sbiw R24,1
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 340
; 			   	   PDataYMin--;
	lds R24,_PDataYMin
	lds R25,_PDataYMin+1
	sbiw R24,1
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 341
; 			   }
L89:
	.dbline 342
; 			   if(PDataYMax >PFileMax)
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R20,R2
	cpc R21,R3
	brge L90
	.dbline 343
; 			   {   
	.dbline 344
; 				  ModelContJuge =0;
	clr R2
	sts _ModelContJuge,R2
	.dbline 345
; 			   }
L90:
	.dbline 346
; 			   if(PDataYMax <PFileMax)
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R2,R20
	cpc R3,R21
	brge L81
	.dbline 347
; 			   {   
	.dbline 348
; 				  ModelContJuge =1;
	ldi R24,1
	sts _ModelContJuge,R24
	.dbline 349
; 			   }
	.dbline 350
; 			   break;
	.dbline 353
; 		    }
; 			case 5:
; 		    {
	.dbline 354
; 			   break;      
L80:
L81:
	.dbline 357
	ldi R16,4
	ldi R17,0
	xcall _RAM_Read
	mov R2,R16
	ldi R16,5
	ldi R17,0
	push R2
	xcall _RAM_Read
	pop R2
	mov R4,R16
	clr R5
	mov R5,R4
	clr R4
	clr R3
	and R2,R4
	and R3,R5
	sts _ModelDelayTime+1,R3
	sts _ModelDelayTime,R2
	.dbline 358
L78:
	.dbline -2
L77:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r PFileMax 20 I
	.dbsym r file_length 22 i
	.dbend
	.dbfunc e KEY_event _KEY_event fV
	.even
_KEY_event::
	.dbline -1
	.dbline 367
; 	        }
; 		 }
; 	ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
; 	}
; }
; 
; /**************************************************
; 
; 			  按键\显示事件处理区	 
; 			  
; ****************************************************/
; void KEY_event(void)
; { /********* 添加按键处理代码 ***************/
	.dbline 368
;     switch(key_num)
	lds R16,_key_num
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L97
X9:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L97
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L101
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L104
	xjmp L96
X10:
	.dbline 369
; 	{
	.dbline 371
; 	    case 0:
; 		{//And your code
	.dbline 373
; 		   //RAM_Write(0x0010,0xCF);
; 		   break;
	.dbline 376
; 		}
; 		case 1:
; 		{
	.dbline 379
; 		   //Disp_Buff[0] =RAM_Read(0x0010)&0xf;
; 		   //Disp_Buff[1] =RAM_Read(0x0010)>>4;
; 		   break;
L101:
	.dbline 382
; 		}
; 		case 2:
; 		{  
	.dbline 383
; 		   DispModel++;
	lds R24,_DispModel
	subi R24,255    ; addi 1
	sts _DispModel,R24
	.dbline 384
; 		   if(DispModel >8)
	ldi R24,8
	lds R2,_DispModel
	cp R24,R2
	brsh L97
	.dbline 385
; 		      DispModel =0;
	clr R2
	sts _DispModel,R2
	.dbline 386
; 		   break;
	xjmp L97
L104:
	.dbline 389
; 		}
; 		case 3:
; 		{
	.dbline 390
; 		   PORTD &=0b10111111;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline 391
; 		   break;
L96:
L97:
	.dbline -2
L95:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Display_event _Display_event fV
	.even
_Display_event::
	.dbline -1
	.dbline 398
; 		}
; 		/*..................*/   
; 	}
; }
; // 显示事件添加
; void Display_event(void)
; { /************* 添加显示 ***********************/
	.dbline 401
; 	 //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 402
; 	 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 403
; 	 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 405
; 	 
; 	 Disp_Buff[3] =DispModel;
	lds R2,_DispModel
	sts _Disp_Buff+3,R2
	.dbline 406
; 	 Disp_Buff[6] =HeadEN;
	lds R2,_HeadEN
	sts _Disp_Buff+6,R2
	.dbline 407
; 	 Disp_Buff[7] =FileEnd;
	lds R2,_FileEnd
	sts _Disp_Buff+7,R2
	.dbline -2
L105:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           temp -> <dead>
	.even
_main::
	.dbline -1
	.dbline 413
; }
; 
; /******************* 结束 ***********************************/
; /**********     主函数区  *****************************/
; void main(void)
; {
	.dbline 415
;     char temp;
; 	device_int();
	xcall _device_int
L112:
	.dbline 417
	.dbline 419
L113:
	.dbline 416
	xjmp L112
X11:
	.dbline -2
L111:
	.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 430
; 	while(1)
; 	{
; 	
; 	}      
; }
;          
; /************  中断函数区   *************************/
; 
; /************************************
;              外中断
; 		   数电机脉冲
; *************************************/
; 
; void exi_int0(void)   
; {    
	.dbline 431
; 	char i =0;
	clr R22
	.dbline 433
; 	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 434
; 	for(;i <8;i++)              
	xjmp L119
L116:
	.dbline 435
	.dbline 436
	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 437
L117:
	.dbline 434
	inc R22
L119:
	.dbline 434
	cpi R22,8
	brlo L116
	.dbline 438
	xcall _Screen_send
	.dbline 439
	lds R24,_PDataY
	lds R25,_PDataY+1
	adiw R24,1
	sts _PDataY+1,R25
	sts _PDataY,R24
	.dbline 440
	lds R2,_PDataYMax
	lds R3,_PDataYMax+1
	cp R24,R2
	cpc R25,R3
	brne L120
	.dbline 441
	lds R2,_PDataYMin
	lds R3,_PDataYMin+1
	sts _PDataY+1,R3
	sts _PDataY,R2
L120:
	.dbline -2
L115:
	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 449
; 	{
;  	   DispTemp[i] =RAM_Read(adress++);//地址偏移,取数到显示缓冲区
; 	}
; 	Screen_send();              //送显示屏幕数据
; 	PDataY++;
; 	if(PDataY == PDataYMax)      //数据定位
; 		PDataY =PDataYMin;	    
; }
; 
; /*******************************************
;               定时器中断
; 			系统主要时钟基准
; ********************************************/
; void timer1_vof(void)
; {   
	.dbline 450
;      SEI();
	sei
	.dbline 451
;      TCNT1H = 0xd4; //setup
	ldi R24,212
	out 0x2d,R24
	.dbline 452
;  	 TCNT1L = 0xce;
	ldi R24,206
	out 0x2c,R24
	.dbline 454
; 	 
; 	 sys_cont++;             //系统调用时间变量
	lds R24,_sys_cont
	lds R25,_sys_cont+1
	adiw R24,1
	sts _sys_cont+1,R25
	sts _sys_cont,R24
	.dbline 456
; 	 
; 	 if(sys_cont ==1000)
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L123
	.dbline 457
; 	     sys_cont =0;
	clr R2
	clr R3
	sts _sys_cont+1,R3
	sts _sys_cont,R2
L123:
	.dbline 461
; //***********************************************************
; //传输超时处理,当time_out_ms大于设定值的时候,等待等待20S,并且
; //一直发送标志符号,超过20S以后,进行错误处理	 
; 	 time_out_ms++;
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	adiw R24,1
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 462
; 	 if (HeadEN==0 && FileEnd==0 && time_out_ms>=800 )
	lds R2,_HeadEN
	tst R2
	brne L125
	lds R2,_FileEnd
	tst R2
	brne L125
	cpi R24,32
	ldi R30,3
	cpc R25,R30
	brlo L125
	.dbline 463
; 	 	{
	.dbline 465
; 
; 		if (sys_cont==0)		 //秒记时 
	lds R2,_sys_cont
	lds R3,_sys_cont+1
	tst R2
	brne L127
	tst R3
	brne L127
X12:
	.dbline 466
; 		   {
	.dbline 467
; 		   time_out_s++;
	lds R24,_time_out_s
	subi R24,255    ; addi 1
	sts _time_out_s,R24
	.dbline 468
; 		   if (time_out_s=20)	 //结束标志
	ldi R24,20
	sts _time_out_s,R24
	tst R24
	breq L129
	.dbline 469
; 		   	  {
	.dbline 470
; 			  time_out_ms=1;	 //闲置标志
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 471
; 			  HeadEN=1;
	sts _HeadEN,R24
	.dbline 472
; 			  FileEnd=1;
	sts _FileEnd,R24
	.dbline 474
; 			  //进行错误处理,并要跳出此结构体
; 			  {}
	.dbline 474
	.dbline 475
; 			  }
L129:
	.dbline 476
; 		   }
L127:
	.dbline 479
; 
; 
; 		uart_TX(0xAA);
	ldi R16,170
	xcall _uart_TX
	.dbline 480
; 		time_out_ms--;   
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	sbiw R24,1
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
	.dbline 482
; 		
; 		}
L125:
	.dbline 483
; 	 if (time_out_ms==1000)
	lds R24,_time_out_ms
	lds R25,_time_out_ms+1
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L131
	.dbline 484
; 	 	time_out_ms=1;	   	 //1 表示空闲状态
	ldi R24,1
	ldi R25,0
	sts _time_out_ms+1,R25
	sts _time_out_ms,R24
L131:
	.dbline 487
;  
; //***********************************************************
; 	 if(key_delay >0)        //键盘去抖动延时变量
	clr R2
	lds R3,_key_delay
	cp R2,R3
	brsh L133
	.dbline 488
;          key_delay--;
	mov R24,R3
	subi R24,1
	sts _key_delay,R24
L133:
	.dbline 490
; 	 
; 	 if(delay_time_count >0)
	lds R2,_delay_time_count
	lds R3,_delay_time_count+1
	tst R2
	brne X13
	tst R3
	breq L135
X13:
	.dbline 491
;          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
L135:
	.dbline 493
; 	 
; 	 if(ModelDelayTime >0)   //模式切换时间
	clr R2
	clr R3
	lds R4,_ModelDelayTime
	lds R5,_ModelDelayTime+1
	cp R2,R4
	cpc R3,R5
	brge L137
	.dbline 494
; 	     ModelDelayTime--;
	movw R24,R4
	sbiw R24,1
	sts _ModelDelayTime+1,R25
	sts _ModelDelayTime,R24
L137:
	.dbline 496
; 	 
; 	 Disp_key_group();       //显示刷新,取键值到缓冲区
	xcall _Disp_key_group
	.dbline 497
;      Key_num();              //键值后期处理以及去抖函数
	xcall _Key_num
	.dbline 498
; 	 Disp_Model();           //屏幕显示特效模式
	xcall _Disp_Model
	.dbline 499
; 	 KEY_event();            //按键事件处理
	xcall _KEY_event
	.dbline 500
; 	 Display_event();        //显示事件
	xcall _Display_event
	.dbline -2
L122:
	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 509
; 	 //Screen_send();
; 
; }
; 
; /*************************************
;        USART 接受中断   
;  ******************************/
; void usart_rcx(void)
; {
	.dbline 511
;    unsigned char uart_data;
;    uart_data =UDR;
	in R20,0xc
	.dbline 512
;    Disp_Buff[4] =uart_data&0x0f;
	mov R24,R20
	andi R24,15
	sts _Disp_Buff+4,R24
	.dbline 513
;    data_store(uart_data);
	mov R16,R20
	xcall _data_store
	.dbline 514
;    uart_TX(0xAA);
	ldi R16,170
	xcall _uart_TX
	.dbline 515
;    time_out_ms=0;
	clr R2
	clr R3
	sts _time_out_ms+1,R3
	sts _time_out_ms,R2
	.dbline 516
;    time_out_s=0;
	sts _time_out_s,R2
	.dbline -2
L139:
	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.0.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 + -