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

📄 main.s

📁 12864液晶不带字库的各种刷屏显示方式
💻 S
📖 第 1 页 / 共 5 页
字号:
; 
; #define DISP_ON 0xAf
; #define DISP_OFF 0xAe
; #define COL_ADDRESS  0xB0//列首地址
; #define PAGE_ADDRESS 0xB0//业首地址
; //#define START_LINE 0xc0//启始行 
; 
; unsigned char col_address;//列地址
; unsigned char page_address;//页地址
; 
; unsigned char lcd_ram_12864[8][128];//刷屏缓冲区8*128
; 
; 
; 
; 
; 
; 
; 
; 
; /***********************************************************************
; /*直接写入lcd12864数据区方式
; /**********************************************************************/
; void Hz_Display16x16_12864//指定位置显示汉字16*16
; 			(
; 				unsigned char y, //显示的Y坐标
; 			  	unsigned char x, //显示的X坐标
; 			  	unsigned char const *p
; 			 )
; {
	.dbline 79
; 	unsigned char j,i ;
; 	for(j=0;j<2;j++)
	clr R20
	xjmp L47
L44:
	.dbline 80
; 	{
	.dbline 81
; 			Write_Com_12864(PAGE_ADDRESS+y+j);//写入汉字显示地址
	mov R16,R10
	subi R16,80    ; addi 176
	add R16,R20
	xcall _Write_Com_12864
	.dbline 82
; 			Write_Com_12864(0x10|((x&0xf0)>>4));
	mov R16,R22
	andi R16,240
	swap R16
	andi R16,#0x0F
	ori R16,16
	xcall _Write_Com_12864
	.dbline 83
; 			Write_Com_12864(0x00|(x&0x0f));
	mov R16,R22
	andi R16,15
	xcall _Write_Com_12864
	.dbline 84
; 			for(i=0;i<16;i++) 
	clr R12
	xjmp L51
L48:
	.dbline 85
; 			{
	.dbline 86
; 				Write_Data_12864(p[16*j+i]);
	ldi R24,16
	mul R24,R20
	movw R30,R0
	mov R2,R12
	clr R3
	add R30,R2
	adc R31,R3
	ldd R0,y+8
	ldd R1,y+9
	add R30,R0
	adc R31,R1
	elpm R16,Z
	xcall _Write_Data_12864
	.dbline 87
; 			}
L49:
	.dbline 84
	inc R12
L51:
	.dbline 84
	mov R24,R12
	cpi R24,16
	brlo L48
X8:
	.dbline 88
; 	}
L45:
	.dbline 79
	inc R20
L47:
	.dbline 79
	cpi R20,2
	brlo L44
X9:
	.dbline -2
L43:
	.dbline 0 ; func end
	xjmp pop_xgsetF03C
	.dbsym r j 20 c
	.dbsym r i 12 c
	.dbsym l p 8 pkc
	.dbsym r x 22 c
	.dbsym r y 10 c
	.dbend
	.dbfunc e Lcd_Ascii8x16_12864 _Lcd_Ascii8x16_12864 fV
;        cow_num -> R22
;          sizeb -> R12
;              j -> R10
;              k -> R20
;              i -> R14
;              p -> y+14
;              x -> y+12
;              y -> y+10
	.even
_Lcd_Ascii8x16_12864::
	xcall push_arg4
	xcall push_xgsetF0FC
	.dbline -1
	.dbline 97
; }
; 
; void Lcd_Ascii8x16_12864//指定位置显示字符8*16
; 			(
; 				unsigned char y, //显示的Y坐标
; 			  	unsigned char x, //显示的X坐标
; 			  	unsigned char *p//字符指针 
; 			 )
; {
	.dbline 98
; 	unsigned char j=0,i=0,k=0;
	clr R10
	.dbline 98
	clr R14
	.dbline 98
	clr R20
	.dbline 99
; 	unsigned char sizeb=0,cow_num;
	clr R12
	xjmp L54
L53:
	.dbline 101
; 	while(*(p+sizeb) != '\0')//字符串长度
; 	{
	.dbline 102
; 		sizeb++;
	inc R12
	.dbline 103
; 	}
L54:
	.dbline 100
	mov R30,R12
	clr R31
	ldd R0,y+14
	ldd R1,y+15
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	tst R2
	brne L53
X10:
	.dbline 104
; 	cow_num = sizeb/16+2;
	mov R22,R12
	swap R22
	andi R22,#0x0F
	subi R22,254    ; addi 2
	.dbline 105
; 	for(j=0;j<cow_num;j++)//字符高度为16 需要刷新2行
	clr R10
	xjmp L59
L56:
	.dbline 106
; 	{
	.dbline 107
; 		Write_Com_12864(PAGE_ADDRESS+y+j);//写入显示地址
	ldd R16,y+10
	subi R16,80    ; addi 176
	add R16,R10
	xcall _Write_Com_12864
	.dbline 108
; 		Write_Com_12864(0x10|((x&0xf0)>>4));
	ldd R16,y+12
	andi R16,240
	swap R16
	andi R16,#0x0F
	ori R16,16
	xcall _Write_Com_12864
	.dbline 109
; 		Write_Com_12864(0x00|(x&0x0f));
	ldd R16,y+12
	andi R16,15
	xcall _Write_Com_12864
	.dbline 110
; 		for(k=0;k<sizeb;k++)//纵向的总的长度
	clr R20
	xjmp L63
L60:
	.dbline 111
; 		{
	.dbline 112
; 			for(i=0;i<8;i++)//一个字符纵向8 次 
	clr R14
	xjmp L67
L64:
	.dbline 113
; 			{
	.dbline 114
; 				Write_Data_12864(asciidot8x16[*(p+k)-0x20][8*j+i]);
	mov R30,R20
	clr R31
	ldd R0,y+14
	ldd R1,y+15
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldi R24,16
	mul R24,R2
	movw R2,R0
	ldi R24,<_asciidot8x16-512
	ldi R25,>_asciidot8x16-512
	add R2,R24
	adc R3,R25
	mov R4,R14
	clr R5
	mov R30,R10
	clr R31
	lsl R30
	rol R31
	lsl R30
	rol R31
	lsl R30
	rol R31
	add R30,R4
	adc R31,R5
	add R30,R2
	adc R31,R3
	elpm R16,Z
	xcall _Write_Data_12864
	.dbline 115
; 			}
L65:
	.dbline 112
	inc R14
L67:
	.dbline 112
	mov R24,R14
	cpi R24,8
	brlo L64
X11:
	.dbline 116
; 		}
L61:
	.dbline 110
	inc R20
L63:
	.dbline 110
	cp R20,R12
	brlo L60
X12:
	.dbline 117
; 	}
L57:
	.dbline 105
	inc R10
L59:
	.dbline 105
	cp R10,R22
	brsh X14
	xjmp L56
X14:
X13:
	.dbline -2
L52:
	.dbline 0 ; func end
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r cow_num 22 c
	.dbsym r sizeb 12 c
	.dbsym r j 10 c
	.dbsym r k 20 c
	.dbsym r i 14 c
	.dbsym l p 14 pc
	.dbsym l x 12 c
	.dbsym l y 10 c
	.dbend
	.dbfunc e Ram_12864 _Ram_12864 fV
;              i -> R20
;              j -> R22
	.even
_Ram_12864::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 127
; }
; /*************************************************************************/
; 
; 
; 
; /*************************************************************************/
; /*写入单片机RAM缓冲区刷屏方式
; /*************************************************************************/
; void Ram_12864(void)//刷屏
; {
	.dbline 129
; 	unsigned char i,j;
; 	for(i=0;i<8;i++)
	clr R20
	xjmp L73
L70:
	.dbline 130
; 	{
	.dbline 131
; 		Write_Com_12864(0X10);//SET COLUMN ADDRESS = 0X00 UPPER-4BIT 
	ldi R16,16
	xcall _Write_Com_12864
	.dbline 132
; 		Write_Com_12864(0X00);//SET COLUMN ADDRESS = 0X00 LOWER-4BIT 
	clr R16
	xcall _Write_Com_12864
	.dbline 133
; 		Write_Com_12864(0xB0|(i&0X0F));
	mov R16,R20
	andi R16,15
	ori R16,176
	xcall _Write_Com_12864
	.dbline 134
; 		for(j=0;j<128;j++)
	clr R22
	xjmp L77
L74:
	.dbline 135
; 		{
	.dbline 136
; 			Write_Data_12864(lcd_ram_12864[i][j]);
	ldi R24,128
	mul R24,R20
	movw R2,R0
	ldi R24,<_lcd_ram_12864
	ldi R25,>_lcd_ram_12864
	add R2,R24
	adc R3,R25
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	xcall _Write_Data_12864
	.dbline 137
; 		}
L75:
	.dbline 134
	inc R22
L77:
	.dbline 134
	cpi R22,128
	brlo L74
X15:
	.dbline 139
; 
; 	}
L71:
	.dbline 129
	inc R20
L73:
	.dbline 129
	cpi R20,8
	brlo L70
X16:
	.dbline -2
L69:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e Ram_Ascii8x16_12864 _Ram_Ascii8x16_12864 fV
;        cow_num -> <dead>
;          sizeb -> R10
;              i -> R20
;              j -> R14
;              k -> R22
;              p -> R12,R13
;              x -> y+12
;              y -> y+10
	.even
_Ram_Ascii8x16_12864::
	xcall push_arg4
	xcall push_xgsetF0FC
	ldd R12,y+14
	ldd R13,y+15
	.dbline -1
	.dbline 148
; }
; 
; void Ram_Ascii8x16_12864//指定位置显示字符串8*16 到ram
; 			(
; 				unsigned char y, //显示的Y坐标
; 			  	unsigned char x, //显示的X坐标
; 			  	unsigned char *p//字符指针 
; 			 )
; {
	.dbline 149
; 	unsigned char j=0,i=0,k=0;
	clr R14
	.dbline 149
	clr R20
	.dbline 149
	clr R22
	.dbline 150
; 	unsigned char sizeb=0,cow_num;
	clr R10
	xjmp L80
L79:
	.dbline 152
; 	while(*(p+sizeb) != '\0')//字符串长度
; 	{
	.dbline 153
; 		sizeb++;
	inc R10
	.dbline 154
; 	}
L80:
	.dbline 151
	mov R30,R10
	clr R31
	add R30,R12
	adc R31,R13
	ldd R2,z+0
	tst R2
	brne L79
X17:
	.dbline 156
; 	//cow_num = sizeb/16+2;
; 	for(i=0;i<2;i++)
	clr R20
	xjmp L85
L82:
	.dbline 157
; 	{
	.dbline 158
; 		for(j=0;j<sizeb;j++)
	clr R14
	xjmp L89
L86:
	.dbline 159
; 		{
	.dbline 160
; 			for(k=0;k<8;k++)
	clr R22
	xjmp L93
L90:
	.dbline 161
; 			{
	.dbline 162
; 				lcd_ram_12864[y+i][x+k+8*j] = asciidot8x16[*(p+j)-0x20][k+8*i];
	ldd R2,y+10
	add R2,R20
	ldi R24,128
	mul R24,R2
	movw R2,R0
	ldi R24,<_lcd_ram_12864
	ldi R25,>_lcd_ram_12864
	add R2,R24
	adc R3,R25
	mov R4,R22
	clr R5
	ldd R30,y+12
	clr R31
	add R30,R4
	adc R31,R5
	mov R4,R14
	clr R5
	lsl R4
	rol R5
	lsl R4
	rol R5
	lsl R4
	rol R5
	add R30,R4
	adc R31,R5
	add R30,R2
	adc R31,R3
	mov R26,R14
	clr R27
	add R26,R12
	adc R27,R13
	ld R2,x
	ldi R24,16
	mul R24,R2
	movw R2,R0
	ldi R24,<_asciidot8x16-512
	ldi R25,>_asciidot8x16-512
	add R2,R24
	adc R3,R25
	mov R4,R20
	clr R5
	lsl R4
	rol R5
	lsl R4
	rol R5
	lsl R4
	rol R5
	mov R26,R22
	clr R27
	add R26,R4
	adc R27,R5
	add R26,R2
	adc R27,R3
	st -y,R31
	st -y,R30
	movw R30,R26
	elpm R2,Z
	ld R30,y+
	ld R31,y+
	std z+0,R2
	.dbline 163
; 			}
L91:
	.dbline 160
	inc R22
L93:
	.dbline 160
	cpi R22,8
	brsh X21
	xjmp L90
X21:
X18:
	.dbline 164
; 		}
L87:
	.dbline 158
	inc R14
L89:
	.dbline 158
	cp R14,R10
	brsh X22
	xjmp L86
X22:
X19:
	.dbline 165
; 	}
L83:
	.dbline 156
	inc R20
L85:
	.dbline 156
	cpi R20,2
	brsh X23
	xjmp L82
X23:
X20:
	.dbline 166
; 	Ram_12864();
	xcall _Ram_12864
	.dbline -2
L78:
	.dbline 0 ; func end
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym l cow_num 1 c
	.dbsym r sizeb 10 c
	.dbsym r i 20 c
	.dbsym r j 14 c
	.dbsym r k 22 c
	.dbsym r p 12 pc
	.dbsym l x 12 c
	.dbsym l y 10 c
	.dbend
	.dbfunc e Ram_Hz16x16_12864 _Ram_Hz16x16_12864 fV
;        cow_num -> <dead>
;          sizeb -> R12
;      index_num -> R14
;          lcd_p -> R22,R23
;              i -> R10
;              j -> y+0
;              k -> R20
;              p -> y+15
;              x -> y+13
;              y -> y+11
	.even
_Ram_Hz16x16_12864::
	xcall push_arg4
	xcall push_xgsetF0FC
	sbiw R28,1
	.dbline -1
	.dbline 175
; }
; 
; void Ram_Hz16x16_12864//指定位置显示汉字16*16 到ram
; 			(
; 				unsigned char y, //显示的Y坐标
; 			  	unsigned char x, //显示的X坐标
; 			  	unsigned char *p//字符指针 
; 			 )
; {
	.dbline 176
; 	unsigned char j=0,i=0,k=0;
	clr R0
	std y+0,R0
	.dbline 176
	clr R10
	.dbline 176
	clr R20
	.dbline 177
; 	unsigned char sizeb=0,cow_num;
	clr R12
	.dbline 178
; 	unsigned char index_num =0;//汉字索引号
	clr R14
	xjmp L97
L96:
	.dbline 181
; 	unsigned char const *lcd_p;	
; 	while(*(p+sizeb) != '\0')//字符串长度
; 	{
	.dbline 182
; 		sizeb++;
	inc R12
	.dbline 183
; 	}
L97:
	.dbline 180
	mov R30,R12
	clr R31
	ldd R0,y+15
	ldd R1,y+16
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	tst R2
	brne L96
X24:
	.dbline 184
; 	for(i=0;i<sizeb/2;i++)
	clr R10
	xjmp L102
L103:
	.dbline 188
; 	{
; 		while((*(p+2*i) != GB_16[index_num].Index[0]) //查出索引号
; 			|| (*(p+1+2*i) != GB_16[index_num].Index[1]))
; 		{
	.dbline 189
; 			index_num ++;
	inc R14
	.dbline 190
; 		}
L104:
	.dbline 186
	mov R2,R10
	clr R3
	lsl R2
	rol R3
	movw R4,R2
	ldi R24,34
	mul R24,R14
	movw R6,R0
	ldi R24,<_GB_16
	ldi R25,>_GB_16
	movw R30,R6
	add R30,R24
	adc R31,R25
	elpm R2,Z
	movw R30,R4
	ldd R0,y+15
	ldd R1,y+16
	add R30,R0
	adc R31,R1
	ldd R3,z+0
	cp R3,R2
	brne L103
X25:
	ldi R24,<_GB_16+1
	ldi R25,>_GB_16+1
	movw R30,R6
	add R30,R24
	adc R31,R25
	elpm R2,Z
	movw R24,R0
	adiw R24,1
	movw R30,R4
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	cp R3,R2
	brne L103
X26:
	.dbline 191
; 		lcd_p = GB_16[index_num].Msk;
	ldi R24,34
	mul R24,R14
	movw R22,R0
	ldi R24,<_GB_16+2
	ldi R25,>_GB_16+2
	add R22,R24
	adc R23,R25
	.dbline 192
; 		for(j=0;j<2;j++)//刷新先上后下
	clr R0
	std y+0,R0
	xjmp L111
L108:
	.dbline 193
; 		{
	.dbline 194
; 			for(k=0;k<16;k++)
	clr R20
	xjmp L115
L112:
	.dbline 195
; 			{
	.dbline 196
; 				lcd_ram_12864[y+j][x+k+16*i] = *(lcd_p+k+16*j);
	ldd R2,y+11
	ldd R0,y+0
	add R2,R0
	ldi R24,128
	mul R24,R2
	movw R2,R0
	ldi R24,<_lcd_ram_12864
	ldi R25,>_lcd_ram_12864
	add R2,R24
	adc R3,R25
	ldi R24,16
	mul R24,R10
	mov R4,R20
	clr R5
	ldd R30,y+13
	clr R31
	add R30,R4
	adc R31,R5
	add R30,R0
	adc R31,R1
	add R30,R2
	adc R31,R3
	mov R2,R4
	clr R3
	add R2,R22
	adc R3,R23
	ldd R0,y+0
	mul R24,R0
	movw R26,R0
	add R26,R2
	adc R27,R3
	st -y,R31
	st -y,R30
	movw R30,R26
	elpm R2,Z
	ld R30,y+
	ld R31,y+
	std z+0,R2
	.dbline 197
; 			}
L113:
	.dbline 194
	inc R20
L115:
	.dbline 194
	cpi R20,16
	brlo L112
X27:
	.dbline 198
; 		}
L109:
	.dbline 192
	ldd R0,y+0
	inc R0
	std y+0,R0
L111:
	.dbline 192
	ldd R24,y+0
	cpi R24,2
	brlo L108
X28:
	.dbline 199
; 	}
L100:
	.dbline 184
	inc R10
L102:
	.dbline 184
	mov R2,R12
	lsr R2
	cp R10,R2
	brsh X30
	xjmp L104
X30:
X29:
	.dbline 200
; 	Ram_12864();
	xcall _Ram_12864
	.dbline -2
L95:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym l cow_num 1 c
	.dbsym r sizeb 12 c
	.dbsym r index_num 14 c
	.dbsym r lcd_p 22 pkc
	.dbsym r i 10 c
	.dbsym l j 0 c
	.dbsym r k 20 c
	.dbsym l p 15 pc
	.dbsym l x 13 c
	.dbsym l y 11 c
	.dbend
	.dbfunc e Reverse_16x16_12864 _Reverse_16x16_12864 fV
;              i -> R20
;              j -> R22
;              y -> R10
	.even
_Reverse_16x16_12864::
	xcall push_xgsetF00C
	mov R10,R16
	.dbline -1
	.dbline 204
; }
; 
; void Reverse_16x16_12864(unsigned char y)//反显示一行
; {
	.dbline 205
; 	unsigned char j=0,i=0;
	clr R22
	.dbline 205
	clr R20
	.dbline 206
; 	for(i=0;i<2;i++)
	xjmp L120
L117:
	.dbline 207
; 	{
	.dbline 208
; 		for(j=0;j<128;j++)
	clr R22
	xjmp L124
L121:
	.dbline 209
; 		{
	.dbline 210
; 			lcd_ram_12864[y+i][j] = ~lcd_ram_12864[y+i][j];
	mov R2,R10
	add R2,R20
	ldi R24,128
	mul R24,R2
	movw R2,R0
	ldi R24,<_lcd_ram_12864
	ldi R25,>_lcd_ram_12864
	add R2,R24
	adc R3,R25
	mov R4,R22
	clr R5
	add R4,R2
	adc R5,R3
	movw R30,R4
	ldd R2,z+0
	com R2
	std z+0,R2
	.dbline 211
; 		}
L122:
	.dbline 208
	inc R22
L124:
	.dbline 208
	cpi R22,128
	brlo L121
X31:
	.dbline 212
; 	}
L118:
	.dbline 206
	inc R20
L120:
	.dbline 206
	cpi R20,2
	brlo L117
X32:
	.dbline 213
; 	Ram_12864();
	xcall _Ram_12864
	.dbline -2
L116:
	.dbline 0 ; func en

⌨️ 快捷键说明

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