⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.lis

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -