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

📄 display_board3.0.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 287
L68:
	.dbline 280
	in R2,0x36
	sbrs R2,7
	rjmp L67
	.dbline 288
;       }
;    }
;    Disp_Buff[7] =2;
	ldi R24,2
	sts _Disp_Buff+7,R24
	.dbline 289
;    if ((TWSR & 0xF8) != MT_SLA_ACK)
	in R24,0x1
	andi R24,248
	cpi R24,24
	breq L73
	.dbline 290
;    {
	.dbline 291
;        TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
	ldi R24,148
	out 0x36,R24
	.dbline 292
; 	   goto start;
	xjmp L58
L73:
	.dbline 294
;    }
;    TWDR = data;                      //送数据
	out 0x3,R20
	.dbline 295
;    TWCR = (1<<TWINT) | (1<<TWEN);
	ldi R24,132
	out 0x36,R24
	xjmp L76
L75:
	.dbline 297
;    while (!(TWCR & (1<<TWINT)))
;    {
	.dbline 298
;        if(I2C_TIME_OUT >1000)
	ldi R24,1000
	ldi R25,3
	lds R2,_I2C_TIME_OUT
	lds R3,_I2C_TIME_OUT+1
	cp R24,R2
	cpc R25,R3
	brsh L78
	.dbline 299
; 	   {
	.dbline 300
; 	      TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
	ldi R24,148
	out 0x36,R24
	.dbline 301
; 		  goto start;
	xjmp L58
L78:
	.dbline 303
L76:
	.dbline 296
	in R2,0x36
	sbrs R2,7
	rjmp L75
	.dbline 304
;        }
;    }
;    Disp_Buff[7] =3;
	ldi R24,3
	sts _Disp_Buff+7,R24
	.dbline 305
;    if ((TWSR & 0xF8) != MT_DATA_ACK)
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L81
	.dbline 306
;    {
	.dbline 308
;        //goto start;
;    }
L81:
	.dbline 309
;    TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
	ldi R24,148
	out 0x36,R24
	.dbline -2
	.dbline 310
; }
L57:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e Screen_send _Screen_send fV
;              i -> R20
	.even
_Screen_send::
	xcall push_gset1
	.dbline -1
	.dbline 315
; /***************************************************
;                向显示屏送数据
; ***************************************************/
; void Screen_send(void)
; {
	.dbline 316
;     char i =8;
	ldi R20,8
	.dbline 317
; 	PORTB &=0B11101111;     //送RCK信号,底电平    
	in R24,0x18
	andi R24,239
	out 0x18,R24
	.dbline 318
; 	for(;i >0;)
	xjmp L87
L84:
	.dbline 319
	.dbline 320
	dec R20
	.dbline 321
	ldi R24,<_DispTemp
	ldi R25,>_DispTemp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI_MasterTransmit
	.dbline 322
L85:
	.dbline 318
L87:
	.dbline 318
	clr R2
	cp R2,R20
	brlo L84
	.dbline 323
; 	{   
; 	    i--;
; 	    SPI_MasterTransmit(DispTemp[i]);
;     }
; 	PORTB |=0B00010000;    //关闭RCK信号,高电平
	sbi 0x18,4
	.dbline -2
	.dbline 324
; }
L83:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e SPI_MasterTransmit _SPI_MasterTransmit fV
;          cData -> R16
	.even
_SPI_MasterTransmit::
	.dbline -1
	.dbline 327
; //SPI硬件通讯
; void SPI_MasterTransmit(char cData)
; {
	.dbline 328
;      SPDR = cData;/* 启动数据传输 */
	out 0xf,R16
L89:
	.dbline 329
L90:
	.dbline 329
; 	 while(!(SPSR & (1<<SPIF)));/* 等待传输结束 */
	sbis 0xe,7
	rjmp L89
	.dbline -2
	.dbline 330
; }
L88:
	.dbline 0 ; func end
	ret
	.dbsym r cData 16 c
	.dbend
	.dbfunc e RAM_Write _RAM_Write fV
;       High8Bit -> R20
;           data -> R18
;         adress -> R16,R17
	.even
_RAM_Write::
	xcall push_gset1
	.dbline -1
	.dbline 336
; /**************************************************
; 			 数据接受,外部RAM读写
; ****************************************************/
; //写外部RAM
; void RAM_Write(int adress,char data)
; {
	.dbline 338
;    char High8Bit;
;    High8Bit=adress >>8;
	movw R20,R16
	mov R20,R21
	clr R21
	sbrc R20,7
	com R21
	.dbline 339
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 340
;    PORTC =0;
	clr R2
	out 0x15,R2
	.dbline 341
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 342
;    PORTA =adress; 
	out 0x1b,R16
	.dbline 343
;    PORTD &=0xe7;
	in R24,0x12
	andi R24,231
	out 0x12,R24
	.dbline 344
;    PORTC =High8Bit;
	out 0x15,R20
	.dbline 345
;    PORTD |=(High8Bit <<3) & 0x18;
	mov R24,R20
	lsl R24
	lsl R24
	lsl R24
	andi R24,24
	in R2,0x12
	or R2,R24
	out 0x12,R2
	.dbline 346
;    PORTD &=0b01111111;                         
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 347
;    PORTA =data;
	out 0x1b,R18
	.dbline 348
;    PORTD &=0b10111111;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
	.dbline 349
; }
L92:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r High8Bit 20 c
	.dbsym r data 18 c
	.dbsym r adress 16 I
	.dbend
	.dbfunc e RAM_Read _RAM_Read fc
;       High8Bit -> R20
;         adress -> R16,R17
	.even
_RAM_Read::
	xcall push_gset1
	.dbline -1
	.dbline 352
; //读外部RAM
; char RAM_Read(int adress)
; {
	.dbline 354
;    char High8Bit;
;    High8Bit=adress >>8;
	movw R20,R16
	mov R20,R21
	clr R21
	sbrc R20,7
	com R21
	.dbline 355
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 356
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 357
;    PORTA =adress; 
	out 0x1b,R16
	.dbline 358
;    PORTD &=0xe7;
	in R24,0x12
	andi R24,231
	out 0x12,R24
	.dbline 359
;    PORTC =High8Bit;
	out 0x15,R20
	.dbline 360
;    PORTD |=(High8Bit <<3) & 0x18;
	mov R24,R20
	lsl R24
	lsl R24
	lsl R24
	andi R24,24
	in R2,0x12
	or R2,R24
	out 0x12,R2
	.dbline 361
;    PORTD &=0b01011111;                         
	in R24,0x12
	andi R24,95
	out 0x12,R24
	.dbline 362
;    DDRA =0;
	clr R2
	out 0x1a,R2
	.dbline 363
;    PORTA =0XFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 364
;    return PINA;
	in R16,0x19
	.dbline -2
L93:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r High8Bit 20 c
	.dbsym r adress 16 I
	.dbend
	.dbfunc e data_store _data_store fV
;           data -> R20
	.even
_data_store::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 368
; }
; //存储数据到外部RAM
; void data_store(char data)
; {
	.dbline 369
;    if((data ==76) &&(FileEnd ==1))            //数据起始位检测
	cpi R20,76
	brne L95
	lds R24,_FileEnd
	cpi R24,1
	brne L95
	.dbline 370
;    {
	.dbline 371
;        HeadEN =1;                             //开启头文件数据传输
	ldi R24,1
	sts _HeadEN,R24
	.dbline 372
; 	   HeadLoad =0;                           //头文件指针清零
	clr R2
	sts _HeadLoad,R2
	.dbline 373
; 	   DataIndex =0;                          //存储数据指针清零
	clr R3
	sts _DataIndex+1,R3
	sts _DataIndex,R2
	.dbline 374
;    }
L95:
	.dbline 375
;    if((HeadEN ==0) &&(FileEnd ==0))
	lds R2,_HeadEN
	tst R2
	breq X2
	xjmp L97
X2:
	lds R2,_FileEnd
	tst R2
	breq X3
	xjmp L97
X3:
	.dbline 376
;    {
	.dbline 377
; 	   RAM_Write(DataIndex,data);             //数组送数
	mov R18,R20
	lds R16,_DataIndex
	lds R17,_DataIndex+1
	xcall _RAM_Write
	.dbline 378
; 	   if(DataIndex ==2)                      //送文件长度数据到变量
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne L99
	.dbline 379
; 	   {
	.dbline 380
; 	       FileLength =(RAM_Read(0x0001)<<8)|RAM_Read(0x0000);    
	ldi R16,1
	ldi R17,0
	xcall _RAM_Read
	mov R2,R16
	clr R16
	clr R17
	push R2
	xcall _RAM_Read
	pop R2
	mov R3,R2
	mov R2,R16
	sts _FileLength+1,R3
	sts _FileLength,R2
	.dbline 381
; 	   }  
L99:
	.dbline 382
; 	   DataIndex++;	                          //数据指针加1
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	adiw R24,1
	sts _DataIndex+1,R25
	sts _DataIndex,R24
	.dbline 383
; 	   if(((DataIndex >=FileLength)||(DataIndex >=32767))&& (DataIndex >16))
	lds R2,_FileLength
	lds R3,_FileLength+1
	cp R24,R2
	cpc R25,R3
	brge L103
	cpi R24,255
	ldi R30,127
	cpc R25,R30
	brlt L101
L103:
	ldi R24,16
	ldi R25,0
	lds R2,_DataIndex
	lds R3,_DataIndex+1
	cp R24,R2
	cpc R25,R3
	brge L101
	.dbline 384
; 	   {
	.dbline 385
; 		   HeadEN =1;
	ldi R24,1
	sts _HeadEN,R24
	.dbline 386
; 		   FileEnd =1;
	sts _FileEnd,R24
	.dbline 387
; 	   }
L101:
	.dbline 388
;    }
L97:
	.dbline 389
;    if(HeadEN ==1)                            //循环检测文件起始标志
	lds R24,_HeadEN
	cpi R24,1
	brne L104
	.dbline 390
;    {
	.dbline 391
;       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 392
;       HeadLoad++;
	lds R24,_HeadLoad
	subi R24,255    ; addi 1
	sts _HeadLoad,R24
	.dbline 393
; 	  if(HeadLoad ==3)
	cpi R24,3
	brne L106
	.dbline 394
; 	  { 
	.dbline 395
; 	     if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
	lds R24,_Head
	cpi R24,76
	brne L108
	lds R24,_Head+1
	cpi R24,69
	brne L108
	lds R24,_Head+2
	cpi R24,68
	brne L108
	.dbline 396
; 		 {
	.dbline 397
; 		     HeadEN =0;
	clr R2
	sts _HeadEN,R2
	.dbline 398
; 			 FileEnd =0;
	sts _FileEnd,R2
	.dbline 399
; 		 }
L108:
	.dbline 400
;       }
L106:
	.dbline 401
L104:
	.dbline -2
	.dbline 402
;    }
; }
L94:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e Disp_Model _Disp_Model fV
;          PYMax -> R16,R17
;    file_length -> R16,R17
	.even
_Disp_Model::
	.dbline -1
	.dbline 409
; /**************************************************
; 
; 			 显示效果处理	 
; 			 
; ****************************************************/
; void Disp_Model(void)
; {   
	.dbline 410
;     unsigned int file_length =0;
	clr R16
	clr R17
	.dbline 411
; 	int PYMax =FileLength >>8;
	lds R16,_FileLength
	lds R17,_FileLength+1
	mov R16,R17
	clr R17
	sbrc R16,7
	com R17
	.dbline 414
; 	//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 X8
	xjmp L113
X8:
	tst R3
	breq X9
	xjmp L113
X9:
X4:
	.dbline 415
; 	{
	.dbline 416
; 	     switch(DispModel)
	lds R16,_DispModel
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L118
X5:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L119
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L120
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	brne X10
	xjmp L116
X10:
	cpi R16,4
	ldi R30,0
	cpc R17,R30
	breq L122
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	brne X11
	xjmp L116
X11:
	xjmp L115
X6:
	.dbline 417
; 		 {
L118:
	.dbline 419
; 	        case 0:
; 		    {                //基本显示
	.dbline 420
; 			   PDataYMin =2;
	ldi R24,2
	ldi R25,0
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 421
; 		   	   PDataYMax =152;
	ldi R24,152
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 422
; 			   break;
	xjmp L116

⌨️ 快捷键说明

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