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

📄 display_board2.0.s

📁 一个LED特效显示程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 129
;      DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 130
; 	 PORTA =0XFF;
	out 0x1b,R24
	.dbline 131
; 	 DDRB =0B00001110;
	ldi R24,14
	out 0x17,R24
	.dbline 132
; 	 PORTB =0XFF;
	ldi R24,255
	out 0x18,R24
	.dbline 133
; 	 DDRC =0XFF;
	out 0x14,R24
	.dbline 134
; 	 PORTC =0XFF;
	out 0x15,R24
	.dbline 135
; 	 DDRD  = 0xF8;	        //
	ldi R24,248
	out 0x11,R24
	.dbline 136
;  	 PORTD = 0XFF;
	ldi R24,255
	out 0x12,R24
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer_int _timer_int fV
	.even
_timer_int::
	.dbline -1
	.dbline 143
; }
; 
; /****************************************
;           定时器
; ****************************************/
; void timer_int(void)
; { 
	.dbline 144
;      TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 145
;  	 TCNT1H = 0xd4; //setup
	ldi R24,212
	out 0x2d,R24
	.dbline 146
;  	 TCNT1L = 0xce;
	ldi R24,206
	out 0x2c,R24
	.dbline 147
;  	 TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 148
;  	 TCCR1B = 0x01; //start Timer
	ldi R24,1
	out 0x2e,R24
	.dbline 149
;      TIMSK = 0x04;
	ldi R24,4
	out 0x39,R24
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e exit_int _exit_int fV
	.even
_exit_int::
	.dbline -1
	.dbline 157
; 
; }
; 
; /****************************************
;           外中断
; ****************************************/
; void exit_int(void)
; {
	.dbline 158
;      GICR  = 0x40; 
	ldi R24,64
	out 0x3b,R24
	.dbline 159
;   	 MCUCR = 0x02;
	ldi R24,2
	out 0x35,R24
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_int _uart_int fV
	.even
_uart_int::
	.dbline -1
	.dbline 167
; 
; }
; 
; /****************************************
;           串口通讯
; ****************************************/
; void uart_int(void)
; {
	.dbline 168
;       UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 169
;       UCSRA = 0x00;
	out 0xb,R2
	.dbline 170
;       UCSRC = 0x00;
	out 0x20,R2
	.dbline 171
;       UBRR =5;      //设置波特率115200
	ldi R24,5
	out 0x9,R24
	.dbline 172
;       UCSRB = 0x98; //接受中断允许,接受允许,发送允许
	ldi R24,152
	out 0xa,R24
	.dbline 173
;       UCSRC = 0xBc; //8BIT, 奇校验,2停止位
	ldi R24,188
	out 0x20,R24
	.dbline -2
L43:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e device_int _device_int fV
	.even
_device_int::
	.dbline -1
	.dbline 180
; }
; 
; /****************************************
;           器件初始化函数
; ****************************************/
; void device_int(void)
; {
	.dbline 181
;      CLI();
	cli
	.dbline 182
;    	 port_int();
	xcall _port_int
	.dbline 183
;    	 timer_int();
	xcall _timer_int
	.dbline 184
;    	 exit_int();
	xcall _exit_int
	.dbline 185
;    	 uart_int();
	xcall _uart_int
	.dbline 186
; 	 SEI(); 
	sei
	.dbline -2
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_TX _uart_TX fV
;           data -> R16
	.even
_uart_TX::
	.dbline -1
	.dbline 193
; }
; 
; /****************************************
;           串口收发数据
; ****************************************/
; void uart_TX(unsigned char data)
; {
	.dbline 194
;     UCSRA |=0X40;         //标志清零
	sbi 0xb,6
	.dbline 195
; 	UDR =data;
	out 0xc,R16
	.dbline -2
L45:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e SPI_data_send _SPI_data_send fV
;          count -> R20
;      send_data -> R22
	.even
_SPI_data_send::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 203
; }
; 
; /***************************************************
;                向显示屏送数据
; ***************************************************/
; 
; void SPI_data_send(unsigned char send_data)       //向595送数据串
; {  
	.dbline 205
;    unsigned char count;
;    for(count =0;count<8;count++)
	clr R20
	xjmp L50
L47:
	.dbline 206
;    {
	.dbline 207
;       if(((send_data<<count)&0x80 )==0)
	mov R16,R22
	mov R17,R20
	xcall lsl8
	mov R24,R16
	andi R24,128
	brne L51
	.dbline 208
; 	     PORTC &= 0b01111111;      	   			   //送 data
	in R24,0x15
	andi R24,127
	out 0x15,R24
	xjmp L52
L51:
	.dbline 210
;       else
; 	     PORTC |= 0b10000000;
	sbi 0x15,7
L52:
	.dbline 211
	sbi 0x12,3
	.dbline 212
	in R24,0x12
	andi R24,247
	out 0x12,R24
	.dbline 213
L48:
	.dbline 205
	inc R20
L50:
	.dbline 205
	cpi R20,8
	brlo L47
	.dbline -2
L46:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbsym r send_data 22 c
	.dbend
	.dbfunc e Screen_send _Screen_send fV
;              i -> R20
	.even
_Screen_send::
	xcall push_gset1
	.dbline -1
	.dbline 216
; 	  PORTD |=0b00001000;        				   //送SCK信号
;       PORTD &=0b11110111;
;    }
; }
; void Screen_send(void)
; {
	.dbline 218
;     char i;
; 	PORTD &= 0b11101111;       //送RCK信号,底电平                
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 219
; 	for(i =0;i <8;i++)
	clr R20
	xjmp L57
L54:
	.dbline 220
	.dbline 221
	ldi R24,<_DispTemp
	ldi R25,>_DispTemp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI_data_send
	.dbline 222
L55:
	.dbline 219
	inc R20
L57:
	.dbline 219
	cpi R20,8
	brlo L54
	.dbline 223
; 	{
; 	    SPI_data_send(DispTemp[i]);  
;     }
; 	PORTD |= 0b00010000;       //关闭RCK信号,高电平
	sbi 0x12,4
	.dbline -2
L53:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e RAM_Write _RAM_Write fV
;           data -> R18
;         adress -> R16,R17
	.even
_RAM_Write::
	.dbline -1
	.dbline 231
; 
; }
; /**************************************************
; 			 数据接受,外部RAM读写
; ****************************************************/
; //写外部RAM
; void RAM_Write(int adress,char data)
; {
	.dbline 232
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 233
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 234
;    PORTA =adress&0xff;
	movw R24,R16
	andi R25,0
	out 0x1b,R24
	.dbline 235
;    PORTC =(adress >>8)&0xff;
	movw R24,R16
	mov R24,R25
	clr R25
	sbrc R24,7
	com R25
	andi R25,0
	out 0x15,R24
	.dbline 236
;    PORTD &=0b01111111;                         
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 237
;    PORTA =data;
	out 0x1b,R18
	.dbline 238
;    PORTD &=0b10111111;
	in R24,0x12
	andi R24,191
	out 0x12,R24
	.dbline -2
L58:
	.dbline 0 ; func end
	ret
	.dbsym r data 18 c
	.dbsym r adress 16 I
	.dbend
	.dbfunc e RAM_Read _RAM_Read fc
;           temp -> R20
;         adress -> R16,R17
	.even
_RAM_Read::
	xcall push_gset1
	.dbline -1
	.dbline 243
;    //PORTD |=0B01100000;           //关ALE  读关闭  写关闭
; }
; //读外部RAM
; char RAM_Read(int adress)
; {
	.dbline 245
;    char temp;
;    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
	in R24,0x12
	ori R24,224
	out 0x12,R24
	.dbline 246
;    DDRA =0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 247
;    PORTA =adress&0xff;
	movw R24,R16
	andi R25,0
	out 0x1b,R24
	.dbline 248
;    PORTC =(adress >>8)&0xff;
	movw R24,R16
	mov R24,R25
	clr R25
	sbrc R24,7
	com R25
	andi R25,0
	out 0x15,R24
	.dbline 249
;    PORTD &=0b01111111;                         
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 250
;    PORTD &=0b11011111;
	in R24,0x12
	andi R24,223
	out 0x12,R24
	.dbline 251
;    DDRA =0;
	clr R2
	out 0x1a,R2
	.dbline 252
;    PORTA =0XFF;
	ldi R24,255
	out 0x1b,R24
	.dbline 253
;    temp =PINA;
	in R20,0x19
	.dbline 254
;    return temp;
	mov R16,R20
	.dbline -2
L59:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 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 259
; }
; //存储数据到外部RAM
; 
; void data_store(char data)
; {
	.dbline 260
;    if((data ==76) &&(FileEnd ==1))     //数据起始位检测
	cpi R20,76
	brne L61
	lds R24,_FileEnd
	cpi R24,1
	brne L61
	.dbline 261
;    {
	.dbline 262
;        HeadEN =1;                           //开启头文件数据传输
	ldi R24,1
	sts _HeadEN,R24
	.dbline 263
; 	   HeadLoad =0;                         //头文件指针清零
	clr R2
	sts _HeadLoad,R2
	.dbline 264
; 	   DataIndex =0;                        //存储数据指针清零
	clr R3
	sts _DataIndex+1,R3
	sts _DataIndex,R2
	.dbline 265
;    }
L61:
	.dbline 266
;    if((HeadEN ==0) &&(FileEnd ==0))
	lds R2,_HeadEN
	tst R2
	brne L63
	lds R2,_FileEnd
	tst R2
	brne L63
	.dbline 267
;    {
	.dbline 268
; 	   RAM_Write(DataIndex,data);            //数组送数
	mov R18,R20
	lds R16,_DataIndex
	lds R17,_DataIndex+1
	xcall _RAM_Write
	.dbline 269
; 	   DataIndex++;
	lds R24,_DataIndex
	lds R25,_DataIndex+1
	adiw R24,1
	sts _DataIndex+1,R25
	sts _DataIndex,R24
	.dbline 270
; 	   if(DataIndex <2)                      //送文件长度数据到变量
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brge L65
	.dbline 271
; 	   {
	.dbline 272
; 	       FileLength |=data <<DataIndex;    
	movw R18,R24
	mov R16,R20
	clr R17
	xcall lsl16
	lds R2,_FileLength
	lds R3,_FileLength+1
	or R2,R16
	or R3,R17
	sts _FileLength+1,R3
	sts _FileLength,R2
	.dbline 274
; 	       //FileLength =316;
; 	   }                                     //数据指针
L65:
	.dbline 275
; 	   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 L67
	ldi R24,16
	ldi R25,0
	cp R24,R4
	cpc R25,R5
	brge L67
	.dbline 276
; 	   {
	.dbline 277
; 		   HeadEN =1;
	ldi R24,1
	sts _HeadEN,R24
	.dbline 278
; 		   FileEnd =1;
	sts _FileEnd,R24
	.dbline 279
; 	   }
L67:
	.dbline 280
;    }
L63:
	.dbline 281
;    if(HeadEN ==1)                            //循环检测文件起始标志
	lds R24,_HeadEN
	cpi R24,1
	brne L69
	.dbline 282
;    {
	.dbline 283
;       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 284
;       HeadLoad++;
	lds R24,_HeadLoad
	subi R24,255    ; addi 1
	sts _HeadLoad,R24
	.dbline 285
; 	  if(HeadLoad ==3)
	cpi R24,3
	brne L71
	.dbline 286
; 	  { 
	.dbline 287
; 	     if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
	lds R24,_Head
	cpi R24,76
	brne L73
	lds R24,_Head+1
	cpi R24,69
	brne L73
	lds R24,_Head+2
	cpi R24,68
	brne L73
	.dbline 288
; 		 {
	.dbline 289
; 		     HeadEN =0;
	clr R2
	sts _HeadEN,R2
	.dbline 290
; 			 FileEnd =0;
	sts _FileEnd,R2
	.dbline 291
; 		 }
L73:
	.dbline 292
;       }
L71:
	.dbline 293
L69:
	.dbline -2
L60:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e Disp_Model _Disp_Model fV
;       PFileMax -> R20,R21
;    file_length -> R22,R23
	.even
_Disp_Model::
	xcall push_gset2
	.dbline -1
	.dbline 301
;    }
; }
; /**************************************************
; 
; 			 显示效果处理	 
; 			 
; ****************************************************/
; void Disp_Model(void)
; {   
	.dbline 302
;     unsigned int file_length =0;
	clr R22
	clr R23
	.dbline 306
; 	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 X5
	xjmp L78
X5:
	tst R3
	breq X6
	xjmp L78
X6:
X1:
	.dbline 307
; 	{
	.dbline 308
; 	     switch(DispModel)
	lds R22,_DispModel
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L83
X2:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L84
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L85
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne X7
	xjmp L81
X7:
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	breq L87
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	brne X8
	xjmp L81
X8:
	xjmp L80
X3:
	.dbline 309
; 		 {
L83:
	.dbline 311
; 	        case 0:
; 		    {                //基本显示
	.dbline 312
; 			   PDataYMin =4;
	ldi R24,4
	ldi R25,0
	sts _PDataYMin+1,R25
	sts _PDataYMin,R24
	.dbline 313
; 		   	   PDataYMax =154;
	ldi R24,154
	sts _PDataYMax+1,R25
	sts _PDataYMax,R24
	.dbline 314
; 			   break;
	xjmp L81
L84:
	.dbline 317
; 			}
; 			case 1:
; 		    {             	 //滚屏
	.dbline 318

⌨️ 快捷键说明

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