📄 gui.lis
字号:
.module gui.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\12864-ICC\gui.c
0000 .dbfunc e GUI_HLine _GUI_HLine fV
0000 ; bak -> R14
0000 ; color -> R20
0000 ; x1 -> R22,R23
0000 ; y0 -> R10
0000 ; x0 -> R12,R13
.even
0000 _GUI_HLine::
0000 0E940000 xcall push_gset5
0004 A22E mov R10,R18
0006 6801 movw R12,R16
0008 2197 sbiw R28,1
000A 6B85 ldd R22,y+11
000C 7C85 ldd R23,y+12
000E 4D85 ldd R20,y+13
0010 .dbline -1
0010 .dbline 23
0010 ; /****************************************************************************************
0010 ; * 文件名:GUI.C
0010 ; * 功能:GUI基本绘图函数。进行基本绘图运算,并调用相应的刷新程序更新LCD显示。
0010 ; * 作者:黄绍斌
0010 ; * 修改:冯建辉
0010 ; * 日期:2006.09.13
0010 ; * 备注:图形操作层,进行各种图形运算操作。
0010 ; ****************************************************************************************/
0010 ; #include "gui.h"
0010 ; #include <math.h>
0010 ;
0010 ; /****************************************************************************
0010 ; * 名称:GUI_HLine()
0010 ; * 功能:画水平线。
0010 ; * 入口参数:x0 水平线起点所在列的位置
0010 ; * y0 水平线起点所在行的位置
0010 ; * x1 水平线终点所在列的位置
0010 ; * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
0010 ; * 出口参数:无
0010 ; * 说明:操作失败原因是指定地址超出缓冲区范围。
0010 ; ****************************************************************************/
0010 ; void GUI_HLine(unsigned int x0, unsigned char y0, unsigned int x1, TCOLOR color)
0010 ; {
0010 .dbline 25
0010 ; unsigned char bak;
0010 ; if(x0>x1) // 对x0、x1大小进行排列,以便画图
0010 6C15 cp R22,R12
0012 7D05 cpc R23,R13
0014 20F4 brsh L3
0016 .dbline 26
0016 ; {
0016 .dbline 27
0016 ; bak = x1;
0016 E62E mov R14,R22
0018 .dbline 28
0018 ; x1 = x0;
0018 B601 movw R22,R12
001A .dbline 29
001A ; x0 = bak;
001A CE2C mov R12,R14
001C DD24 clr R13
001E .dbline 30
001E ; }
001E L3:
001E L5:
001E .dbline 32
001E ; do
001E ; {
001E .dbline 33
001E ; GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
001E 4883 std y+0,R20
0020 2A2D mov R18,R10
0022 0C2D mov R16,R12
0024 0E940000 xcall _GUI_Point
0028 .dbline 34
0028 ; x0++;
0028 C601 movw R24,R12
002A 0196 adiw R24,1
002C 6C01 movw R12,R24
002E .dbline 35
002E ; }
002E L6:
002E .dbline 36
002E ; while(x1>=x0);
002E 6C15 cp R22,R12
0030 7D05 cpc R23,R13
0032 A8F7 brsh L5
0034 .dbline -2
0034 L2:
0034 2196 adiw R28,1
0036 0E940000 xcall pop_gset5
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r bak 14 c
003C .dbsym r color 20 c
003C .dbsym r x1 22 i
003C .dbsym r y0 10 c
003C .dbsym r x0 12 i
003C .dbend
003C .dbfunc e GUI_RLine _GUI_RLine fV
003C ; bak -> R14
003C ; color -> R20
003C ; y1 -> R22
003C ; y0 -> R10
003C ; x0 -> R12,R13
.even
003C _GUI_RLine::
003C 0E940000 xcall push_gset5
0040 A22E mov R10,R18
0042 6801 movw R12,R16
0044 2197 sbiw R28,1
0046 6B85 ldd R22,y+11
0048 4D85 ldd R20,y+13
004A .dbline -1
004A .dbline 50
004A ; }
004A ;
004A ; /***********************************************************************
004A ; * 名称:GUI_RLine()
004A ; * 功能:画竖直线。根据硬件特点,实现加速。
004A ; * 入口参数:x0 垂直线起点所在列的位置
004A ; * y0 垂直线起点所在行的位置
004A ; * y1 垂直线终点所在行的位置
004A ; * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
004A ; * 出口参数: 无
004A ; * 说明:操作失败原因是指定地址超出缓冲区范围。
004A ; ***********************************************************************/
004A ; void GUI_RLine(unsigned int x0, unsigned char y0, unsigned char y1, TCOLOR color)
004A ; {
004A .dbline 52
004A ; unsigned char bak;
004A ; if(y0>y1) // 对y0、y1大小进行排列,以便画图
004A 6A15 cp R22,R10
004C 18F4 brsh L9
004E .dbline 53
004E ; {
004E .dbline 54
004E ; bak = y1;
004E E62E mov R14,R22
0050 .dbline 55
0050 ; y1 = y0;
0050 6A2D mov R22,R10
0052 .dbline 56
0052 ; y0 = bak;
0052 AE2C mov R10,R14
0054 .dbline 57
0054 ; }
0054 L9:
0054 L11:
0054 .dbline 59
0054 ; do
0054 ; {
0054 .dbline 60
0054 ; GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
0054 4883 std y+0,R20
0056 2A2D mov R18,R10
0058 0C2D mov R16,R12
005A 0E940000 xcall _GUI_Point
005E .dbline 61
005E ; y0++;
005E A394 inc R10
0060 .dbline 62
0060 ; }
0060 L12:
0060 .dbline 63
0060 ; while(y1>=y0);
0060 6A15 cp R22,R10
0062 C0F7 brsh L11
0064 .dbline -2
0064 L8:
0064 2196 adiw R28,1
0066 0E940000 xcall pop_gset5
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r bak 14 c
006C .dbsym r color 20 c
006C .dbsym r y1 22 c
006C .dbsym r y0 10 c
006C .dbsym r x0 12 i
006C .dbend
006C .dbfunc e GUI_Rectangle _GUI_Rectangle fV
006C ; color -> R22
006C ; y1 -> y+11
006C ; x1 -> y+9
006C ; y0 -> R20
006C ; x0 -> R10,R11
.even
006C _GUI_Rectangle::
006C 0E940000 xcall push_gset3
0070 422F mov R20,R18
0072 5801 movw R10,R16
0074 2397 sbiw R28,3
0076 6D85 ldd R22,y+13
0078 .dbline -1
0078 .dbline 78
0078 ; }
0078 ;
0078 ; /****************************************************************************
0078 ; * 名称:GUI_Rectangle()
0078 ; * 功能:画矩形。
0078 ; * 入口参数:x0 矩形左上角的x坐标值
0078 ; * y0 矩形左上角的y坐标值
0078 ; * x1 矩形右下角的x坐标值
0078 ; * y1 矩形右下角的y坐标值
0078 ; * color 显示颜色
0078 ; * 出口参数:无
0078 ; * 说明:操作失败原因是指定地址超出有效范围。
0078 ; ****************************************************************************/
0078 ; void GUI_Rectangle(uint16 x0, uint8 y0, uint16 x1, uint8 y1, TCOLOR color)
0078 ; {
0078 .dbline 79
0078 ; GUI_HLine(x0, y0, x1, color);
0078 6A83 std y+2,R22
007A 0984 ldd R0,y+9
007C 1A84 ldd R1,y+10
007E 1982 std y+1,R1
0080 0882 std y+0,R0
0082 242F mov R18,R20
0084 8501 movw R16,R10
0086 BCDF xcall _GUI_HLine
0088 .dbline 80
0088 ; GUI_HLine(x0, y1, x1, color);
0088 6A83 std y+2,R22
008A 0984 ldd R0,y+9
008C 1A84 ldd R1,y+10
008E 1982 std y+1,R1
0090 0882 std y+0,R0
0092 2B85 ldd R18,y+11
0094 8501 movw R16,R10
0096 B4DF xcall _GUI_HLine
0098 .dbline 81
0098 ; GUI_RLine(x0, y0, y1, color);
0098 6A83 std y+2,R22
009A 0B84 ldd R0,y+11
009C 0882 std y+0,R0
009E 242F mov R18,R20
00A0 8501 movw R16,R10
00A2 CCDF xcall _GUI_RLine
00A4 .dbline 82
00A4 ; GUI_RLine(x1, y0, y1, color);
00A4 6A83 std y+2,R22
00A6 0B84 ldd R0,y+11
00A8 0882 std y+0,R0
00AA 242F mov R18,R20
00AC 0985 ldd R16,y+9
00AE 1A85 ldd R17,y+10
00B0 C5DF xcall _GUI_RLine
00B2 .dbline -2
00B2 L14:
00B2 2396 adiw R28,3
00B4 0E940000 xcall pop_gset3
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbsym r color 22 c
00BA .dbsym l y1 11 c
00BA .dbsym l x1 9 i
00BA .dbsym r y0 20 c
00BA .dbsym r x0 10 i
00BA .dbend
00BA .dbfunc e GUI_RectangleFill _GUI_RectangleFill fV
00BA ; i -> y+3
00BA ; color -> R20
00BA ; y1 -> R22
00BA ; x1 -> R10,R11
00BA ; y0 -> R12
00BA ; x0 -> R14,R15
.even
00BA _GUI_RectangleFill::
00BA 0E940000 xcall push_gset5
00BE C22E mov R12,R18
00C0 7801 movw R14,R16
00C2 2797 sbiw R28,7
00C4 A988 ldd R10,y+17
00C6 BA88 ldd R11,y+18
00C8 6B89 ldd R22,y+19
00CA 4D89 ldd R20,y+21
00CC .dbline -1
00CC .dbline 97
00CC ; }
00CC ;
00CC ; /****************************************************************************
00CC ; * 名称:GUI_RectangleFill()
00CC ; * 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
00CC ; * 入口参数:x0 矩形左上角的x坐标值
00CC ; * y0 矩形左上角的y坐标值
00CC ; * x1 矩形右下角的x坐标值
00CC ; * y1 矩形右下角的y坐标值
00CC ; * color 填充颜色
00CC ; * 出口参数:无
00CC ; * 说明:操作失败原因是指定地址超出有效范围。
00CC ; ****************************************************************************/
00CC ; void GUI_RectangleFill(uint16 x0, uint8 y0, uint16 x1, uint8 y1, TCOLOR color)
00CC ; {
00CC .dbline 101
00CC ; uint32 i;
00CC ;
00CC ; /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
00CC ; if(x0>x1) // 若x0>x1,则x0与x1交换
00CC AE14 cp R10,R14
00CE BF04 cpc R11,R15
00D0 60F4 brsh L16
00D2 .dbline 102
00D2 ; {
00D2 .dbline 103
00D2 ; i = x0;
00D2 1701 movw R2,R14
00D4 4424 clr R4
00D6 5524 clr R5
00D8 FE01 movw R30,R28
00DA 2382 std z+3,R2
00DC 3482 std z+4,R3
00DE 4582 std z+5,R4
00E0 5682 std z+6,R5
00E2 .dbline 104
00E2 ; x0 = x1;
00E2 7501 movw R14,R10
00E4 .dbline 105
00E4 ; x1 = i;
00E4 FE01 movw R30,R28
00E6 A380 ldd R10,z+3
00E8 B480 ldd R11,z+4
00EA .dbline 106
00EA ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -