📄 gui.s
字号:
; for(i = 0; i < En_5x8_XSIZE; i++)
clr R12
xjmp L51
L48:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_5x8
ldi R25,>_chardot_5x8
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
clr R23
ldi R24,255
ldi R25,0
eor R22,R24
eor R23,R25
std y+0,R14
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L49:
inc R12
L51:
mov R24,R12
cpi R24,5
brlo L48
; {
; temp=i+(INT16U)(Char-0x20)*5; //要注意数据范围
; ImgData = chardot_5x8[temp]^0xFF;
; LCD_Display_Locate(ImgData, HZ_X, Y);
; HZ_X++;
; }
; }
xjmp L47
L46:
; else
; {
; for(i=0;i<En_6x12_XSIZE;i++)
clr R12
xjmp L55
L52:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,12
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_6x12
ldi R25,>_chardot_6x12
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
clr R23
ldi R24,255
ldi R25,0
eor R22,R24
eor R23,R25
std y+0,R14
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L53:
inc R12
L55:
mov R24,R12
cpi R24,6
brlo L52
; {
; temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
; ImgData = chardot_6x12[temp]^0xFF;
; LCD_Display_Locate(ImgData, HZ_X, Y);
; HZ_X++;
; }
; HZ_X=X;
ldd R10,y+13
; for(i=En_6x12_XSIZE;i<2*En_6x12_XSIZE;i++)
ldi R24,6
mov R12,R24
xjmp L59
L56:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,12
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_6x12
ldi R25,>_chardot_6x12
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
ldi R24,63
eor R22,R24
mov R24,R14
subi R24,248 ; addi 8
std y+0,R24
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L57:
inc R12
L59:
mov R24,R12
cpi R24,12
brlo L56
; {
; temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
; ImgData = chardot_6x12[temp]^0x3F;//总共12行
; LCD_Display_Locate(ImgData, HZ_X, Y + 8);
; HZ_X++;
; }
; }
L47:
L41:
adiw R28,1
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
; temp -> R20,R21
; ImgData -> R22
; HZ_X -> R10
; i -> R12
; Y -> R14
; X -> y+13
; Char -> y+11
.even
_GUI_Display_ASCII_UnderLine::
xcall push_arg4
xcall push_gset5
sbiw R28,1
ldd R14,y+15
; }
;
; /*****************************************************************************
; * Display_ASCII_UnderLine - 显示一个带有下划线的ASCII
; * @Param X:X轴坐标
; * @Param Y:Y轴坐标
; * @Param Char:ASCII码
; ******************************************************************************/
; void GUI_Display_ASCII_UnderLine(INT8U Char, INT8U X, INT8U Y)
; {
; INT8U i, ImgData;
; INT16U temp;
; INT8U HZ_X;
;
; if(X>=LCD_XSIZE)
ldd R24,y+13
cpi R24,97
brlo L61
; X=X%LCD_XSIZE;
ldi R17,97
mov R16,R24
xcall mod8u
std y+13,R16
L61:
; if(Y>=LCD_YSIZE)
mov R24,R14
cpi R24,68
brlo L63
; Y=Y%LCD_YSIZE;
ldi R17,68
mov R16,R24
xcall mod8u
mov R14,R16
L63:
;
; HZ_X = X;
ldd R10,y+13
; if(GUIEnglishFont == En_5x8)
lds R24,_GUIEnglishFont
cpi R24,1
brne L65
; {
; for(i = 0; i < En_5x8_XSIZE; i++)
clr R12
xjmp L70
L67:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,5
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_5x8
ldi R25,>_chardot_5x8
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
ori R22,128
std y+0,R14
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L68:
inc R12
L70:
mov R24,R12
cpi R24,5
brlo L67
; {
; temp=i+(INT16U)(Char-0x20)*5; //要注意数据范围
; ImgData = chardot_5x8[temp]|0x80;
; LCD_Display_Locate(ImgData, HZ_X, Y);
; HZ_X++;
; }
; }
xjmp L66
L65:
; else
; {
; for(i=0;i<En_6x12_XSIZE;i++)
clr R12
xjmp L74
L71:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,12
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_6x12
ldi R25,>_chardot_6x12
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
std y+0,R14
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L72:
inc R12
L74:
mov R24,R12
cpi R24,6
brlo L71
; {
; temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
; ImgData = chardot_6x12[temp];
; LCD_Display_Locate(ImgData, HZ_X, Y);
; HZ_X++;
; }
; HZ_X=X;
ldd R10,y+13
; for(i=En_6x12_XSIZE;i<2*En_6x12_XSIZE;i++)
ldi R24,6
mov R12,R24
xjmp L78
L75:
ldd R18,y+11
clr R19
subi R18,32
sbci R19,0
ldi R16,12
ldi R17,0
xcall empy16s
mov R20,R12
clr R21
add R20,R16
adc R21,R17
ldi R24,<_chardot_6x12
ldi R25,>_chardot_6x12
movw R30,R20
add R30,R24
adc R31,R25
lpm R22,Z
ori R22,32
mov R24,R14
subi R24,248 ; addi 8
std y+0,R24
mov R18,R10
mov R16,R22
xcall _LCD_Display_Locate
inc R10
L76:
inc R12
L78:
mov R24,R12
cpi R24,12
brlo L75
; {
; temp=i+(INT16U)(Char-0x20)*En_6x12_YSIZE; //要注意数据范围
; ImgData = chardot_6x12[temp]|0x20;
; LCD_Display_Locate(ImgData, HZ_X, Y + 8);
; HZ_X++;
; }
; }
L66:
L60:
adiw R28,1
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
; y -> y+7
; x -> R22
; c -> R20
.even
_GUI_DispCharAt::
xcall push_gset3
mov R22,R18
mov R20,R16
sbiw R28,1
; }
;
; void GUI_DispCharAt(INT8U c, INT8U x, INT8U y)
; {
; switch (GUITextMode)
lds R10,_GUITextMode
clr R11
tst R10
brne X1
tst R11
breq L83
X1:
movw R24,R10
cpi R24,1
ldi R30,0
cpc R25,R30
breq L84
cpi R24,2
ldi R30,0
cpc R25,R30
breq L85
xjmp L81
X2:
; {
L83:
; case GUI_TEXTMODE_NORMAL :
; GUI_Display_ASCII(c, x, y);
ldd R0,y+7
std y+0,R0
mov R18,R22
mov R16,R20
xcall _GUI_Display_ASCII
; break;
xjmp L81
L84:
; case GUI_TEXTMODE_REVERSE :
; GUI_Display_InvASCII(c, x, y);
ldd R0,y+7
std y+0,R0
mov R18,R22
mov R16,R20
xcall _GUI_Display_InvASCII
; break;
xjmp L81
L85:
; case GUI_TEXTMODE_UNDERLINE :
; GUI_Display_ASCII_UnderLine(c, x, y);
ldd R0,y+7
std y+0,R0
mov R18,R22
mov R16,R20
xcall _GUI_Display_ASCII_UnderLine
; break;
; default :
; break;
L81:
L79:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
; ImgData -> R20
; HZ_X -> R22
; i -> R10
; CodeID -> R12,R13
; y0 -> R14
; x0 -> y+11
; UniCode -> R20,R21
.even
_GUI_Display_Chinese::
st -y,r19
st -y,r18
xcall push_gset5
movw R20,R16
sbiw R28,1
ldd R14,y+13
; }
; }
;
; #if GUI_DispChar_EN
; void GUI_DispChar(INT8U c)
; {
; GUI_DispCharAt(c, PosX, PosY);
; PosX += 8;
; }
; #endif
;
; /*
; *****************************************************************************
; * GUI_Display_Chinese - 指定位置显示一个16x16的汉字
; * @Param x0:X轴坐标0--(192-16)
; * @Param y0:Y轴坐标0--(8-2)
; * @Param UniCode:汉字内码
;
; *****************************************************************************/
;
; void GUI_Display_Chinese(INT16U UniCode, INT8U x0, INT8U y0) //
; {
; INT16U CodeID;
; INT8U i,ImgData;
; INT8U HZ_X;
;
; if(x0>=LCD_XSIZE)
ldd R24,y+11
cpi R24,97
brlo L87
; x0=x0%LCD_XSIZE;
ldi R17,97
mov R16,R24
xcall mod8u
std y+11,R16
L87:
; if(y0>=LCD_YSIZE)
mov R24,R14
cpi R24,68
brlo L89
; y0=y0%LCD_YSIZE;
ldi R17,68
mov R16,R24
xcall mod8u
mov R14,R16
L89:
;
; HZ_X = x0;
ldd R22,y+11
; //在字库里搜索汉字
; for(CodeID=0; CodeID < hzNum; CodeID++)
clr R12
clr R13
xjmp L94
L91:
; {
; // 找到 指定汉字的 Index 后, 跳出循环
; if( (GB_12[CodeID].Index[0]==UniCode/256) && (GB_12[CodeID].Index[1]==UniCode%256) )
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
ldi R24,<_GB_12
ldi R25,>_GB_12
movw R30,R16
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
movw R4,R20
mov R4,R5
clr R5
cp R2,R4
cpc R3,R5
brne L95
ldi R24,<_GB_12+1
ldi R25,>_GB_12+1
movw R30,R16
add R30,R24
adc R31,R25
lpm R2,Z
clr R3
movw R24,R20
andi R25,0
cp R2,R24
cpc R3,R25
brne L95
; {
; break;
xjmp L93
L95:
; }
; else if(CodeID == (hzNum-1))
movw R24,R12
cpi R24,231
ldi R30,3
cpc R25,R30
brne L98
; {//未检索到的汉字,显示个"##"提示吧
; GUI_DispCharAt('#',x0,y0);
std y+0,R14
ldd R18,y+11
ldi R16,35
xcall _GUI_DispCharAt
; GUI_DispCharAt('#',x0+Char_XSIZE,y0);
std y+0,R14
lds R2,_Char_XSIZE
ldd R18,y+11
add R18,R2
ldi R16,35
xcall _GUI_DispCharAt
; return;
xjmp L86
L98:
L92:
movw R24,R12
adiw R24,1
movw R12,R24
L94:
movw R24,R12
cpi R24,232
ldi R30,3
cpc R25,R30
brsh X5
xjmp L91
X5:
L93:
; }
; }
; //----------------------------------
; switch (GUITextMode)
lds R20,_GUITextMode
clr R21
cpi R20,0
cpc R20,R21
breq L103
X3:
cpi R20,1
ldi R30,0
cpc R21,R30
brne X6
xjmp L114
X6:
cpi R20,2
ldi R30,0
cpc R21,R30
brne X7
xjmp L125
X7:
xjmp L101
X4:
; {
L103:
; case GUI_TEXTMODE_NORMAL :
; // 写汉字的上半部分 (一个汉字 32 个字节, 显示为2行 * 16列)
; for(i=0; i<Chinese_XSIZE; i++)
clr R10
xjmp L107
L104:
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldi R24,<_GB_12+2
ldi R25,>_GB_12+2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R20,Z
std y+0,R14
mov R18,R22
mov R16,R20
xcall _LCD_Display_Locate
inc R22
L105:
inc R10
L107:
lds R2,_Chinese_XSIZE
cp R10,R2
brlo L104
; {
; ImgData = GB_12[CodeID].Msk[i];
; LCD_Display_Locate(ImgData, HZ_X, y0);
; HZ_X++;
; }
; // 写汉字的下半部分
; HZ_X = x0;
ldd R22,y+11
; for(i=Chinese_XSIZE; i<2*Chinese_XSIZE; i++)
mov R10,R2
xjmp L112
L109:
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldi R24,<_GB_12+2
ldi R25,>_GB_12+2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R20,Z
mov R24,R14
subi R24,248 ; addi 8
std y+0,R24
mov R18,R22
mov R16,R20
xcall _LCD_Display_Locate
inc R22
L110:
inc R10
L112:
lds R2,_Chinese_XSIZE
ldi R24,2
mul R24,R2
cp R10,R0
brlo L109
; {
; ImgData = GB_12[CodeID].Msk[i];
; LCD_Display_Locate(ImgData, HZ_X, y0 + 8);
; HZ_X++;
; }
; break;
xjmp L101
L114:
; //-----------------------------------------------------------------
; case GUI_TEXTMODE_REVERSE :
; // 写汉字的上半部分 (一个汉字 32 个字节, 显示为2行 * 16列)
; for(i=0; i<Chinese_XSIZE; i++)
clr R10
xjmp L118
L115:
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldi R24,<_GB_12+2
ldi R25,>_GB_12+2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R20,Z
clr R21
ldi R24,255
ldi R25,0
eor R20,R24
eor R21,R25
std y+0,R14
mov R18,R22
mov R16,R20
xcall _LCD_Display_Locate
inc R22
L116:
inc R10
L118:
lds R2,_Chinese_XSIZE
cp R10,R2
brlo L115
; {
; ImgData = GB_12[CodeID].Msk[i]^0xFF;
; LCD_Display_Locate(ImgData, HZ_X, y0);
; HZ_X++;
; }
; // 写汉字的下半部分
; HZ_X = x0;
ldd R22,y+11
; for(i=Chinese_XSIZE; i<2*Chinese_XSIZE; i++)
mov R10,R2
xjmp L123
L120:
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldi R24,<_GB_12+2
ldi R25,>_GB_12+2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R20,Z
ldi R24,63
eor R20,R24
mov R24,R14
subi R24,248 ; addi 8
std y+0,R24
mov R18,R22
mov R16,R20
xcall _LCD_Display_Locate
inc R22
L121:
inc R10
L123:
lds R2,_Chinese_XSIZE
ldi R24,2
mul R24,R2
cp R10,R0
brlo L120
; {
; ImgData = GB_12[CodeID].Msk[i]^0x3F;//总共12行
; LCD_Display_Locate(ImgData, HZ_X, y0 + 8);
; HZ_X++;
; }
; break;
xjmp L101
L125:
; //-------------------------------------------------------------------------
; case GUI_TEXTMODE_UNDERLINE :
; // 写汉字的上半部分 (一个汉字 32 个字节, 显示为2行 * 16列)
; for(i=0; i<Chinese_XSIZE; i++)
clr R10
xjmp L129
L126:
ldi R16,26
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
ldi R24,<_GB_12+2
ldi R25,>_GB_12+2
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
lpm R20,Z
std y+0,R14
mov R18,R22
mov R16,R20
xcall _LCD_Display_Locate
inc R22
L127:
inc R10
L129:
lds R2,_Chinese_XSIZE
cp R10,R2
brlo L126
; {
; ImgData = GB_12[CodeID].Msk[i];
; LCD_Display_Locate(ImgData, HZ_X, y0);
; HZ_X++;
; }
; // 写汉字的下半部分
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -