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

📄 gui_basic.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ogui_basic.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips GUI\GUI_BASIC.C]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  GUI_Rectangle PROC
;;;24     void  GUI_Rectangle(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;25     {  GUI_HLine(x0, y0, x1, color);
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  e1a04000          MOV      r4,r0
000008  e1a05001          MOV      r5,r1
00000c  e1a06002          MOV      r6,r2
000010  e1a07003          MOV      r7,r3
000014  e59d8018          LDR      r8,[sp,#0x18]
000018  e20620ff          AND      r2,r6,#0xff
00001c  e20510ff          AND      r1,r5,#0xff
000020  e20400ff          AND      r0,r4,#0xff
000024  e1a03008          MOV      r3,r8
000028  ebfffffe          BL       GUI_HLine
;;;26        GUI_HLine(x0, y1, x1, color);
00002c  e20620ff          AND      r2,r6,#0xff
000030  e20710ff          AND      r1,r7,#0xff
000034  e20400ff          AND      r0,r4,#0xff
000038  e1a03008          MOV      r3,r8
00003c  ebfffffe          BL       GUI_HLine
;;;27        GUI_RLine(x0, y0, y1, color);
000040  e20720ff          AND      r2,r7,#0xff
000044  e20510ff          AND      r1,r5,#0xff
000048  e20400ff          AND      r0,r4,#0xff
00004c  e1a03008          MOV      r3,r8
000050  ebfffffe          BL       GUI_RLine
;;;28        GUI_RLine(x1, y0, y1, color);
000054  e20720ff          AND      r2,r7,#0xff
000058  e20510ff          AND      r1,r5,#0xff
00005c  e20600ff          AND      r0,r6,#0xff
000060  e1a03008          MOV      r3,r8
000064  ebfffffe          BL       GUI_RLine
;;;29     }
000068  e8bd41f0          POP      {r4-r8,lr}
00006c  e12fff1e          BX       lr
                          ENDP

                  GUI_RectangleFill PROC
;;;43     void  GUI_RectangleFill(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;44     {  uint32  i;
000070  e92d47f0          PUSH     {r4-r10,lr}
000074  e1a04000          MOV      r4,r0
000078  e1a06001          MOV      r6,r1
00007c  e1a07002          MOV      r7,r2
000080  e1a08003          MOV      r8,r3
000084  e59d9020          LDR      r9,[sp,#0x20]
;;;45     
;;;46        /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
;;;47        if(x0>x1) 						// 若x0>x1,则x0与x1交换
000088  e1540007          CMP      r4,r7
00008c  9a000002          BLS      |L1.156|
;;;48        {  i = x0;
000090  e1a05004          MOV      r5,r4
;;;49           x0 = x1;
000094  e1a04007          MOV      r4,r7
;;;50           x1 = i;
000098  e1a07005          MOV      r7,r5
;;;51        }
;;;52        if(y0>y1)						// 若y0>y1,则y0与y1交换
                  |L1.156|
00009c  e1560008          CMP      r6,r8
0000a0  9a000002          BLS      |L1.176|
;;;53        {  i = y0;
0000a4  e1a05006          MOV      r5,r6
;;;54           y0 = y1;
0000a8  e1a06008          MOV      r6,r8
;;;55           y1 = i;
0000ac  e1a08005          MOV      r8,r5
;;;56        }
;;;57        
;;;58        /* 判断是否只是直线 */
;;;59        if(y0==y1) 
                  |L1.176|
0000b0  e1560008          CMP      r6,r8
0000b4  1a000006          BNE      |L1.212|
;;;60        {  GUI_HLine(x0, y0, x1, color);
0000b8  e20720ff          AND      r2,r7,#0xff
0000bc  e20610ff          AND      r1,r6,#0xff
0000c0  e20400ff          AND      r0,r4,#0xff
0000c4  e1a03009          MOV      r3,r9
0000c8  ebfffffe          BL       GUI_HLine
;;;61           return;
;;;62        }
;;;63        if(x0==x1) 
;;;64        {  GUI_RLine(x0, y0, y1, color);
;;;65           return;
;;;66        }
;;;67     
;;;68        while(y0<=y1)						
;;;69        {  GUI_HLine(x0, y0, x1, color);	// 当前画水平线
;;;70           y0++;							// 下一行
;;;71        }
;;;72     }
                  |L1.204|
0000cc  e8bd47f0          POP      {r4-r10,lr}
0000d0  e12fff1e          BX       lr
                  |L1.212|
0000d4  e1540007          CMP      r4,r7                 ;63
0000d8  1a000005          BNE      |L1.244|              ;63
0000dc  e20820ff          AND      r2,r8,#0xff           ;64
0000e0  e20610ff          AND      r1,r6,#0xff           ;64
0000e4  e20400ff          AND      r0,r4,#0xff           ;64
0000e8  e1a03009          MOV      r3,r9                 ;64
0000ec  ebfffffe          BL       GUI_RLine             ;64
0000f0  eafffff5          B        |L1.204|              ;65
                  |L1.244|
0000f4  ea000005          B        |L1.272|              ;68
                  |L1.248|
0000f8  e20720ff          AND      r2,r7,#0xff           ;69
0000fc  e20610ff          AND      r1,r6,#0xff           ;69
000100  e20400ff          AND      r0,r4,#0xff           ;69
000104  e1a03009          MOV      r3,r9                 ;69
000108  ebfffffe          BL       GUI_HLine             ;69
00010c  e2866001          ADD      r6,r6,#1              ;70
                  |L1.272|
000110  e1560008          CMP      r6,r8                 ;68
000114  9afffff7          BLS      |L1.248|              ;68
000118  eaffffeb          B        |L1.204|
                          ENDP

                  GUI_Square PROC
;;;85     void  GUI_Square(uint32 x0, uint32 y0, uint32  with, TCOLOR  color)
;;;86     {   if(with==0) return;
00011c  e92d40f8          PUSH     {r3-r7,lr}
000120  e1a04000          MOV      r4,r0
000124  e1a05001          MOV      r5,r1
000128  e1a06002          MOV      r6,r2
00012c  e1a07003          MOV      r7,r3
000130  e3560000          CMP      r6,#0
000134  1a000001          BNE      |L1.320|
;;;87     	if( (x0+with) > GUI_LCM_XMAX ) return;
;;;88     	if( (y0+with) > GUI_LCM_YMAX ) return;
;;;89     	GUI_Rectangle(x0, y0, x0+with, y0+with, color);
;;;90     }
                  |L1.312|
000138  e8bd40f8          POP      {r3-r7,lr}
00013c  e12fff1e          BX       lr
                  |L1.320|
000140  e0840006          ADD      r0,r4,r6              ;87
000144  e3500054          CMP      r0,#0x54              ;87
000148  9a000000          BLS      |L1.336|              ;87
00014c  eafffff9          B        |L1.312|              ;87
                  |L1.336|
000150  e0850006          ADD      r0,r5,r6              ;88
000154  e3500030          CMP      r0,#0x30              ;88
000158  9a000000          BLS      |L1.352|              ;88
00015c  eafffff5          B        |L1.312|              ;88
                  |L1.352|
000160  e0853006          ADD      r3,r5,r6              ;89
000164  e0842006          ADD      r2,r4,r6              ;89
000168  e1a01005          MOV      r1,r5                 ;89
00016c  e1a00004          MOV      r0,r4                 ;89
000170  e58d7000          STR      r7,[sp,#0]            ;89
000174  ebfffffe          BL       GUI_Rectangle         ;89
000178  eaffffee          B        |L1.312|
                          ENDP

                  GUI_Line PROC
;;;105    void  GUI_Line(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
;;;106    {  int32   dx;						// 直线x轴差值变量
00017c  e92d4ffe          PUSH     {r1-r11,lr}
000180  e1a04000          MOV      r4,r0
000184  e1a05001          MOV      r5,r1
000188  e1a06002          MOV      r6,r2
00018c  e1a07003          MOV      r7,r3
;;;107       int32   dy;          			// 直线y轴差值变量
;;;108       int8    dx_sym;					// x轴增长方向,为-1时减值方向,为1时增值方向
;;;109       int8    dy_sym;					// y轴增长方向,为-1时减值方向,为1时增值方向
;;;110       int32   dx_x2;					// dx*2值变量,用于加快运算速度
;;;111       int32   dy_x2;					// dy*2值变量,用于加快运算速度
;;;112       int32   di;						// 决策变量
;;;113       
;;;114       
;;;115       dx = x1-x0;						// 求取两点之间的差值
000190  e0468004          SUB      r8,r6,r4
;;;116       dy = y1-y0;
000194  e0479005          SUB      r9,r7,r5
;;;117       
;;;118       /* 判断增长方向,或是否为水平线、垂直线、点 */
;;;119       if(dx>0)							// 判断x轴方向
000198  e3580000          CMP      r8,#0
00019c  da000001          BLE      |L1.424|
;;;120       {  dx_sym = 1;					// dx>0,设置dx_sym=1
0001a0  e3a0a001          MOV      r10,#1
0001a4  ea00000a          B        |L1.468|
;;;121       }
;;;122       else
;;;123       {  if(dx<0)
                  |L1.424|
0001a8  e3580000          CMP      r8,#0
0001ac  aa000001          BGE      |L1.440|
;;;124          {  dx_sym = -1;				// dx<0,设置dx_sym=-1
0001b0  e3e0a000          MVN      r10,#0
0001b4  ea000006          B        |L1.468|
;;;125          }
;;;126          else
;;;127          {  // dx==0,画垂直线,或一点
;;;128             GUI_RLine(x0, y0, y1, color);
                  |L1.440|
0001b8  e20720ff          AND      r2,r7,#0xff
0001bc  e20510ff          AND      r1,r5,#0xff
0001c0  e20400ff          AND      r0,r4,#0xff
0001c4  e59d3030          LDR      r3,[sp,#0x30]
0001c8  ebfffffe          BL       GUI_RLine
;;;129          	 return;
;;;130          }
;;;131       }
;;;132       
;;;133       if(dy>0)							// 判断y轴方向
;;;134       {  dy_sym = 1;					// dy>0,设置dy_sym=1
;;;135       }
;;;136       else

⌨️ 快捷键说明

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