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

📄 nokia_5110.txt

📁 嵌入式开发
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;329        {
;;;330    	 LCD_write_byte(filldata,1);
                  |L1.1512|
0005e8  e3a01001          MOV      r1,#1
0005ec  e1a00004          MOV      r0,r4
0005f0  ebfffffe          BL       LCD_write_byte
0005f4  e2850001          ADD      r0,r5,#1              ;328
0005f8  e20050ff          AND      r5,r0,#0xff           ;328
                  |L1.1532|
0005fc  e3550054          CMP      r5,#0x54              ;328
000600  bafffff8          BLT      |L1.1512|             ;328
000604  e2860001          ADD      r0,r6,#1              ;325
000608  e20060ff          AND      r6,r0,#0xff           ;325
                  |L1.1548|
00060c  e3560008          CMP      r6,#8                 ;325
000610  baffffef          BLT      |L1.1492|             ;325
;;;331    	}	
;;;332      }
;;;333    
;;;334    
;;;335    }
000614  e8bd4070          POP      {r4-r6,lr}
000618  e12fff1e          BX       lr
                          ENDP

                  GUI_FillSCR PROC
;;;343    void  GUI_FillSCR(TCOLOR dat)
;;;344    {  uint32 i,j;
00061c  e92d4070          PUSH     {r4-r6,lr}
000620  e1a04000          MOV      r4,r0
;;;345      
;;;346       // 填充缓冲区
;;;347       for(i=0; i<(GUI_LCM_YMAX/8); i++)
000624  e3a05000          MOV      r5,#0
000628  ea00000a          B        |L1.1624|
;;;348       {  for(j=0; j<GUI_LCM_XMAX; j++)
                  |L1.1580|
00062c  e3a06000          MOV      r6,#0
000630  ea000005          B        |L1.1612|
;;;349          {  gui_disp_buf[i][j] = dat;
                  |L1.1588|
000634  e3a00015          MOV      r0,#0x15
000638  e0000095          MUL      r0,r5,r0
00063c  e59f1294          LDR      r1,|L1.2264|
000640  e0810100          ADD      r0,r1,r0,LSL #2
000644  e7c04006          STRB     r4,[r0,r6]
000648  e2866001          ADD      r6,r6,#1              ;348
                  |L1.1612|
00064c  e3560054          CMP      r6,#0x54              ;348
000650  3afffff7          BCC      |L1.1588|             ;348
000654  e2855001          ADD      r5,r5,#1              ;347
                  |L1.1624|
000658  e3550006          CMP      r5,#6                 ;347
00065c  3afffff2          BCC      |L1.1580|             ;347
;;;350          }
;;;351       }
;;;352       
;;;353       // 填充LCM
;;;354       LCM_DispFill(dat);
000660  e1a00004          MOV      r0,r4
000664  ebfffffe          BL       LCM_DispFill
;;;355    }
000668  e8bd4070          POP      {r4-r6,lr}
00066c  e12fff1e          BX       lr
                          ENDP

                  GUI_Initialize PROC
;;;365    void  GUI_Initialize(void)
;;;366    { 
000670  e52de004          PUSH     {lr}
;;;367    		LCD_init(); //初始化液晶    
000674  ebfffffe          BL       LCD_init
;;;368     	    LCD_clear();			// 初始化缓冲区为0x00,并输出屏幕(清屏)
000678  ebfffffe          BL       LCD_clear
;;;369    }
00067c  e49de004          POP      {lr}
000680  e12fff1e          BX       lr
                          ENDP

                  GUI_Point PROC
;;;381    uint8  GUI_Point(uint8 x, uint8 y, TCOLOR color)
;;;382    {  uint8   bak;
000684  e92d40f0          PUSH     {r4-r7,lr}
000688  e1a05000          MOV      r5,r0
00068c  e1a06001          MOV      r6,r1
000690  e1a07002          MOV      r7,r2
;;;383       
;;;384       // 参数过滤 
;;;385       if(x>=GUI_LCM_XMAX) return(0);
000694  e3550054          CMP      r5,#0x54
000698  ba000002          BLT      |L1.1704|
00069c  e3a00000          MOV      r0,#0
                  |L1.1696|
0006a0  e8bd40f0          POP      {r4-r7,lr}
;;;386       if(y>=GUI_LCM_YMAX) return(0);
;;;387       
;;;388       // 设置相应的点为1或0 
;;;389       bak = LCM_ReadByte(x,y);
;;;390       if(0==color)
;;;391       {  bak &= (~DEC_HEX_TAB[y&0x07]);
;;;392       }
;;;393       else
;;;394       {  bak |= DEC_HEX_TAB[y&0x07];
;;;395       }
;;;396      
;;;397       // 刷新显示 
;;;398       LCM_WriteByte(x, y, bak);
;;;399       return(1);
;;;400    }
0006a4  e12fff1e          BX       lr
                  |L1.1704|
0006a8  e3560030          CMP      r6,#0x30              ;386
0006ac  ba000001          BLT      |L1.1720|             ;386
0006b0  e3a00000          MOV      r0,#0                 ;386
0006b4  eafffff9          B        |L1.1696|             ;386
                  |L1.1720|
0006b8  e1a01006          MOV      r1,r6                 ;389
0006bc  e1a00005          MOV      r0,r5                 ;389
0006c0  ebfffffe          BL       LCM_ReadByte          ;389
0006c4  e1a04000          MOV      r4,r0                 ;389
0006c8  e3570000          CMP      r7,#0                 ;390
0006cc  1a000005          BNE      |L1.1768|             ;390
0006d0  e2060007          AND      r0,r6,#7              ;391
0006d4  e59f1200          LDR      r1,|L1.2268|          ;391
0006d8  e7d10000          LDRB     r0,[r1,r0]            ;391
0006dc  e1c40000          BIC      r0,r4,r0              ;391
0006e0  e20040ff          AND      r4,r0,#0xff           ;391
0006e4  ea000003          B        |L1.1784|             ;391
                  |L1.1768|
0006e8  e2060007          AND      r0,r6,#7              ;394
0006ec  e59f11e8          LDR      r1,|L1.2268|          ;394
0006f0  e7d10000          LDRB     r0,[r1,r0]            ;394
0006f4  e1844000          ORR      r4,r4,r0              ;394
                  |L1.1784|
0006f8  e1a02004          MOV      r2,r4                 ;398
0006fc  e1a01006          MOV      r1,r6                 ;398
000700  e1a00005          MOV      r0,r5                 ;398
000704  ebfffffe          BL       LCM_WriteByte         ;398
000708  e3a00001          MOV      r0,#1                 ;399
00070c  eaffffe3          B        |L1.1696|             ;399
                          ENDP

                  GUI_ReadPoint PROC
;;;411    uint8  GUI_ReadPoint(uint8 x, uint8 y, TCOLOR *ret)
;;;412    {  uint8  bak;
000710  e92d40f0          PUSH     {r4-r7,lr}
000714  e1a05000          MOV      r5,r0
000718  e1a06001          MOV      r6,r1
00071c  e1a07002          MOV      r7,r2
;;;413    
;;;414       // 参数过滤
;;;415       if(x>=GUI_LCM_XMAX) return(0);
000720  e3550054          CMP      r5,#0x54
000724  ba000002          BLT      |L1.1844|
000728  e3a00000          MOV      r0,#0
                  |L1.1836|
00072c  e8bd40f0          POP      {r4-r7,lr}
;;;416       if(y>=GUI_LCM_YMAX) return(0);
;;;417      
;;;418       bak = LCM_ReadByte(x,y);
;;;419       if( (bak & (DEC_HEX_TAB[y&0x07])) == 0 ) *ret = 0x00;
;;;420         else  *ret = 0x01;
;;;421       
;;;422       return(1);
;;;423    }
000730  e12fff1e          BX       lr
                  |L1.1844|
000734  e3560030          CMP      r6,#0x30              ;416
000738  ba000001          BLT      |L1.1860|             ;416
00073c  e3a00000          MOV      r0,#0                 ;416
000740  eafffff9          B        |L1.1836|             ;416
                  |L1.1860|
000744  e1a01006          MOV      r1,r6                 ;418
000748  e1a00005          MOV      r0,r5                 ;418
00074c  ebfffffe          BL       LCM_ReadByte          ;418
000750  e1a04000          MOV      r4,r0                 ;418
000754  e2060007          AND      r0,r6,#7              ;419
000758  e59f117c          LDR      r1,|L1.2268|          ;419
00075c  e7d11000          LDRB     r1,[r1,r0]            ;419
000760  e1110004          TST      r1,r4                 ;419
000764  1a000002          BNE      |L1.1908|             ;419
000768  e3a00000          MOV      r0,#0                 ;419
00076c  e5c70000          STRB     r0,[r7,#0]            ;419
000770  ea000001          B        |L1.1916|             ;419
                  |L1.1908|
000774  e3a00001          MOV      r0,#1                 ;420
000778  e5c70000          STRB     r0,[r7,#0]            ;420
                  |L1.1916|
00077c  e3a00001          MOV      r0,#1                 ;422
000780  eaffffe9          B        |L1.1836|             ;422
                          ENDP

                  GUI_HLine PROC
;;;434    void  GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color) 
;;;435    {  uint8  bak;
000784  e92d41f0          PUSH     {r4-r8,lr}
000788  e1a06000          MOV      r6,r0
00078c  e1a07001          MOV      r7,r1
000790  e1a04002          MOV      r4,r2
000794  e1a08003          MOV      r8,r3
;;;436    
;;;437       if(x0>x1) 						// 对x0、x1大小进行排列,以便画图
000798  e1560004          CMP      r6,r4
00079c  da000002          BLE      |L1.1964|
;;;438       {  bak = x1;
0007a0  e1a05004          MOV      r5,r4
;;;439          x1 = x0;
0007a4  e1a04006          MOV      r4,r6
;;;440          x0 = bak;
0007a8  e1a06005          MOV      r6,r5
;;;441       }
;;;442       
;;;443       do
                  |L1.1964|
0007ac  e1a00000          MOV      r0,r0
;;;444       {  GUI_Point(x0, y0, color);		// 逐点显示,描出垂直线
                  |L1.1968|
0007b0  e1a02008          MOV      r2,r8
0007b4  e1a01007          MOV      r1,r7
0007b8  e1a00006          MOV      r0,r6
0007bc  ebfffffe          BL       GUI_Point
;;;445          x0++;
0007c0  e2860001          ADD      r0,r6,#1
0007c4  e20060ff          AND      r6,r0,#0xff
;;;446       }while(x1>=x0);
0007c8  e1540006          CMP      r4,r6
0007cc  aafffff7          BGE      |L1.1968|
;;;447    }
0007d0  e8bd41f0          POP      {r4-r8,lr}
0007d4  e12fff1e          BX       lr
                          ENDP

                  GUI_RLine PROC
;;;459    void  GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color) 
;;;460    {  uint8  bak;
0007d8  e92d43f0          PUSH     {r4-r9,lr}
0007dc  e1a07000          MOV      r7,r0
0007e0  e1a06001          MOV      r6,r1
0007e4  e1a04002          MOV      r4,r2
0007e8  e1a08003          MOV      r8,r3
;;;461       uint8  wr_dat;
;;;462      
;;;463       if(y0>y1) 		// 对y0、y1大小进行排列,以便画图
0007ec  e1560004          CMP      r6,r4
0007f0  da000002          BLE      |L1.2048|
;;;464       {  bak = y1;
0007f4  e1a05004          MOV      r5,r4
;;;465          y1 = y0;
0007f8  e1a04006          MOV      r4,r6
;;;466          y0 = bak;
0007fc  e1a06005          MOV      r6,r5
;;;467       }
;;;468       
;;;469       do
                  |L1.2048|
000800  e1a00000          MOV      r0,r0
;;;470       {  // 先读取当前点的字节数据
;;;471          bak = LCM_ReadByte(x0,y0);	
                  |L1.2052|
000804  e1a01006          MOV      r1,r6
000808  e1a00007          MOV      r0,r7
00080c  ebfffffe          BL       LCM_ReadByte
000810  e1a05000          MOV      r5,r0
;;;472          
;;;473          // 进行'与'/'或'操作后,将正确的数据写回LCM
;;;474          // 若y0和y1不是同一字节,则y0--当前字节结束,即(y0+8)&0x38,全写1,或者0。
;;;475          // 若y0和y1是同一字节,则y0--y1,要全写1,或者0。
;;;476          // 方法:dat=0xff,然后按y0清零dat低位,按y1清零高位。
;;;477          if((y0>>3) != (y1>>3))		// 竖直线是否跨越两个字节(或以上)
000814  e1a001c6          ASR      r0,r6,#3
000818  e15001c4          CMP      r0,r4,ASR #3
00081c  0a000011          BEQ      |L1.2152|
;;;478          {  wr_dat = 0xFF << (y0&0x07);// 清0低位
000820  e2060007          AND      r0,r6,#7
000824  e3a010ff          MOV      r1,#0xff
000828  e1a00011          LSL      r0,r1,r0
00082c  e20090ff          AND      r9,r0,#0xff
;;;479          
;;;480             if(color)					
000830  e3580000          CMP      r8,#0
000834  0a000001          BEQ      |L1.2112|
;;;481             {  wr_dat = bak | wr_dat;	// 若color不为0,则显示
000838  e1899005          ORR      r9,r9,r5
00083c  ea000002          B        |L1.2124|
;;;482             }
;;;483             else
;;;484             {  wr_dat = ~wr_dat;		// 若color为0,则清除显示
                  |L1.2112|
000840  e1e00009          MVN      r0,r9
000844  e20090ff          AND      r9,r0,#0xff
;;;485                wr_dat = bak & wr_dat;
000848  e0099005          AND      r9,r9,r5
;;;486             }
;;;487             LCM_WriteByte(x0,y0, wr_dat);
                  |L1.2124|
00084c  e1a02009          MOV      r2,r9
000850  e1a01006          MOV      r1,r6
000854  e1a00007          MOV      r0,r7
000858  ebfffffe          BL       LCM_WriteByte
;;;488             y0 = (y0+8)&0x38;
00085c  e2860008          ADD      r0,r6,#8
000860  e2006038          AND      r6,r0,#0x38
000864  ea000013          B        |L1.2232|
;;;489          }
;;;490          else
;;;491          {  wr_dat = 0xFF << (y0&0x07);
                  |L1.2152|
000868  e2060007          AND      r0,r6,#7
00086c  e3a010ff          MOV      r1,#0xff
000870  e1a00011          LSL      r0,r1,r0
000874  e20090ff          AND      r9,r0,#0xff
;;;492             wr_dat = wr_dat &  ( 0xFF >> (7-(y1&0x07)) );
000878  e2040007          AND      r0,r4,#7
00087c  e2600007          RSB      r0,r0,#7
000880  e0099051          AND      r9,r9,r1,ASR r0
;;;493                  
;;;494             if(color)					
000884  e3580000          CMP      r8,#0
000888  0a000001          BEQ      |L1.2196|
;;;495             {  wr_dat = bak | wr_dat;	// 若color不为0,则显示
00088c  e1899005          ORR      r9,r9,r5

⌨️ 快捷键说明

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