📄 nokia_5110.txt
字号:
;;;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 + -