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

📄 gui_basic.lis

📁 ssd1325控制器液晶的驱动程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module GUI_BASIC.C
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\mega128_lcd\ZLG_GUI\GUI_BASIC.C
 0000                   .dbfunc e GUI_Rectangle _GUI_Rectangle fV
 0000           ;          color -> R22
 0000           ;             y1 -> y+11
 0000           ;             x1 -> y+9
 0000           ;             y0 -> R20,R21
 0000           ;             x0 -> R10,R11
                        .even
 0000           _GUI_Rectangle::
 0000 0E940000          xcall push_gset3
 0004 A901              movw R20,R18
 0006 5801              movw R10,R16
 0008 2397              sbiw R28,3
 000A 6D85              ldd R22,y+13
 000C                   .dbline -1
 000C                   .dbline 24
 000C           ; /****************************************************************************************
 000C           ; * 文件名:GUI_BASIC.C
 000C           ; * 功能:GUI基本绘图函数。进行基本绘图运算,并调用相应的刷新程序更新LCD显示。
 000C           ; * 作者:黄绍斌
 000C           ; * 日期:2004.02.26
 000C           ; * 备注:图形操作层,进行各种图形运算操作。
 000C           ; ****************************************************************************************/
 000C           ; #include "config.h"
 000C           ; #include <math.h>
 000C           ; 
 000C           ; 
 000C           ; /****************************************************************************
 000C           ; * 名称:GUI_Rectangle()
 000C           ; * 功能:画矩形。
 000C           ; * 入口参数: x0               矩形左上角的x坐标值
 000C           ; *           y0                矩形左上角的y坐标值
 000C           ; *           x1      矩形右下角的x坐标值
 000C           ; *           y1      矩形右下角的y坐标值
 000C           ; *           color     显示颜色
 000C           ; * 出口参数:无
 000C           ; * 说明:操作失败原因是指定地址超出有效范围。
 000C           ; ****************************************************************************/
 000C           ; void  GUI_Rectangle(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
 000C           ; {  GUI_HLine(x0, y0, x1, color);
 000C                   .dbline 24
 000C 6A83              std y+2,R22
 000E 0984              ldd R0,y+9
 0010 1A84              ldd R1,y+10
 0012 1982              std y+1,R1
 0014 0882              std y+0,R0
 0016 9A01              movw R18,R20
 0018 8501              movw R16,R10
 001A 0E940000          xcall _GUI_HLine
 001E                   .dbline 25
 001E           ;    GUI_HLine(x0, y1, x1, color);
 001E 6A83              std y+2,R22
 0020 0984              ldd R0,y+9
 0022 1A84              ldd R1,y+10
 0024 1982              std y+1,R1
 0026 0882              std y+0,R0
 0028 2B85              ldd R18,y+11
 002A 3C85              ldd R19,y+12
 002C 8501              movw R16,R10
 002E 0E940000          xcall _GUI_HLine
 0032                   .dbline 26
 0032           ;    GUI_RLine(x0, y0, y1, color);
 0032 6A83              std y+2,R22
 0034 0B84              ldd R0,y+11
 0036 1C84              ldd R1,y+12
 0038 1982              std y+1,R1
 003A 0882              std y+0,R0
 003C 9A01              movw R18,R20
 003E 8501              movw R16,R10
 0040 0E940000          xcall _GUI_RLine
 0044                   .dbline 27
 0044           ;    GUI_RLine(x1, y0, y1, color);
 0044 6A83              std y+2,R22
 0046 0B84              ldd R0,y+11
 0048 1C84              ldd R1,y+12
 004A 1982              std y+1,R1
 004C 0882              std y+0,R0
 004E 9A01              movw R18,R20
 0050 0985              ldd R16,y+9
 0052 1A85              ldd R17,y+10
 0054 0E940000          xcall _GUI_RLine
 0058                   .dbline -2
 0058           L7:
 0058 2396              adiw R28,3
 005A 0E940000          xcall pop_gset3
 005E                   .dbline 0 ; func end
 005E 0895              ret
 0060                   .dbsym r color 22 c
 0060                   .dbsym l y1 11 i
 0060                   .dbsym l x1 9 i
 0060                   .dbsym r y0 20 i
 0060                   .dbsym r x0 10 i
 0060                   .dbend
 0060                   .dbfunc e GUI_RectangleFill _GUI_RectangleFill fV
 0060           ;              i -> R14,R15
 0060           ;          color -> R20
 0060           ;             y1 -> R22,R23
 0060           ;             x1 -> R10,R11
 0060           ;             y0 -> R12,R13
 0060           ;             x0 -> y+13
                        .even
 0060           _GUI_RectangleFill::
 0060 0E940000          xcall push_arg4
 0064 0E940000          xcall push_gset5
 0068 6901              movw R12,R18
 006A 2397              sbiw R28,3
 006C A988              ldd R10,y+17
 006E BA88              ldd R11,y+18
 0070 6B89              ldd R22,y+19
 0072 7C89              ldd R23,y+20
 0074 4D89              ldd R20,y+21
 0076                   .dbline -1
 0076                   .dbline 43
 0076           ; }
 0076           ; 
 0076           ; 
 0076           ; /****************************************************************************
 0076           ; * 名称:GUI_RectangleFill()
 0076           ; * 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
 0076           ; * 入口参数: x0               矩形左上角的x坐标值
 0076           ; *           y0                矩形左上角的y坐标值
 0076           ; *           x1      矩形右下角的x坐标值
 0076           ; *           y1      矩形右下角的y坐标值
 0076           ; *           color     填充颜色
 0076           ; * 出口参数:无
 0076           ; * 说明:操作失败原因是指定地址超出有效范围。
 0076           ; ****************************************************************************/
 0076           ; void  GUI_RectangleFill(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
 0076           ; {  uint32  i;
 0076                   .dbline 46
 0076           ; 
 0076           ;    /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
 0076           ;    if(x0>x1)                                          // 若x0>x1,则x0与x1交换
 0076 0D84              ldd R0,y+13
 0078 1E84              ldd R1,y+14
 007A A014              cp R10,R0
 007C B104              cpc R11,R1
 007E 20F4              brsh L9
 0080                   .dbline 47
 0080           ;    {  i = x0;
 0080                   .dbline 47
 0080 7001              movw R14,R0
 0082                   .dbline 48
 0082           ;       x0 = x1;
 0082 BE86              std y+14,R11
 0084 AD86              std y+13,R10
 0086                   .dbline 49
 0086           ;       x1 = i;
 0086 5701              movw R10,R14
 0088                   .dbline 50
 0088           ;    }
 0088           L9:
 0088                   .dbline 51
 0088           ;    if(y0>y1)                                          // 若y0>y1,则y0与y1交换
 0088 6C15              cp R22,R12
 008A 7D05              cpc R23,R13
 008C 18F4              brsh L11
 008E                   .dbline 52
 008E           ;    {  i = y0;
 008E                   .dbline 52
 008E 7601              movw R14,R12
 0090                   .dbline 53
 0090           ;       y0 = y1;
 0090 6B01              movw R12,R22
 0092                   .dbline 54
 0092           ;       y1 = i;
 0092 B701              movw R22,R14
 0094                   .dbline 55
 0094           ;    }
 0094           L11:
 0094                   .dbline 58
 0094           ;    
 0094           ;    /* 判断是否只是直线 */
 0094           ;    if(y0==y1) 
 0094 C616              cp R12,R22
 0096 D706              cpc R13,R23
 0098 49F4              brne L13
 009A                   .dbline 59
 009A           ;    {  GUI_HLine(x0, y0, x1, color);
 009A                   .dbline 59
 009A 4A83              std y+2,R20
 009C B982              std y+1,R11
 009E A882              std y+0,R10
 00A0 9601              movw R18,R12
 00A2 0D85              ldd R16,y+13
 00A4 1E85              ldd R17,y+14
 00A6 0E940000          xcall _GUI_HLine
 00AA                   .dbline 60
 00AA           ;       return;
 00AA 1BC0              xjmp L8
 00AC           L13:
 00AC                   .dbline 62
 00AC           ;    }
 00AC           ;    if(x0==x1) 
 00AC 0D84              ldd R0,y+13
 00AE 1E84              ldd R1,y+14
 00B0 0A14              cp R0,R10
 00B2 1B04              cpc R1,R11
 00B4 99F4              brne L18
 00B6                   .dbline 63
 00B6           ;    {  GUI_RLine(x0, y0, y1, color);
 00B6                   .dbline 63
 00B6 4A83              std y+2,R20
 00B8 7983              std y+1,R23
 00BA 6883              std y+0,R22
 00BC 9601              movw R18,R12
 00BE 8001              movw R16,R0
 00C0 0E940000          xcall _GUI_RLine
 00C4                   .dbline 64
 00C4           ;       return;
 00C4 0EC0              xjmp L8
 00C6           L17:
 00C6                   .dbline 68
 00C6                   .dbline 68
 00C6 4A83              std y+2,R20
 00C8 B982              std y+1,R11
 00CA A882              std y+0,R10
 00CC 9601              movw R18,R12
 00CE 0D85              ldd R16,y+13
 00D0 1E85              ldd R17,y+14
 00D2 0E940000          xcall _GUI_HLine
 00D6                   .dbline 69
 00D6 C601              movw R24,R12
 00D8 0196              adiw R24,1
 00DA 6C01              movw R12,R24
 00DC                   .dbline 70
 00DC           L18:
 00DC                   .dbline 67
 00DC           ;    }
 00DC           ; 
 00DC           ;    while(y0<=y1)                                              
 00DC 6C15              cp R22,R12
 00DE 7D05              cpc R23,R13
 00E0 90F7              brsh L17
 00E2                   .dbline -2
 00E2           L8:
 00E2 2396              adiw R28,3
 00E4 0E940000          xcall pop_gset5
 00E8 2496              adiw R28,4
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym r i 14 i
 00EC                   .dbsym r color 20 c
 00EC                   .dbsym r y1 22 i
 00EC                   .dbsym r x1 10 i
 00EC                   .dbsym r y0 12 i
 00EC                   .dbsym l x0 13 i
 00EC                   .dbend
 00EC                   .dbfunc e GUI_Square _GUI_Square fV
 00EC           ;          color -> y+13
 00EC           ;           with -> R10,R11
 00EC           ;             y0 -> R22,R23
 00EC           ;             x0 -> R20,R21
                        .even
 00EC           _GUI_Square::
 00EC 0E940000          xcall push_gset3
 00F0 B901              movw R22,R18
 00F2 A801              movw R20,R16
 00F4 2597              sbiw R28,5
 00F6 AB84              ldd R10,y+11
 00F8 BC84              ldd R11,y+12
 00FA                   .dbline -1
 00FA                   .dbline 85
 00FA           ;    {  GUI_HLine(x0, y0, x1, color);   // 当前画水平线
 00FA           ;       y0++;                                                   // 下一行
 00FA           ;    }
 00FA           ; }
 00FA           ; 
 00FA           ; 
 00FA           ; /****************************************************************************
 00FA           ; * 名称:GUI_Square()
 00FA           ; * 功能:画正方形。
 00FA           ; * 入口参数: x0               正方形左上角的x坐标值
 00FA           ; *           y0                正方形左上角的y坐标值
 00FA           ; *           with    正方形的边长
 00FA           ; *           color     显示颜色
 00FA           ; * 出口参数:无
 00FA           ; * 说明:操作失败原因是指定地址超出有效范围。
 00FA           ; ****************************************************************************/
 00FA           ; void  GUI_Square(uint32 x0, uint32 y0, uint32  with, TCOLOR  color)
 00FA           ; {   if(with==0) return;
 00FA                   .dbline 85
 00FA AA20              tst R10
 00FC 19F4              brne L21
 00FE BB20              tst R11
 0100 09F4              brne L21
 0102           X0:
 0102                   .dbline 85
 0102 21C0              xjmp L20
 0104           L21:
 0104                   .dbline 86
 0104           ;       if( (x0+with) > GUI_LCM_XMAX ) return;
 0104 1A01              movw R2,R20
 0106 2A0C              add R2,R10
 0108 3B1C              adc R3,R11
 010A 80EF              ldi R24,240
 010C 90E0              ldi R25,0
 010E 8215              cp R24,R2
 0110 9305              cpc R25,R3
 0112 08F4              brsh L23
 0114                   .dbline 86
 0114 18C0              xjmp L20
 0116           L23:
 0116                   .dbline 87
 0116           ;       if( (y0+with) > GUI_LCM_YMAX ) return;
 0116 1B01              movw R2,R22
 0118 2A0C              add R2,R10
 011A 3B1C              adc R3,R11
 011C 80E8              ldi R24,128
 011E 90E0              ldi R25,0
 0120 8215              cp R24,R2
 0122 9305              cpc R25,R3
 0124 08F4              brsh L25
 0126                   .dbline 87
 0126 0FC0              xjmp L20
 0128           L25:
 0128                   .dbline 88
 0128           ;       GUI_Rectangle(x0, y0, x0+with, y0+with, color);
 0128 0D84              ldd R0,y+13
 012A 0C82              std y+4,R0
 012C 1B01              movw R2,R22
 012E 2A0C              add R2,R10
 0130 3B1C              adc R3,R11
 0132 3B82              std y+3,R3
 0134 2A82              std y+2,R2
 0136 1A01              movw R2,R20
 0138 2A0C              add R2,R10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -