📄 lcd_gui.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\lcd_gui.o --depend=.\OBJ\lcd_gui.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\lcd_gui.crf USER\LCD_GUI.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
Get_CharOffset PROC
;;;149
;;;150 unsigned char Get_CharOffset(unsigned char char_data)
000000 2820 CMP r0,#0x20
;;;151 {
;;;152 if(char_data >= ' ' && char_data <= '}')
000002 db05 BLT |L1.16|
000004 287d CMP r0,#0x7d
000006 dc03 BGT |L1.16|
;;;153 {
;;;154 char_data -= ' '; //字符偏移从空格开始
000008 f1a00120 SUB r1,r0,#0x20
00000c b2c8 UXTB r0,r1
00000e e000 B |L1.18|
|L1.16|
;;;155 }
;;;156 else
;;;157 {
;;;158 char_data = ' '; //如无匹配字符以空格代替
000010 2020 MOVS r0,#0x20
|L1.18|
;;;159 }
;;;160 return char_data;
;;;161 }
000012 4770 BX lr
;;;162 /*
ENDP
LCD_WriteMenuChar PROC
;;;112
;;;113 void LCD_WriteMenuChar(unsigned int start_x, unsigned int start_y,
000014 e92d47f0 PUSH {r4-r10,lr}
;;;114 unsigned int char_clr,
;;;115 unsigned int bk_clr,
;;;116 unsigned char char_data
;;;117 )
;;;118 {
000018 4606 MOV r6,r0
00001a 460f MOV r7,r1
00001c 4691 MOV r9,r2
00001e 4698 MOV r8,r3
000020 f8dda020 LDR r10,[sp,#0x20]
;;;119 unsigned char show_cnt = 0;
000024 2400 MOVS r4,#0
;;;120 unsigned char bit_cnt = 0;
000026 2500 MOVS r5,#0
;;;121
;;;122 start_x <<= 3; //一个英文字符占区域为8*16
000028 00f6 LSLS r6,r6,#3
;;;123 start_y <<= 4;
00002a 013f LSLS r7,r7,#4
;;;124
;;;125 char_data = Get_CharOffset(char_data); //获取字模显示的偏移量
00002c 4650 MOV r0,r10
00002e f7fffffe BL Get_CharOffset
000032 4682 MOV r10,r0
;;;126 for(show_cnt = 0; show_cnt < 16; show_cnt ++)
000034 bf00 NOP
000036 e028 B |L1.138|
|L1.56|
;;;127 { //-> 1010 1100 ->
;;;128 //-> 1100 1000 ->...
;;;129 for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
000038 2500 MOVS r5,#0
00003a e022 B |L1.130|
|L1.60|
;;;130 {
;;;131 if( Letter[char_data][show_cnt] & BIT(7 - bit_cnt) )
00003c 48e3 LDR r0,|L1.972|
00003e eb00100a ADD r0,r0,r10,LSL #4
000042 5d00 LDRB r0,[r0,r4]
000044 f1c50207 RSB r2,r5,#7
000048 2101 MOVS r1,#1
00004a 4091 LSLS r1,r1,r2
00004c 4208 TST r0,r1
00004e d008 BEQ |L1.98|
;;;132 {
;;;133 LCD_DrawPoint(start_x + bit_cnt,
000050 193a ADDS r2,r7,r4
000052 b291 UXTH r1,r2
000054 1972 ADDS r2,r6,r5
000056 b290 UXTH r0,r2
000058 fa1ff289 UXTH r2,r9
00005c f7fffffe BL LCD_DrawPoint
000060 e00d B |L1.126|
|L1.98|
;;;134 start_y + show_cnt,
;;;135 char_clr);
;;;136 }
;;;137 else
;;;138 { //获取背景色,并进行半透明转换
;;;139 //temp_clr = LCD_RGB565Trans(LCD_Get_Point(start_x + bit_cnt, start_y + show_cnt),
;;;140 // bk_clr);
;;;141 bk_clr = LCD_GetPoint(start_x + bit_cnt, start_y + show_cnt);
000062 193a ADDS r2,r7,r4
000064 b291 UXTH r1,r2
000066 1972 ADDS r2,r6,r5
000068 b290 UXTH r0,r2
00006a f7fffffe BL LCD_GetPoint
00006e 4680 MOV r8,r0
;;;142 LCD_DrawPoint(start_x + bit_cnt,
000070 193a ADDS r2,r7,r4
000072 b291 UXTH r1,r2
000074 1972 ADDS r2,r6,r5
000076 b290 UXTH r0,r2
000078 4642 MOV r2,r8
00007a f7fffffe BL LCD_DrawPoint
|L1.126|
00007e 1c68 ADDS r0,r5,#1 ;129
000080 b2c5 UXTB r5,r0 ;129
|L1.130|
000082 2d08 CMP r5,#8 ;129
000084 dbda BLT |L1.60|
000086 1c60 ADDS r0,r4,#1 ;126
000088 b2c4 UXTB r4,r0 ;126
|L1.138|
00008a 2c10 CMP r4,#0x10 ;126
00008c dbd4 BLT |L1.56|
;;;143 start_y + show_cnt,
;;;144 bk_clr);
;;;145 }
;;;146 }
;;;147 }
;;;148 }
00008e e8bd87f0 POP {r4-r10,pc}
;;;149
ENDP
Set_CharWindow PROC
;;;190 */
;;;191 void Set_CharWindow(unsigned int Start_X, unsigned int Start_Y)
000092 e92d41f0 PUSH {r4-r8,lr}
;;;192 {
000096 4604 MOV r4,r0
000098 460d MOV r5,r1
;;;193 unsigned int X_Region = 0;
00009a 2600 MOVS r6,#0
;;;194 unsigned int Y_Region = 0;
00009c 2700 MOVS r7,#0
;;;195 #if LCD_CHAR_HORIZONTAL > 0
;;;196 Start_X <<= 3; //一个英文字符占区域为8*16
;;;197 Start_Y <<= 4;
;;;198
;;;199 X_Region = Start_X + 7; //一行可以显示30个字符
;;;200 Y_Region = Start_Y + 15; //一列可以显示20个字符
;;;201 #else
;;;202 Start_X <<= 4; //一个英文字符占区域为8*16
00009e 0124 LSLS r4,r4,#4
;;;203 Start_Y <<= 3;
0000a0 00ed LSLS r5,r5,#3
;;;204
;;;205 X_Region = Start_X + 15; //一行可以显示15个字符
0000a2 f104060f ADD r6,r4,#0xf
;;;206 Y_Region = Start_Y + 7; //一列可以显示40个字符
0000a6 1def ADDS r7,r5,#7
;;;207 #endif
;;;208 LCD_SetWindow(Start_X, Start_Y, X_Region, Y_Region);
0000a8 b2bb UXTH r3,r7
0000aa b2b2 UXTH r2,r6
0000ac b2a9 UXTH r1,r5
0000ae b2a0 UXTH r0,r4
0000b0 f7fffffe BL LCD_SetWindow
;;;209 }
0000b4 e8bd81f0 POP {r4-r8,pc}
;;;210 /*
ENDP
LCD_WriteChar PROC
;;;242 */
;;;243 void LCD_WriteChar(unsigned int Start_X, unsigned int Start_Y,
0000b8 e92d47f0 PUSH {r4-r10,lr}
;;;244 unsigned int Char_Clr,
;;;245 unsigned int Bk_Clr,
;;;246 unsigned char ch_Char)
;;;247 {
0000bc 4681 MOV r9,r0
0000be 468a MOV r10,r1
0000c0 4616 MOV r6,r2
0000c2 461f MOV r7,r3
0000c4 f8dd8020 LDR r8,[sp,#0x20]
;;;248 unsigned char show_cnt = 0;
0000c8 2400 MOVS r4,#0
;;;249 unsigned char bit_cnt = 0;
0000ca 2500 MOVS r5,#0
;;;250
;;;251 ch_Char = Get_CharOffset(ch_Char); //获取字模显示的偏移量
0000cc 4640 MOV r0,r8
0000ce f7fffffe BL Get_CharOffset
0000d2 4680 MOV r8,r0
;;;252 Set_CharWindow(Start_X, Start_Y); //设置起始坐标,xy是8*16的方格坐标
0000d4 4651 MOV r1,r10
0000d6 4648 MOV r0,r9
0000d8 f7fffffe BL Set_CharWindow
;;;253
;;;254 LCD_WriteGRAM_EN();
0000dc f7fffffe BL LCD_WriteGRAM_EN
;;;255 for(show_cnt = 0; show_cnt < 16; show_cnt ++)
0000e0 bf00 NOP
0000e2 e01a B |L1.282|
|L1.228|
;;;256 { //-> 1010 1100 ->
;;;257 //-> 1100 1000 ->...
;;;258 for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
0000e4 2500 MOVS r5,#0
0000e6 e014 B |L1.274|
|L1.232|
;;;259 {
;;;260 #if LCD_CHAR_HORIZONTAL > 0
;;;261 if( Letter[ch_Char][show_cnt] & BIT(7 - bit_cnt) )
;;;262 {
;;;263 LCD_DATA_OUT(Char_Clr);
;;;264 }
;;;265 else
;;;266 {
;;;267 LCD_DATA_OUT(Bk_Clr);
;;;268 }
;;;269 #else
;;;270 if( Letter[ch_Char][16-show_cnt] & BIT(7 - bit_cnt) )
0000e8 48b8 LDR r0,|L1.972|
0000ea eb001008 ADD r0,r0,r8,LSL #4
0000ee f1c40110 RSB r1,r4,#0x10
0000f2 5c40 LDRB r0,[r0,r1]
0000f4 f1c50207 RSB r2,r5,#7
0000f8 2101 MOVS r1,#1
0000fa 4091 LSLS r1,r1,r2
0000fc 4208 TST r0,r1
0000fe d003 BEQ |L1.264|
;;;271 {
;;;272 LCD_DATA_OUT(Char_Clr);
000100 b2b0 UXTH r0,r6
000102 f7fffffe BL LCD_DATA_OUT
000106 e002 B |L1.270|
|L1.264|
;;;273 }
;;;274 else
;;;275 {
;;;276 LCD_DATA_OUT(Bk_Clr);
000108 b2b8 UXTH r0,r7
00010a f7fffffe BL LCD_DATA_OUT
|L1.270|
00010e 1c68 ADDS r0,r5,#1 ;258
000110 b2c5 UXTB r5,r0 ;258
|L1.274|
000112 2d08 CMP r5,#8 ;258
000114 dbe8 BLT |L1.232|
000116 1c60 ADDS r0,r4,#1 ;255
000118 b2c4 UXTB r4,r0 ;255
|L1.282|
00011a 2c10 CMP r4,#0x10 ;255
00011c dbe2 BLT |L1.228|
;;;277 }
;;;278 #endif
;;;279 }
;;;280 }
;;;281 LCD_WR_END();
00011e 2001 MOVS r0,#1
000120 49ab LDR r1,|L1.976|
000122 6008 STR r0,[r1,#0]
;;;282
;;;283 LCD_SetWindow(0, 0, X_END, Y_END); //恢复全屏作图区域
000124 f240133f MOV r3,#0x13f
000128 f04f02ef MOV r2,#0xef
00012c f04f0100 MOV r1,#0
000130 4608 MOV r0,r1
000132 f7fffffe BL LCD_SetWindow
;;;284 }
000136 e8bd87f0 POP {r4-r10,pc}
;;;285 void Set_HZWindow(unsigned int Start_X, unsigned int Start_Y)
ENDP
Set_HZWindow PROC
00013a e92d41f0 PUSH {r4-r8,lr}
;;;286 {
00013e 4604 MOV r4,r0
000140 460d MOV r5,r1
;;;287 unsigned int X_Region = 0;
000142 2600 MOVS r6,#0
;;;288 unsigned int Y_Region = 0;
000144 2700 MOVS r7,#0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -