📄 font16_16.s
字号:
.module FONT16_16.C
.area lit(rom, con, rel)
_FONT16x16::
.byte 0,0
.byte 127,248
.byte 126,252
.byte 'x,30
.byte 'x,14
.byte 'x,14
.byte 'x,30
.byte 'x,60
.byte 'y,240
.byte 127,224
.byte 126,0
.byte 124,0
.byte 124,0
.byte 124,0
.byte 126,0
.byte 127,0
.byte 0,0
.byte 'x,30
.byte 124,62
.byte 124,62
.byte 124,62
.byte 124,62
.byte 126,126
.byte 126,126
.byte 'z,126
.byte 's,206
.byte 's,206
.byte 's,206
.byte 's,206
.byte 's,206
.byte 'a,134
.byte 'a,134
.byte 0,0
.byte 3,192
.byte 15,240
.byte 62,252
.byte 124,30
.byte 124,14
.byte 62,0
.byte 31,128
.byte 3,240
.byte 0,252
.byte 0,62
.byte 'x,60
.byte 60,60
.byte 60,'x
.byte 31,240
.byte 3,192
.dbfile G:\IccPro\mega128_lcd\FONT16_16.C
.dbsym e FONT16x16 _FONT16x16 A[96:3:32]kc
_FONT16x16_TAB::
.byte 'P,'M,'S,0
.dbsym e FONT16x16_TAB _FONT16x16_TAB A[4:4]kc
.area text(rom, con, rel)
.dbfile G:\IccPro\mega128_lcd\FONT16_16.C
.dbfunc e GUI_PutChar16_16 _GUI_PutChar16_16 fc
; i -> R20
; temp -> R22
; k -> R10
; font_dat -> R14
; bakc -> y+1
; j -> R12
; ch -> y+16
; y -> y+14
; x -> y+12
.even
_GUI_PutChar16_16::
xcall push_arg4
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 79
; /****************************************************************************************
; * 文件名:FONT16_16.H
; * 功能:16*16 ASCII码字体显示函数。(头文件)
; * 作者:韩茂琨
; * 日期:2007.01.9
; * 备注:使用GUI_SetColor()函数设置前景颜色及背景色。
; ****************************************************************************************/
; #include "config.h"
;
; //#if FONT16x16_EN == 1
;
; /* 16*16字体定义 */
; const uint8 FONT16x16[][32] = {
; /* P */
; {
; ________,________,
; _XXXXXXX,XXXXX___,
; _XXXXXX_,XXXXXX__,
; _XXXX___,___XXXX_,
; _XXXX___,____XXX_,
; _XXXX___,____XXX_,
; _XXXX___,___XXXX_,
; _XXXX___,__XXXX__,
; _XXXX__X,XXXX____,
; _XXXXXXX,XXX_____,
; _XXXXXX_,________,
; _XXXXX__,________,
; _XXXXX__,________,
; _XXXXX__,________,
; _XXXXXX_,________,
; _XXXXXXX,________}
; ,{
; ________,________,
; _XXXX___,___XXXX_,
; _XXXXX__,__XXXXX_,
; _XXXXX__,__XXXXX_,
; _XXXXX__,__XXXXX_,
; _XXXXX__,__XXXXX_,
; _XXXXXX_,_XXXXXX_,
; _XXXXXX_,_XXXXXX_,
; _XXXX_X_,_XXXXXX_,
; _XXX__XX,XX__XXX_,
; _XXX__XX,XX__XXX_,
; _XXX__XX,XX__XXX_,
; _XXX__XX,XX__XXX_,
; _XXX__XX,XX__XXX_,
; _XX____X,X____XX_,
; _XX____X,X____XX_}
; ,{
; ________,________,
; ______XX,XX______,
; ____XXXX,XXXX____,
; __XXXXX_,XXXXXX__,
; _XXXXX__,___XXXX_,
; _XXXXX__,____XXX_,
; __XXXXX_,________,
; ___XXXXX,X_______,
; ______XX,XXXX____,
; ________,XXXXXX__,
; ________,__XXXXX_,
; _XXXX___,__XXXX__,
; __XXXX__,__XXXX__,
; __XXXX__,_XXXX___,
; ___XXXXX,XXXX____,
; ______XX,XX______}
; };
; /* ASCII码字符字模检索表 */
; const char FONT16x16_TAB[]="PMS";
; /****************************************************************************
; * 名称:GUI_PutChar16_16()
; * 功能:显示ASCII码(16*16字体),显示值为'0'-'9'、'.'、'+'、'-'及':'(若为其它值,则显示' ')。
; * 入口参数: x 指定显示位置,x坐标
; * y 指定显示位置,y坐标
; * ch 要显示的ASCII码值。
; * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; uint8 GUI_PutChar16_16(uint32 x, uint32 y, uint8 ch)
; { uint8 font_dat;
.dbline 84
; uint8 i, j, k, temp;
; TCOLOR bakc;
;
; /* 参数过滤 */
; if( x>=(GUI_LCM_XMAX-8) ) return(0);
ldd R24,y+12
ldd R25,y+13
cpi R24,120
ldi R30,0
cpc R25,R30
brlo L8
.dbline 84
clr R16
xjmp L7
L8:
.dbline 85
; if( y>=(GUI_LCM_YMAX-8) ) return(0);
ldd R24,y+14
ldd R25,y+15
cpi R24,56
ldi R30,0
cpc R25,R30
brlo L10
.dbline 85
clr R16
xjmp L7
L10:
.dbline 86
; for(k=0; k<14; k++)
clr R10
xjmp L15
L12:
.dbline 87
; { if(FONT16x16_TAB[k]==ch) break;
.dbline 87
ldi R24,<_FONT16x16_TAB
ldi R25,>_FONT16x16_TAB
mov R30,R10
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
ldd R0,y+16
cp R30,R0
brne L16
.dbline 87
xjmp L14
L16:
.dbline 88
L13:
.dbline 86
inc R10
L15:
.dbline 86
mov R24,R10
cpi R24,14
brlo L12
L14:
.dbline 89
; }
; ch = k;
std y+16,R10
.dbline 90
; for(i=0; i<16; i++)
clr R20
xjmp L21
L18:
.dbline 91
; { /* 读取点阵数据 */
.dbline 92
; for(k=0; k<2; k++)
clr R10
xjmp L25
L22:
.dbline 93
; {
.dbline 94
; temp = i*2 + k;
ldi R24,2
mul R24,R20
mov R22,R0
add R22,R10
.dbline 95
; font_dat = FONT16x16[ch][temp];
ldi R24,32
ldd R0,y+16
mul R24,R0
movw R2,R0
ldi R24,<_FONT16x16
ldi R25,>_FONT16x16
add R2,R24
adc R3,R25
mov R30,R22
clr R31
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 96
; for(j=0; j<8; j++)
clr R12
xjmp L29
L26:
.dbline 97
; { /* 设置相应的点为color或为back_color */
.dbline 98
; if( (font_dat&DCB2HEX_TAB[j])==0 ) GUI_CopyColor(&bakc, back_color);
ldi R24,<_DCB2HEX_TAB
ldi R25,>_DCB2HEX_TAB
mov R30,R12
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
mov R2,R14
and R2,R30
brne L30
.dbline 98
lds R2,_back_color
std y+1,R2
xjmp L31
L30:
.dbline 99
; else GUI_CopyColor(&bakc, disp_color);
lds R2,_disp_color
std y+1,R2
L31:
.dbline 100
ldd R2,y+1
std y+0,R2
ldd R18,y+14
ldd R19,y+15
ldd R16,y+12
ldd R17,y+13
xcall _GUI_Point
.dbline 101
ldd R24,y+12
ldd R25,y+13
adiw R24,1
std y+13,R25
std y+12,R24
.dbline 102
L27:
.dbline 96
inc R12
L29:
.dbline 96
mov R24,R12
cpi R24,8
brlo L26
.dbline 103
L23:
.dbline 92
inc R10
L25:
.dbline 92
mov R24,R10
cpi R24,2
brsh X0
xjmp L22
X0:
.dbline 104
ldd R24,y+14
ldd R25,y+15
adiw R24,1
std y+15,R25
std y+14,R24
.dbline 105
ldd R24,y+12
ldd R25,y+13
sbiw R24,16
std y+13,R25
std y+12,R24
.dbline 106
L19:
.dbline 90
inc R20
L21:
.dbline 90
cpi R20,16
brsh X1
xjmp L18
X1:
.dbline 107
; GUI_Point(x, y, bakc);
; x++;
; }
; }
; y++; // 指向下一行
; x -= 16; // 恢复x值
; }
; return(1);
ldi R16,1
.dbline -2
L7:
adiw R28,2
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r temp 22 c
.dbsym r k 10 c
.dbsym r font_dat 14 c
.dbsym l bakc 1 c
.dbsym r j 12 c
.dbsym l ch 16 c
.dbsym l y 14 i
.dbsym l x 12 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -