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

📄 main.s

📁 meg16 的所有功能实例
💻 S
📖 第 1 页 / 共 3 页
字号:
L28:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Y 22 c
	.dbsym r X 20 c
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;           line -> R20
;              c -> R22
	.even
_LCD_write_char::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 108
; }
; /********************************************************************************************************************/
; void LCD_write_char(unsigned char c)
; {
	.dbline 111
;     unsigned char line;
; 	
;     c -= 32;
	subi R22,32
	.dbline 112
;     for (line=0; line<6; line++)
	clr R20
	xjmp L33
L30:
	.dbline 113
	.dbline 114
	ldi R18,1
	ldi R24,6
	mul R24,R22
	movw R2,R0
	ldi R24,<_font6x8
	ldi R25,>_font6x8
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _LCD_write_byte
	.dbline 115
L31:
	.dbline 112
	inc R20
L33:
	.dbline 112
	cpi R20,6
	brlo L30
	.dbline -2
L29:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r line 20 c
	.dbsym r c 22 c
	.dbend
	.dbfunc e LCD_write_english_string _LCD_write_english_string fV
;              s -> R20,R21
;              Y -> R10
;              X -> R22
	.even
_LCD_write_english_string::
	xcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 125
; 	{
;         LCD_write_byte(font6x8[c][line], 1);
; 	}
; }
; /********************************************************************************************************************/
; /*-----------------------------------------------------------------------
; LCD_write_english_String  : 英文字符串显示函数
; 
; 输入参数:*s      :英文字符串指针;
;           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
; -----------------------------------------------------------------------*/
; void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
; {
	.dbline 126
;     LCD_set_XY(X,Y);
	mov R18,R10
	mov R16,R22
	xcall _LCD_set_XY
	xjmp L36
L35:
	.dbline 128
	.dbline 129
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_write_char
	.dbline 130
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 131
L36:
	.dbline 127
;     while (*s) 
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L35
	.dbline -2
L34:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbsym r Y 10 c
	.dbsym r X 22 c
	.dbend
	.dbfunc e LCD_write_chinese_string _LCD_write_chinese_string fV
;              i -> R20
;              n -> R14
;            row -> R10
;           line -> R12
;            num -> R22
;        ch_with -> y+14
;              Y -> y+12
;              X -> y+10
	.even
_LCD_write_chinese_string::
	xcall push_arg4
	xcall push_gset5
	ldd R22,y+16
	ldd R12,y+18
	ldd R10,y+20
	.dbline -1
	.dbline 144
;     {
; 	    LCD_write_char(*s);
; 	    s++;
;     }
; }
; /********************************************************************************************************************/
; /*-----------------------------------------------------------------------
; LCD_write_chinese_string: 在LCD上显示汉字
; 
; 输入参数:X、Y    :显示汉字的起始X、Y坐标;
;           ch_with :汉字点阵的宽度
;           num     :显示汉字的个数;  
;           line    :汉字点阵数组中的起始行数
;           row     :汉字显示的行间距
; -----------------------------------------------------------------------*/                        
; void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row)
; {
	.dbline 147
;     unsigned char i,n;
;     
;     LCD_set_XY(X,Y);                             //设置初始位置
	ldd R18,y+12
	ldd R16,y+10
	xcall _LCD_set_XY
	.dbline 149
;     
;     for (i=0;i<num;)
	clr R20
	xjmp L42
L39:
	.dbline 150
;     {
	.dbline 151
;       	for (n=0; n<ch_with*2; n++)              //写一个汉字
	clr R14
	xjmp L46
L43:
	.dbline 152
;       	{ 
	.dbline 153
;       	    if (n==ch_with)                      //写汉字的下半部分
	ldd R0,y+14
	cp R14,R0
	brne L47
	.dbline 154
;       	    {
	.dbline 155
;       	        if (i==0) LCD_set_XY(X,Y+1);
	tst R20
	brne L49
	.dbline 155
	ldd R18,y+12
	subi R18,255    ; addi 1
	ldd R16,y+10
	xcall _LCD_set_XY
	xjmp L50
L49:
	.dbline 157
;       	        else
; 				{
	.dbline 158
;       	           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,R10
	mul R2,R20
	ldd R16,y+10
	add R16,R0
	xcall _LCD_set_XY
	.dbline 159
; 				}
L50:
	.dbline 160
;             }
L47:
	.dbline 161
	ldi R18,1
	mov R2,R12
	add R2,R20
	ldi R24,24
	mul R24,R2
	movw R2,R0
	ldi R24,<_HZK
	ldi R25,>_HZK
	add R2,R24
	adc R3,R25
	mov R30,R14
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _LCD_write_byte
	.dbline 162
L44:
	.dbline 151
	inc R14
L46:
	.dbline 151
	ldi R24,2
	ldd R0,y+14
	mul R24,R0
	cp R14,R0
	brlo L43
	.dbline 163
	inc R20
	.dbline 164
	ldd R18,y+12
	ldd R2,y+14
	add R2,R10
	mul R2,R20
	ldd R16,y+10
	add R16,R0
	xcall _LCD_set_XY
	.dbline 165
L40:
	.dbline 149
L42:
	.dbline 149
	cp R20,R22
	brsh X3
	xjmp L39
X3:
	.dbline -2
L38:
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 14 c
	.dbsym r row 10 c
	.dbsym r line 12 c
	.dbsym r num 22 c
	.dbsym l ch_with 14 c
	.dbsym l Y 12 c
	.dbsym l X 10 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 177
;       	    LCD_write_byte(HZK[line+i][n],1);
;       	}
;       	i++;
;       	LCD_set_XY((X+(ch_with+row)*i),Y);
;     }
; }
; /********************************************************************************************************************/
; /*-----------------------------------------------------------------------
; LCD_draw_map      : 位图绘制函数
; 
; 输入参数: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 181
;     unsigned int i,n;
;     unsigned char row;
;     
;     if (Pix_y%8==0)
	ldi R17,8
	ldd R16,y+18
	xcall mod8u
	tst R16
	brne L52
	.dbline 182
; 	{
	.dbline 183
; 	    row=Pix_y/8;      //计算位图所占行数
	ldd R20,y+18
	lsr R20
	lsr R20
	lsr R20
	.dbline 184
;     }
	xjmp L53
L52:
	.dbline 186
;     else
; 	{
	.dbline 187
;         row=Pix_y/8+1;
	ldd R20,y+18
	lsr R20
	lsr R20
	lsr R20
	subi R20,255    ; addi 1
	.dbline 188
;     }
L53:
	.dbline 189
;     for (n=0;n<row;n++)
	clr R22
	clr R23
	xjmp L57
L54:
	.dbline 190
;     {
	.dbline 191
;       	LCD_set_XY(X,Y);
	ldd R18,y+12
	ldd R16,y+10
	xcall _LCD_set_XY
	.dbline 192
;         for(i=0; i<Pix_x; i++)
	clr R14
	clr R15
	xjmp L61
L58:
	.dbline 193
	.dbline 194
	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 195
L59:
	.dbline 192
	movw R24,R14
	adiw R24,1
	movw R14,R24
L61:
	.dbline 192
	mov R2,R10
	clr R3
	cp R14,R2
	cpc R15,R3
	brlo L58
	.dbline 196
	ldd R0,y+12
	inc R0
	std y+12,R0
	.dbline 197
L55:
	.dbline 189
	subi R22,255  ; offset = 1
	sbci R23,255
L57:
	.dbline 189
	mov R2,R20
	clr R3
	cp R22,R2
	cpc R23,R3
	brlo L54
	.dbline -2
L51:
	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
;              i -> R20
;        command -> R18
;            dat -> R16
	.even
_LCD_write_byte::
	xcall push_gset1
	.dbline -1
	.dbline 207
;           {
;             LCD_write_byte(map[i+n*Pix_x], 1);
;           }
;         Y++;                         //换行
;     }      
; }
; /********************************************************************************************************************/
; /*-----------------------------------------------------------------------
; LCD_write_byte    : 写数据到LCD
; 
; 输入参数:data    :写入的数据;
;           command :写数据/命令选择;
; -----------------------------------------------------------------------*/
; void LCD_write_byte(unsigned char dat, unsigned char command)
; {
	.dbline 210
;     unsigned char i;
; 
; 	CLEARBIT(LCD_PORT,LCD_CE);// 使能LCD_CE = 0
	cbi 0x18,4
	.dbline 212
;     
;     if (command == 0)
	tst R18
	brne L63
	.dbline 213
; 	{
	.dbline 214
; 	    CLEARBIT(LCD_PORT,LCD_DC);// 传送命令 LCD_DC = 0;
	cbi 0x18,6
	.dbline 215
; 	}
	xjmp L64
L63:
	.dbline 217
;     else
; 	{
	.dbline 218
; 	    SETBIT(LCD_PORT,LCD_DC);// 传送数据LCD_DC = 1;
	sbi 0x18,6
	.dbline 219
; 	}
L64:
	.dbline 221
; 	
; 	for(i=0;i<8;i++)
	clr R20
	xjmp L68
L65:
	.dbline 222
; 	{
	.dbline 223
; 		if(dat&0x80)
	sbrs R16,7
	rjmp L69
	.dbline 224
; 		{
	.dbline 225
; 			SETBIT(LCD_PORT,SDIN);//SDIN = 1;
	sbi 0x18,5
	.dbline 226
; 		}
	xjmp L70
L69:
	.dbline 228
; 		else
; 		{
	.dbline 229
; 			CLEARBIT(LCD_PORT,SDIN);//SDIN = 0;
	cbi 0x18,5
	.dbline 230
; 		}
L70:
	.dbline 231
	cbi 0x18,7
	.dbline 232
	lsl R16
	.dbline 233
	sbi 0x18,7
	.dbline 234
L66:
	.dbline 221
	inc R20
L68:
	.dbline 221
	cpi R20,8
	brlo L65
	.dbline 235
; 		CLEARBIT(LCD_PORT,SCLK);//SCLK = 0;
; 		dat = dat << 1;
; 		SETBIT(LCD_PORT,SCLK);//SCLK = 1;
; 	}
;     SETBIT(LCD_PORT,LCD_CE);//LCD_CE = 1;
	sbi 0x18,4
	.dbline -2
L62:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r command 18 c
	.dbsym r dat 16 c
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c
L16:
	.blkb 4
	.area idata
	.byte 'c,'o,'m,0
	.area data(ram, con, rel)
	.dbfile D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c
L15:
	.blkb 9
	.area idata
	.byte 'a,'d,'e,'m,'b,'e,'d,46,0
	.area data(ram, con, rel)
	.dbfile D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c
L14:
	.blkb 5
	.area idata
	.byte 'w,'w,'w,46,0
	.area data(ram, con, rel)
	.dbfile D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c
L13:
	.blkb 15
	.area idata
	.byte 45,45,45,'A,'D,'E,'m,'b,'e,'d,45,45,45,45,0
	.area data(ram, con, rel)
	.dbfile D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c

⌨️ 快捷键说明

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