📄 font8_8.lis
字号:
000E ; _XXX_XX_,
000E ; XX_XXX__,
000E ; ________,
000E ; ________,
000E ; ________,
000E ; ________,
000E ; ________,
000E ; ________}
000E ;
000E ; /* 0x7f */
000E ; ,{
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; XXXXXX__,
000E ; ________}
000E ;
000E ; };
000E ;
000E ; /****************************************************************************
000E ; * 名称:GUI_PutChar8_8()
000E ; * 功能:显示ASCII码(8*8字体),显示值为20H-7FH(若为其它值,则显示' ')。
000E ; * 入口参数: x 指定显示位置,x坐标
000E ; * y 指定显示位置,y坐标
000E ; * ch 要显示的ASCII码值。
000E ; * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
000E ; * 说明:操作失败原因是指定地址超出有效范围。
000E ; ****************************************************************************/
000E ; uint8 GUI_PutChar8_8(uint32 x, uint32 y, uint8 ch)
000E ; { uint8 font_dat;
000E .dbline 1086
000E ; uint8 i, j;
000E ; TCOLOR bakc;
000E ;
000E ; /* 参数过滤 */
000E ; if( x>=(GUI_LCM_XMAX-8) ) return(0);
000E 8C85 ldd R24,y+12
0010 9D85 ldd R25,y+13
0012 883E cpi R24,232
0014 E0E0 ldi R30,0
0016 9E07 cpc R25,R30
0018 10F0 brlo L8
001A .dbline 1086
001A 0027 clr R16
001C 4FC0 xjmp L7
001E L8:
001E .dbline 1087
001E ; if( y>=(GUI_LCM_YMAX-8) ) return(0);
001E C601 movw R24,R12
0020 8837 cpi R24,120
0022 E0E0 ldi R30,0
0024 9E07 cpc R25,R30
0026 10F0 brlo L10
0028 .dbline 1087
0028 0027 clr R16
002A 48C0 xjmp L7
002C L10:
002C .dbline 1088
002C 8A2D mov R24,R10
002E 8032 cpi R24,32
0030 18F0 brlo L14
0032 8FE7 ldi R24,127
0034 8A15 cp R24,R10
0036 10F4 brsh L12
0038 L14:
0038 .dbline 1088
0038 ; if( (ch<0x20) || (ch>0x7f) ) ch = 0x20;
0038 80E2 ldi R24,32
003A A82E mov R10,R24
003C L12:
003C .dbline 1090
003C ;
003C ; ch -= 0x20;
003C 8A2D mov R24,R10
003E 8052 subi R24,32
0040 A82E mov R10,R24
0042 .dbline 1091
0042 ; for(i=0; i<8; i++)
0042 4427 clr R20
0044 37C0 xjmp L18
0046 L15:
0046 .dbline 1092
0046 ; { /* 读取点阵数据 */
0046 .dbline 1093
0046 ; font_dat = FONT8x8ASCII[ch][i];
0046 88E0 ldi R24,8
0048 8A9D mul R24,R10
004A 1001 movw R2,R0
004C 80E0 ldi R24,<_FONT8x8ASCII
004E 90E0 ldi R25,>_FONT8x8ASCII
0050 280E add R2,R24
0052 391E adc R3,R25
0054 E42F mov R30,R20
0056 FF27 clr R31
0058 E20D add R30,R2
005A F31D adc R31,R3
005C E490 lpm R14,Z
005E .dbline 1095
005E ;
005E ; for(j=0; j<8; j++)
005E 6627 clr R22
0060 1EC0 xjmp L22
0062 L19:
0062 .dbline 1096
0062 ; { /* 设置相应的点为color或为back_color */
0062 .dbline 1097
0062 ; if( (font_dat&DCB2HEX_TAB[j])==0 ) GUI_CopyColor(&bakc, back_color);
0062 80E0 ldi R24,<_DCB2HEX_TAB
0064 90E0 ldi R25,>_DCB2HEX_TAB
0066 E62F mov R30,R22
0068 FF27 clr R31
006A E80F add R30,R24
006C F91F adc R31,R25
006E E491 lpm R30,Z
0070 2E2C mov R2,R14
0072 2E22 and R2,R30
0074 21F4 brne L23
0076 .dbline 1097
0076 20900000 lds R2,_back_color
007A 2982 std y+1,R2
007C 03C0 xjmp L24
007E L23:
007E .dbline 1098
007E ; else GUI_CopyColor(&bakc, disp_color);
007E 20900000 lds R2,_disp_color
0082 2982 std y+1,R2
0084 L24:
0084 .dbline 1099
0084 2980 ldd R2,y+1
0086 2882 std y+0,R2
0088 9601 movw R18,R12
008A 0C85 ldd R16,y+12
008C 1D85 ldd R17,y+13
008E 0E940000 xcall _GUI_Point
0092 .dbline 1100
0092 8C85 ldd R24,y+12
0094 9D85 ldd R25,y+13
0096 0196 adiw R24,1
0098 9D87 std y+13,R25
009A 8C87 std y+12,R24
009C .dbline 1101
009C L20:
009C .dbline 1095
009C 6395 inc R22
009E L22:
009E .dbline 1095
009E 6830 cpi R22,8
00A0 00F3 brlo L19
00A2 .dbline 1103
00A2 C601 movw R24,R12
00A4 0196 adiw R24,1
00A6 6C01 movw R12,R24
00A8 .dbline 1104
00A8 8C85 ldd R24,y+12
00AA 9D85 ldd R25,y+13
00AC 0897 sbiw R24,8
00AE 9D87 std y+13,R25
00B0 8C87 std y+12,R24
00B2 .dbline 1105
00B2 L16:
00B2 .dbline 1091
00B2 4395 inc R20
00B4 L18:
00B4 .dbline 1091
00B4 4830 cpi R20,8
00B6 08F4 brsh X0
00B8 C6CF xjmp L15
00BA X0:
00BA .dbline 1107
00BA ; GUI_Point(x, y, bakc);
00BA ; x++;
00BA ; }
00BA ;
00BA ; y++; // 指向下一行
00BA ; x -= 8; // 恢复x值
00BA ; }
00BA ;
00BA ; return(1);
00BA 01E0 ldi R16,1
00BC .dbline -2
00BC L7:
00BC 2296 adiw R28,2
00BE 0E940000 xcall pop_gset5
00C2 2496 adiw R28,4
00C4 .dbline 0 ; func end
00C4 0895 ret
00C6 .dbsym r i 20 c
00C6 .dbsym r font_dat 14 c
00C6 .dbsym l bakc 1 c
00C6 .dbsym r j 22 c
00C6 .dbsym r ch 10 c
00C6 .dbsym r y 12 i
00C6 .dbsym l x 12 i
00C6 .dbend
00C6 .dbfunc e GUI_PutString8_8 _GUI_PutString8_8 fV
00C6 ; str -> R20,R21
00C6 ; y -> R22,R23
00C6 ; x -> R10,R11
.even
00C6 _GUI_PutString8_8::
00C6 0E940000 xcall push_gset3
00CA B901 movw R22,R18
00CC 5801 movw R10,R16
00CE 2197 sbiw R28,1
00D0 4F81 ldd R20,y+7
00D2 5885 ldd R21,y+8
00D4 .dbline -1
00D4 .dbline 1122
00D4 ; }
00D4 ;
00D4 ;
00D4 ;
00D4 ; /****************************************************************************
00D4 ; * 名称:GUI_PutString8_8()
00D4 ; * 功能:输出显示字符串((8*8字体,没有自动换行功能)。
00D4 ; * 入口参数: x 指定显示位置,x坐标
00D4 ; * y 指定显示位置,y坐标
00D4 ; * str 要显示的ASCII码字符串
00D4 ; * 出口参数:无
00D4 ; * 说明:操作失败原因是指定地址超出有效范围。
00D4 ; ****************************************************************************/
00D4 ; void GUI_PutString8_8(uint32 x, uint32 y, char *str)
00D4 ; { while(1)
00D4 12C0 xjmp L27
00D6 L26:
00D6 .dbline 1123
00D6 ; { if( (*str)=='\0' ) break;
00D6 .dbline 1123
00D6 FA01 movw R30,R20
00D8 2080 ldd R2,z+0
00DA 2220 tst R2
00DC 09F4 brne L29
00DE .dbline 1123
00DE 0EC0 xjmp L28
00E0 L29:
00E0 .dbline 1124
00E0 ; if( GUI_PutChar8_8(x, y, *str++)==0 ) break;
00E0 FA01 movw R30,R20
00E2 2190 ld R2,Z+
00E4 AF01 movw R20,R30
00E6 2882 std y+0,R2
00E8 9B01 movw R18,R22
00EA 8501 movw R16,R10
00EC 89DF xcall _GUI_PutChar8_8
00EE 0023 tst R16
00F0 09F4 brne L31
00F2 .dbline 1124
00F2 04C0 xjmp L28
00F4 L31:
00F4 .dbline 1125
00F4 C501 movw R24,R10
00F6 0696 adiw R24,6
00F8 5C01 movw R10,R24
00FA .dbline 1126
00FA L27:
00FA .dbline 1122
00FA EDCF xjmp L26
00FC L28:
00FC .dbline -2
00FC L25:
00FC 2196 adiw R28,1
00FE 0E940000 xcall pop_gset3
0102 .dbline 0 ; func end
0102 0895 ret
0104 .dbsym r str 20 pc
0104 .dbsym r y 22 i
0104 .dbsym r x 10 i
0104 .dbend
0104 .dbfunc e GUI_PutNoStr8_8 _GUI_PutNoStr8_8 fV
0104 ; no -> R20
0104 ; str -> R22,R23
0104 ; y -> R10,R11
0104 ; x -> R12,R13
.even
0104 _GUI_PutNoStr8_8::
0104 0E940000 xcall push_gset4
0108 5901 movw R10,R18
010A 6801 movw R12,R16
010C 2197 sbiw R28,1
010E 6985 ldd R22,y+9
0110 7A85 ldd R23,y+10
0112 4B85 ldd R20,y+11
0114 .dbline -1
0114 .dbline 1141
0114 ; x += 6; // 下一个字符显示位置,y不变(即不换行)
0114 ; }
0114 ; }
0114 ;
0114 ;
0114 ; /****************************************************************************
0114 ; * 名称:GUI_PutNoStr8_8()
0114 ; * 功能:输出显示字符串((8*8字体,没有自动换行功能),若显示的字符个数大于指定个数,则直接退出。
0114 ; * 入口参数: x 指定显示位置,x坐标
0114 ; * y 指定显示位置,y坐标
0114 ; * str 要显示的ASCII码字符串。
0114 ; * no 最大显示字符的个数
0114 ; * 出口参数:无
0114 ; * 说明:操作失败原因是指定地址超出有效范围。
0114 ; ****************************************************************************/
0114 ; void GUI_PutNoStr8_8(uint32 x, uint32 y, char *str, uint8 no)
0114 ; { if(no==0) return;
0114 .dbline 1141
0114 4423 tst R20
0116 A9F4 brne L39
0118 .dbline 1141
0118 17C0 xjmp L33
011A X1:
011A .dbline 1142
011A ; for(; no>0; no--)
011A L36:
011A .dbline 1143
011A ; { if( (*str)=='\0' ) break;
011A .dbline 1143
011A FB01 movw R30,R22
011C 2080 ldd R2,z+0
011E 2220 tst R2
0120 09F4 brne L40
0122 .dbline 1143
0122 12C0 xjmp L38
0124 L40:
0124 .dbline 1144
0124 ; if( GUI_PutChar(x, y, *str++)==0 ) break;
0124 FB01 movw R30,R22
0126 2190 ld R2,Z+
0128 BF01 movw R22,R30
012A 2882 std y+0,R2
012C 9501 movw R18,R10
012E 8601 movw R16,R12
0130 0E940000 xcall _GUI_PutChar
0134 0023 tst R16
0136 09F4 brne L42
0138 .dbline 1144
0138 07C0 xjmp L38
013A L42:
013A .dbline 1145
013A C601 movw R24,R12
013C 0696 adiw R24,6
013E 6C01 movw R12,R24
0140 .dbline 1146
0140 L37:
0140 .dbline 1142
0140 4A95 dec R20
0142 L39:
0142 .dbline 1142
0142 2224 clr R2
0144 2416 cp R2,R20
0146 48F3 brlo L36
0148 L38:
0148 .dbline -2
0148 L33:
0148 2196 adiw R28,1
014A 0E940000 xcall pop_gset4
014E .dbline 0 ; func end
014E 0895 ret
0150 .dbsym r no 20 c
0150 .dbsym r str 22 pc
0150 .dbsym r y 10 i
0150 .dbsym r x 12 i
0150 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -