📄 loadbit.lis
字号:
.module loadbit.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\mega128_lcd\ZLG_GUI\loadbit.c
0000 .dbfunc e GUI_LoadLine _GUI_LoadLine fc
0000 ; bit_dat -> R20
0000 ; bakc -> y+1
0000 ; i -> R22
0000 ; no -> R10,R11
0000 ; dat -> R12,R13
0000 ; y -> R14,R15
0000 ; x -> R4,R5
.even
0000 _GUI_LoadLine::
0000 0E940000 xcall push_gset5
0004 7901 movw R14,R18
0006 2801 movw R4,R16
0008 2297 sbiw R28,2
000A CC84 ldd R12,y+12
000C DD84 ldd R13,y+13
000E AE84 ldd R10,y+14
0010 BF84 ldd R11,y+15
0012 .dbline -1
0012 .dbline 22
0012 ; /****************************************************************************************
0012 ; * 文件名:LOADBIT.C
0012 ; * 功能:显示单色图形及汉字显示。先将图形转换为对应的点阵数组,然后即可调用此文件的函数输出驱动。
0012 ; * 作者:黄绍斌
0012 ; * 日期:2004.02.26
0012 ; * 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
0012 ; ****************************************************************************************/
0012 ; #include "config.h"
0012 ;
0012 ; #if (GUI_LoadPic_EN==1)|(GUI_MenuIco_EN==1)|(GUI_PutHZ_EN==1)
0012 ; /****************************************************************************
0012 ; * 名称:GUI_LoadLine()
0012 ; * 功能:输出单色图形的一行数据。
0012 ; * 入口参数: x 指定显示位置,x坐标
0012 ; * y 指定显示位置,y坐标
0012 ; * dat 要输出显示的数据。
0012 ; * no 要显示此行的点个数
0012 ; * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
0012 ; * 说明:操作失败原因是指定地址超出有效范围。
0012 ; ****************************************************************************/
0012 ; uint8 GUI_LoadLine(uint32 x, uint32 y, uint8 *dat, uint32 no)
0012 ; { uint8 bit_dat;
0012 .dbline 27
0012 ; uint8 i;
0012 ; TCOLOR bakc;
0012 ;
0012 ; /* 参数过滤 */
0012 ; if(x>=GUI_LCM_XMAX) return(0);
0012 C201 movw R24,R4
0014 803F cpi R24,240
0016 E0E0 ldi R30,0
0018 9E07 cpc R25,R30
001A 10F0 brlo L8
001C .dbline 27
001C 0027 clr R16
001E 40C0 xjmp L7
0020 L8:
0020 .dbline 28
0020 ; if(y>=GUI_LCM_YMAX) return(0);
0020 C701 movw R24,R14
0022 8038 cpi R24,128
0024 E0E0 ldi R30,0
0026 9E07 cpc R25,R30
0028 10F0 brlo L10
002A .dbline 28
002A 0027 clr R16
002C 39C0 xjmp L7
002E L10:
002E .dbline 30
002E ;
002E ; for(i=0; i<no; i++)
002E 6627 clr R22
0030 30C0 xjmp L15
0032 L12:
0032 .dbline 31
0032 ; { /* 判断是否要读取点阵数据 */
0032 .dbline 32
0032 ; if( (i%8)==0 ) bit_dat = *dat++;
0032 18E0 ldi R17,8
0034 062F mov R16,R22
0036 0E940000 xcall mod8u
003A 0023 tst R16
003C 19F4 brne L16
003E .dbline 32
003E F601 movw R30,R12
0040 4191 ld R20,Z+
0042 6F01 movw R12,R30
0044 L16:
0044 .dbline 35
0044 ;
0044 ; /* 设置相应的点为color或为back_color */
0044 ; if( (bit_dat&DCB2HEX_TAB[i&0x07])==0 ) GUI_CopyColor(&bakc, back_color);
0044 80E0 ldi R24,<_DCB2HEX_TAB
0046 90E0 ldi R25,>_DCB2HEX_TAB
0048 E62F mov R30,R22
004A FF27 clr R31
004C E770 andi R30,7
004E F070 andi R31,0
0050 E80F add R30,R24
0052 F91F adc R31,R25
0054 E491 lpm R30,Z
0056 242E mov R2,R20
0058 2E22 and R2,R30
005A 21F4 brne L18
005C .dbline 35
005C 20900000 lds R2,_back_color
0060 2982 std y+1,R2
0062 03C0 xjmp L19
0064 L18:
0064 .dbline 36
0064 ; else GUI_CopyColor(&bakc, disp_color);
0064 20900000 lds R2,_disp_color
0068 2982 std y+1,R2
006A L19:
006A .dbline 37
006A ; GUI_Point(x, y, bakc);
006A 2980 ldd R2,y+1
006C 2882 std y+0,R2
006E 9701 movw R18,R14
0070 8201 movw R16,R4
0072 0F93 push R16
0074 1F93 push R17
0076 0E940000 xcall _GUI_Point
007A 5F90 pop R5
007C 4F90 pop R4
007E .dbline 39
007E ;
007E ; if( (++x)>=GUI_LCM_XMAX ) return(0);
007E C201 movw R24,R4
0080 0196 adiw R24,1
0082 2C01 movw R4,R24
0084 803F cpi R24,240
0086 E0E0 ldi R30,0
0088 9E07 cpc R25,R30
008A 10F0 brlo L20
008C .dbline 39
008C 0027 clr R16
008E 08C0 xjmp L7
0090 L20:
0090 .dbline 40
0090 L13:
0090 .dbline 30
0090 6395 inc R22
0092 L15:
0092 .dbline 30
0092 262E mov R2,R22
0094 3324 clr R3
0096 2A14 cp R2,R10
0098 3B04 cpc R3,R11
009A 08F4 brsh X0
009C CACF xjmp L12
009E X0:
009E .dbline 42
009E ; }
009E ;
009E ; return(1);
009E 01E0 ldi R16,1
00A0 .dbline -2
00A0 L7:
00A0 2296 adiw R28,2
00A2 0E940000 xcall pop_gset5
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbsym r bit_dat 20 c
00A8 .dbsym l bakc 1 c
00A8 .dbsym r i 22 c
00A8 .dbsym r no 10 i
00A8 .dbsym r dat 12 pc
00A8 .dbsym r y 14 i
00A8 .dbsym r x 4 i
00A8 .dbend
00A8 .dbfunc e GUI_LoadPic _GUI_LoadPic fV
00A8 ; i -> R20,R21
00A8 ; lno -> R22,R23
00A8 ; hno -> R10,R11
00A8 ; dat -> R12,R13
00A8 ; y -> R14,R15
00A8 ; x -> y+14
.even
00A8 _GUI_LoadPic::
00A8 0E940000 xcall push_arg4
00AC 0E940000 xcall push_gset5
00B0 7901 movw R14,R18
00B2 2497 sbiw R28,4
00B4 CA88 ldd R12,y+18
00B6 DB88 ldd R13,y+19
00B8 AC88 ldd R10,y+20
00BA BD88 ldd R11,y+21
00BC 6E89 ldd R22,y+22
00BE 7F89 ldd R23,y+23
00C0 .dbline -1
00C0 .dbline 60
00C0 ; }
00C0 ; #endif
00C0 ;
00C0 ;
00C0 ; #if (GUI_LoadPic_EN==1)|(GUI_MenuIco_EN==1)
00C0 ; /****************************************************************************
00C0 ; * 名称:GUI_LoadPic()
00C0 ; * 功能:输出单色图形数据。
00C0 ; * 入口参数: x 指定显示位置,x坐标
00C0 ; * y 指定显示位置,y坐标
00C0 ; * dat 要输出显示的数据
00C0 ; * hno 要显示此行的点个数
00C0 ; * lno 要显示此列的点个数
00C0 ; * 出口参数:无
00C0 ; * 说明:操作失败原因是指定地址超出有效范围。
00C0 ; ****************************************************************************/
00C0 ; void GUI_LoadPic(uint32 x, uint32 y, uint8 *dat, uint32 hno, uint32 lno)
00C0 ; { uint32 i;
00C0 .dbline 62
00C0 ;
00C0 ; for(i=0; i<lno; i++)
00C0 4427 clr R20
00C2 5527 clr R21
00C4 1FC0 xjmp L26
00C6 L23:
00C6 .dbline 63
00C6 ; { GUI_LoadLine(x, y, dat, hno); // 输出一行数据
00C6 .dbline 63
00C6 BB82 std y+3,R11
00C8 AA82 std y+2,R10
00CA D982 std y+1,R13
00CC C882 std y+0,R12
00CE 9701 movw R18,R14
00D0 0E85 ldd R16,y+14
00D2 1F85 ldd R17,y+15
00D4 95DF xcall _GUI_LoadLine
00D6 .dbline 64
00D6 ; y++; // 显示下一行
00D6 C701 movw R24,R14
00D8 0196 adiw R24,1
00DA 7C01 movw R14,R24
00DC .dbline 65
00DC ; dat += (hno>>3); // 计算下一行的数据
00DC 1501 movw R2,R10
00DE 3694 lsr R3
00E0 2794 ror R2
00E2 3694 lsr R3
00E4 2794 ror R2
00E6 3694 lsr R3
00E8 2794 ror R2
00EA C20C add R12,R2
00EC D31C adc R13,R3
00EE .dbline 66
00EE ; if( (hno&0x07)!=0 ) dat++;
00EE C501 movw R24,R10
00F0 8770 andi R24,7
00F2 9070 andi R25,0
00F4 8030 cpi R24,0
00F6 8907 cpc R24,R25
00F8 19F0 breq L27
00FA X1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -