📄 main.s
字号:
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 + -