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

📄 3310_5110lcd.s

📁 5110综合演示 变成结构 流程 头文件
💻 S
📖 第 1 页 / 共 2 页
字号:
;     p=s;
	ldd R20,y+22
	ldd R21,y+23
	.dbline 137
;     LCD_set_XY(X,Y);                             //设置初始位置
	ldd R18,y+12
	ldd R16,y+10
	xcall _LCD_set_XY
	.dbline 139
;     
;     for (i=0;i<num;)
	clr R22
	xjmp L21
L18:
	.dbline 140
;       {
	.dbline 141
;       	for (n=0; n<ch_with*2; n++)              //写一个汉字
	clr R10
	xjmp L25
L22:
	.dbline 142
;       	  { 
	.dbline 143
;       	    if (n==ch_with)                      //写汉字的下半部分
	ldd R0,y+14
	cp R10,R0
	brne L26
	.dbline 144
;       	      {
	.dbline 145
;       	        if (i==0) LCD_set_XY(X,Y+1);
	tst R22
	brne L28
	.dbline 145
	ldd R18,y+12
	subi R18,255    ; addi 1
	ldd R16,y+10
	xcall _LCD_set_XY
	xjmp L29
L28:
	.dbline 147
;       	        else
;       	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
	ldd R18,y+12
	subi R18,255    ; addi 1
	ldd R2,y+14
	add R2,R12
	mul R2,R22
	ldd R16,y+10
	add R16,R0
	xcall _LCD_set_XY
L29:
	.dbline 148
;               }
L26:
	.dbline 149
	ldi R18,1
	mov R2,R14
	add R2,R22
	ldi R24,24
	mul R24,R2
	movw R2,R0
	add R2,R20
	adc R3,R21
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	xcall _LCD_write_byte
	.dbline 150
L23:
	.dbline 141
	inc R10
L25:
	.dbline 141
	ldi R24,2
	ldd R0,y+14
	mul R24,R0
	cp R10,R0
	brlo L22
	.dbline 151
	inc R22
	.dbline 152
	ldd R18,y+12
	ldd R2,y+14
	add R2,R12
	mul R2,R22
	ldd R16,y+10
	add R16,R0
	xcall _LCD_set_XY
	.dbline 153
L19:
	.dbline 139
L21:
	.dbline 139
	ldd R0,y+16
	cp R22,R0
	brlo L18
	.dbline -2
L17:
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pA[24:24]c
	.dbsym r i 22 c
	.dbsym r n 10 c
	.dbsym l s 22 pA[24:24]c
	.dbsym r row 12 c
	.dbsym r line 14 c
	.dbsym l num 16 c
	.dbsym l ch_with 14 c
	.dbsym l Y 12 c
	.dbsym l X 10 c
	.dbend
	.area lit(rom, con, rel)
L31:
	.byte 0
	.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	.word 0,0,0,0,0
	.word 0,0,0,0,0
	.byte 0,0,0
L32:
	.byte 0
	.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	.word 0,0,0,0,0
	.word 0,0,0,0,0
	.byte 0,0,0
	.area text(rom, con, rel)
	.dbfile D:\avrvi\democode\5110_综合演示\source\lib\3310_5110LCD.c
	.dbfunc e LCD_move_chinese_string _LCD_move_chinese_string fV
;              p -> R20,R21
;              i -> R22
;              j -> R10
;       buffer_l -> y+84
;       buffer_h -> y+0
;              n -> R12
;              s -> y+184
;              T -> R14
;              Y -> y+180
;              X -> y+178
	.even
_LCD_move_chinese_string::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,63
	sbiw R28,63
	sbiw R28,42  ; offset = 168
	movw R30,R28
	subi R30,74  ; addi 182
	sbci R31,255
	ldd R14,z+0
	.dbline -1
	.dbline 167
;       	    LCD_write_byte(*(*(p+(line+i))+n),1);
;       	  }
;       	i++;
;       	LCD_set_XY((X+(ch_with+row)*i),Y);
;       }
;   }
; /*************************************************************************
; ** 函数名称: LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
; ** 功能描述: 汉字移动
; ** 输 入: X、Y  :显示汉字的起始X、Y坐标;
;            T     :移动速度;
; ** 输出	 : 
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
;   {
	.dbline 168
;     unsigned char i,n,j=0,(*p)[24];
	clr R10
	.dbline 169
;     unsigned char buffer_h[84]={0};
	ldi R24,<L31
	ldi R25,>L31
	movw R30,R28
	ldi R16,84
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 170
;     unsigned char buffer_l[84]={0};
	ldi R24,<L32
	ldi R25,>L32
	movw R30,R28
	subi R30,172  ; offset = 84
	sbci R31,255
	ldi R16,84
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 171
;     p=s;
	movw R30,R28
	subi R30,72  ; addi 184
	sbci R31,255
	ldd R20,z+0
	ldd R21,z+1
	.dbline 172
;     for (i=0; i<156; i++)
	clr R22
	xjmp L36
L33:
	.dbline 173
;       {
	.dbline 174
;         buffer_h[83] = *(*(p+(i/12))+j);
	ldi R17,12
	mov R16,R22
	xcall div8u
	ldi R24,24
	mul R24,R16
	movw R2,R0
	add R2,R20
	adc R3,R21
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	movw R30,R28
	subi R30,173  ; addi 83
	sbci R31,255
	std z+0,R2
	.dbline 175
;         buffer_l[83] = *(*(p+(i/12))+(j+12));
	ldi R17,12
	mov R16,R22
	xcall div8u
	ldi R24,24
	mul R24,R16
	movw R2,R0
	add R2,R20
	adc R3,R21
	mov R30,R10
	clr R31
	adiw R30,12
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	movw R30,R28
	subi R30,89  ; addi 167
	sbci R31,255
	std z+0,R2
	.dbline 176
; 		j++;
	inc R10
	.dbline 177
;         if (j==12) j=0;
	mov R24,R10
	cpi R24,12
	brne L39
	.dbline 177
	clr R10
L39:
	.dbline 179
;         
;         for (n=0; n<83; n++)
	clr R12
	xjmp L44
L41:
	.dbline 180
	.dbline 181
	movw R24,R28
	adiw R24,1
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 182
	movw R24,R28
	subi R24,171  ; offset = 85
	sbci R25,255
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	subi R24,172  ; offset = 84
	sbci R25,255
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 183
L42:
	.dbline 179
	inc R12
L44:
	.dbline 179
	mov R24,R12
	cpi R24,83
	brlo L41
	.dbline 185
;           { 
;             buffer_h[n]=buffer_h[n+1];
;             buffer_l[n]=buffer_l[n+1];
;           } 
;         
;         LCD_set_XY(X,Y);
	movw R30,R28
	subi R30,76  ; addi 180
	sbci R31,255
	ldd R18,z+0
	movw R30,R28
	subi R30,78  ; addi 178
	sbci R31,255
	ldd R16,z+0
	xcall _LCD_set_XY
	.dbline 186
;         for (n=0; n<83; n++)
	clr R12
	xjmp L50
L47:
	.dbline 187
	.dbline 188
	ldi R18,1
	movw R24,R28
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _LCD_write_byte
	.dbline 189
L48:
	.dbline 186
	inc R12
L50:
	.dbline 186
	mov R24,R12
	cpi R24,83
	brlo L47
	.dbline 191
;           { 
;             LCD_write_byte(buffer_h[n],1);
;           } 
;         
;         LCD_set_XY(X,Y+1); 
	movw R30,R28
	subi R30,76  ; addi 180
	sbci R31,255
	ldd R18,z+0
	subi R18,255    ; addi 1
	movw R30,R28
	subi R30,78  ; addi 178
	sbci R31,255
	ldd R16,z+0
	xcall _LCD_set_XY
	.dbline 192
;         for (n=0; n<83; n++)
	clr R12
	xjmp L54
L51:
	.dbline 193
	.dbline 194
	ldi R18,1
	movw R24,R28
	subi R24,172  ; offset = 84
	sbci R25,255
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _LCD_write_byte
	.dbline 195
L52:
	.dbline 192
	inc R12
L54:
	.dbline 192
	mov R24,R12
	cpi R24,83
	brlo L51
	.dbline 197
	mov R16,R14
	clr R17
	xcall _delay_nms
	.dbline 198
L34:
	.dbline 172
	inc R22
L36:
	.dbline 172
	cpi R22,156
	brsh X0
	xjmp L33
X0:
	.dbline -2
L30:
	adiw R28,63
	adiw R28,63
	adiw R28,42  ; offset = 168
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pA[24:24]c
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbsym l buffer_l 84 A[84:84]c
	.dbsym l buffer_h 0 A[84:84]c
	.dbsym r n 12 c
	.dbsym l s 184 pA[24:24]c
	.dbsym r T 14 c
	.dbsym l Y 180 c
	.dbsym l X 178 c
	.dbend
	.dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
;            row -> R20
;              n -> R22,R23
;              i -> R14,R15
;          Pix_y -> y+18
;          Pix_x -> R10
;            map -> R12,R13
;              Y -> y+12
;              X -> y+10
	.even
_LCD_draw_bmp_pixel::
	xcall push_arg4
	xcall push_gset5
	ldd R12,y+14
	ldd R13,y+15
	ldd R10,y+16
	.dbline -1
	.dbline 214
;           { 
;             LCD_write_byte(buffer_l[n],1);
;           }
;           
;        delay_nms(T);
;       }
;   }
; /*************************************************************************
; ** 函数名称: LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
; ** 功能描述: 位图绘制函数
; ** 输 入: X、Y    :位图绘制的起始X、Y坐标;
;            *map    :位图点阵数据;
;            Pix_x   :位图像素(长)
;            Pix_y   :位图像素(宽)
; ** 输出	 : 
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
;   {
	.dbline 218
;     unsigned int i,n;
;     unsigned char row;
;     
;     if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
	ldi R17,8
	ldd R16,y+18
	xcall mod8u
	tst R16
	brne L56
	.dbline 218
	ldd R20,y+18
	lsr R20
	lsr R20
	lsr R20
	xjmp L57
L56:
	.dbline 219
;       else row=Pix_y/8+1;
	ldd R20,y+18
	lsr R20
	lsr R20
	lsr R20
	subi R20,255    ; addi 1
L57:
	.dbline 221
;     
;     for (n=0;n<row;n++)
	clr R22
	clr R23
	xjmp L61
L58:
	.dbline 222
;       {
	.dbline 223
;       	LCD_set_XY(X,Y);
	ldd R18,y+12
	ldd R16,y+10
	xcall _LCD_set_XY
	.dbline 224
;         for(i=0; i<Pix_x; i++)
	clr R14
	clr R15
	xjmp L65
L62:
	.dbline 225
	.dbline 226
	ldi R18,1
	mov R2,R10
	clr R3
	push R18
	push R19
	movw R18,R2
	movw R16,R22
	xcall empy16s
	pop R19
	pop R18
	movw R30,R14
	add R30,R16
	adc R31,R17
	add R30,R12
	adc R31,R13
	ldd R16,z+0
	xcall _LCD_write_byte
	.dbline 227
L63:
	.dbline 224
	movw R24,R14
	adiw R24,1
	movw R14,R24
L65:
	.dbline 224
	mov R2,R10
	clr R3
	cp R14,R2
	cpc R15,R3
	brlo L62
	.dbline 228
	ldd R0,y+12
	inc R0
	std y+12,R0
	.dbline 229
L59:
	.dbline 221
	subi R22,255  ; offset = 1
	sbci R23,255
L61:
	.dbline 221
	mov R2,R20
	clr R3
	cp R22,R2
	cpc R23,R3
	brlo L58
	.dbline -2
L55:
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r row 20 c
	.dbsym r n 22 i
	.dbsym r i 14 i
	.dbsym l Pix_y 18 c
	.dbsym r Pix_x 10 c
	.dbsym r map 12 pc
	.dbsym l Y 12 c
	.dbsym l X 10 c
	.dbend
	.dbfunc e LCD_write_byte _LCD_write_byte fV
;        command -> R18
;           data -> R16
	.even
_LCD_write_byte::
	.dbline -1
	.dbline 243
;           {
;             LCD_write_byte(map[i+n*Pix_x], 1);
;           }
;         Y++;                         //换行
;       }
;   }
; /*************************************************************************
; ** 函数名称: LCD_write_byte(unsigned char data, unsigned char command)
; ** 功能描述: 使用SPI接口写数据到LCD
; ** 输 入: data    :写入的数据;
;            command :写数据/命令选择;
; ** 输出	 : 
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void LCD_write_byte(unsigned char data, unsigned char command)
;   {
	.dbline 244
;     PORTB &= ~LCD_CE ;		        // 使能LCD
	cbi 0x18,4
	.dbline 246
;     
;     if (command == 0)
	tst R18
	brne L67
	.dbline 247
;       PORTB &= ~LCD_DC ;	        // 传送命令
	cbi 0x18,3
	xjmp L68
L67:
	.dbline 249
;     else
;       PORTB |= LCD_DC ;		        // 传送数据
	sbi 0x18,3
L68:
	.dbline 251
; 
;     SPDR = data;			// 传送数据到SPI寄存器
	out 0xf,R16
L69:
	.dbline 253
L70:
	.dbline 253
; 
;     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
	sbis 0xe,7
	rjmp L69
	.dbline 255
; 	
;     PORTB |= LCD_CE ;			// 关闭LCD
	sbi 0x18,4
	.dbline -2
L66:
	.dbline 0 ; func end
	ret
	.dbsym r command 18 c
	.dbsym r data 16 c
	.dbend

⌨️ 快捷键说明

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