📄 lcd_gui.txt
字号:
;;;289 #if LCD_CHAR_HORIZONTAL > 0
;;;290 Start_X <<= 4; //一个英文字符占区域为8*16
;;;291 Start_Y <<= 4;
;;;292
;;;293 X_Region = Start_X + 15; //一行可以显示30个字符
;;;294 Y_Region = Start_Y + 15; //一列可以显示20个字符
;;;295 #else
;;;296 Start_X <<= 4; //一个英文字符占区域为8*16
000146 0124 LSLS r4,r4,#4
;;;297 Start_Y <<= 4;
000148 012d LSLS r5,r5,#4
;;;298
;;;299 X_Region = Start_X + 15; //一行可以显示15个字符
00014a f104060f ADD r6,r4,#0xf
;;;300 Y_Region = Start_Y + 15; //一列可以显示40个字符
00014e f105070f ADD r7,r5,#0xf
;;;301 #endif
;;;302 LCD_SetWindow(Start_X, Start_Y, X_Region, Y_Region);
000152 b2bb UXTH r3,r7
000154 b2b2 UXTH r2,r6
000156 b2a9 UXTH r1,r5
000158 b2a0 UXTH r0,r4
00015a f7fffffe BL LCD_SetWindow
;;;303 }
00015e e8bd81f0 POP {r4-r8,pc}
;;;304
ENDP
LCD_WriteHZ PROC
;;;305 void LCD_WriteHZ(unsigned int Start_X, unsigned int Start_Y,
000162 e92d5fff PUSH {r0-r12,lr}
;;;306 unsigned int Char_Clr,
;;;307 unsigned int Bk_Clr,
;;;308 unsigned char *p_str)
;;;309 {
000166 4688 MOV r8,r1
000168 4691 MOV r9,r2
00016a 469a MOV r10,r3
00016c 9c0e LDR r4,[sp,#0x38]
;;;310
;;;311 unsigned char nowchar = *p_str ++;
00016e f8146b01 LDRB r6,[r4],#1
;;;312
;;;313 while( nowchar != 0 )
000172 e046 B |L1.514|
|L1.372|
;;;314 {
;;;315 unsigned char show_cnt = 0;
000174 2500 MOVS r5,#0
;;;316 unsigned char bit_cnt = 0;
000176 2700 MOVS r7,#0
;;;317 signed char temp = 0;
000178 46ab MOV r11,r5
;;;318 nowchar -= 48;
00017a f1a60030 SUB r0,r6,#0x30
00017e b2c6 UXTB r6,r0
;;;319 Set_HZWindow(Start_X, Start_Y); //设置起始坐标,xy是16*16的方格坐标
000180 4641 MOV r1,r8
000182 9800 LDR r0,[sp,#0]
000184 f7fffffe BL Set_HZWindow
;;;320 LCD_WriteGRAM_EN();
000188 f7fffffe BL LCD_WriteGRAM_EN
;;;321 for(show_cnt = 0; show_cnt < 32; show_cnt ++)
00018c bf00 NOP
00018e e025 B |L1.476|
|L1.400|
;;;322 { //-> 1010 1100 ->
;;;323 //-> 1100 1000 ->...
;;;324 if(show_cnt & BIT(0))
000190 f0150f01 TST r5,#1
000194 d002 BEQ |L1.412|
;;;325 {
;;;326 temp = 1;
000196 f04f0b01 MOV r11,#1
00019a e001 B |L1.416|
|L1.412|
;;;327 }
;;;328 else
;;;329 {
;;;330 temp = -1;
00019c f04f3bff MOV r11,#0xffffffff
|L1.416|
;;;331 }
;;;332
;;;333 for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
0001a0 2700 MOVS r7,#0
0001a2 e017 B |L1.468|
|L1.420|
;;;334 {
;;;335
;;;336 #if LCD_CHAR_HORIZONTAL > 0
;;;337 if( HZtable[nowchar][show_cnt] & BIT(7 - bit_cnt) )
;;;338 {
;;;339 LCD_DATA_OUT(Char_Clr);
;;;340 }
;;;341 else
;;;342 {
;;;343 LCD_DATA_OUT(Bk_Clr);
;;;344 }
;;;345 #else
;;;346 if( HZtable[nowchar][31-show_cnt + temp] & BIT(7-bit_cnt) )
0001a4 488b LDR r0,|L1.980|
0001a6 eb001046 ADD r0,r0,r6,LSL #5
0001aa f1c5011f RSB r1,r5,#0x1f
0001ae 4459 ADD r1,r1,r11
0001b0 5c40 LDRB r0,[r0,r1]
0001b2 f1c70207 RSB r2,r7,#7
0001b6 2101 MOVS r1,#1
0001b8 4091 LSLS r1,r1,r2
0001ba 4208 TST r0,r1
0001bc d004 BEQ |L1.456|
;;;347 {
;;;348 LCD_DATA_OUT(Char_Clr);
0001be fa1ff089 UXTH r0,r9
0001c2 f7fffffe BL LCD_DATA_OUT
0001c6 e003 B |L1.464|
|L1.456|
;;;349 }
;;;350 else
;;;351 {
;;;352 LCD_DATA_OUT(Bk_Clr);
0001c8 fa1ff08a UXTH r0,r10
0001cc f7fffffe BL LCD_DATA_OUT
|L1.464|
0001d0 1c78 ADDS r0,r7,#1 ;333
0001d2 b2c7 UXTB r7,r0 ;333
|L1.468|
0001d4 2f08 CMP r7,#8 ;333
0001d6 dbe5 BLT |L1.420|
0001d8 1c68 ADDS r0,r5,#1 ;321
0001da b2c5 UXTB r5,r0 ;321
|L1.476|
0001dc 2d20 CMP r5,#0x20 ;321
0001de dbd7 BLT |L1.400|
;;;353 }
;;;354 #endif
;;;355 }
;;;356 }
;;;357 LCD_WR_END();
0001e0 2001 MOVS r0,#1
0001e2 497b LDR r1,|L1.976|
0001e4 6008 STR r0,[r1,#0]
;;;358 LCD_SetWindow(0, 0, X_END, Y_END); //恢复全屏作图区域
0001e6 f240133f MOV r3,#0x13f
0001ea f04f02ef MOV r2,#0xef
0001ee f04f0100 MOV r1,#0
0001f2 4608 MOV r0,r1
0001f4 f7fffffe BL LCD_SetWindow
;;;359 nowchar = *p_str ++;
0001f8 f8146b01 LDRB r6,[r4],#1
;;;360 Start_Y += 1;
0001fc f1080801 ADD r8,r8,#1
;;;361 }
000200 bf00 NOP
|L1.514|
000202 2e00 CMP r6,#0 ;313
000204 d1b6 BNE |L1.372|
;;;362 }
000206 e8bd9fff POP {r0-r12,pc}
;;;363
ENDP
LCD_WriteString PROC
;;;364 void LCD_WriteString(unsigned char Start_X, unsigned char Start_Y,
00020a e92d43f8 PUSH {r3-r9,lr}
;;;365 unsigned int Char_Clr,
;;;366 unsigned int Bk_Clr,
;;;367 unsigned char *p_str,
;;;368 unsigned char is_transp)
;;;369 {
00020e 4604 MOV r4,r0
000210 460e MOV r6,r1
000212 4617 MOV r7,r2
000214 4698 MOV r8,r3
000216 e9dd5908 LDRD r5,r9,[sp,#0x20]
;;;370 #if LCD_CHAR_HORIZONTAL > 0
;;;371 #else
;;;372 Start_X = CHAR_X_NUM - Start_X - 1;
00021a f1c4000e RSB r0,r4,#0xe
00021e b2c4 UXTB r4,r0
;;;373 Start_X = (s8)Start_X;
000220 b2e4 UXTB r4,r4
;;;374 #endif
;;;375 while(*p_str)
000222 e027 B |L1.628|
|L1.548|
;;;376 {
;;;377 //计算坐标
;;;378 if(*p_str == '\n') //换行
000224 7828 LDRB r0,[r5,#0]
000226 280a CMP r0,#0xa
000228 d104 BNE |L1.564|
;;;379 {
;;;380 Start_X = 0;
00022a 2400 MOVS r4,#0
;;;381 Start_Y ++;
00022c 1c70 ADDS r0,r6,#1
00022e b2c6 UXTB r6,r0
;;;382 p_str ++; //调过换行符,不用显示
000230 1c6d ADDS r5,r5,#1
;;;383 continue; //查询下一个字符
000232 e01f B |L1.628|
|L1.564|
;;;384 }
;;;385 else //未遇到换行符则按正常显示坐标自加
;;;386 {
;;;387 //显示字符
;;;388 if(is_transp) //如果字符不为0则限制显示定长个字符
000234 f1b90f00 CMP r9,#0
000238 d008 BEQ |L1.588|
;;;389 { //调用显示单个字符显示函数(较慢)
;;;390 LCD_WriteMenuChar(Start_X, Start_Y,
00023a 782b LDRB r3,[r5,#0]
00023c 9300 STR r3,[sp,#0]
00023e 4643 MOV r3,r8
000240 463a MOV r2,r7
000242 4631 MOV r1,r6
000244 4620 MOV r0,r4
000246 f7fffffe BL LCD_WriteMenuChar
00024a e007 B |L1.604|
|L1.588|
;;;391 Char_Clr, Bk_Clr,
;;;392 *p_str);
;;;393 }
;;;394 else
;;;395 {
;;;396 LCD_WriteChar(Start_X, Start_Y, //调用显示普通字符显示函数(较快)
00024c 782b LDRB r3,[r5,#0]
00024e 9300 STR r3,[sp,#0]
000250 4643 MOV r3,r8
000252 463a MOV r2,r7
000254 4631 MOV r1,r6
000256 4620 MOV r0,r4
000258 f7fffffe BL LCD_WriteChar
|L1.604|
;;;397 Char_Clr, Bk_Clr,
;;;398 *p_str);
;;;399 }
;;;400 #if LCD_CHAR_HORIZONTAL > 0
;;;401 Start_X ++;
;;;402 if(Start_X == CHAR_X_NUM)
;;;403 {
;;;404 Start_X = 0;
;;;405 Start_Y ++;
;;;406 if(Start_Y == CHAR_Y_NUM)
;;;407 {
;;;408 Start_Y = 0;
;;;409 }
;;;410 }
;;;411 #else
;;;412 Start_Y ++;
00025c 1c70 ADDS r0,r6,#1
00025e b2c6 UXTB r6,r0
;;;413 if(Start_Y == CHAR_Y_NUM)
000260 2e28 CMP r6,#0x28
000262 d105 BNE |L1.624|
;;;414 {
;;;415 Start_Y = 0;
000264 2600 MOVS r6,#0
;;;416 Start_X --;
000266 1e60 SUBS r0,r4,#1
000268 b2c4 UXTB r4,r0
;;;417 if(Start_X < 0)
00026a 2c00 CMP r4,#0
00026c da00 BGE |L1.624|
;;;418 {
;;;419 Start_X = CHAR_X_NUM - 1;
00026e 240e MOVS r4,#0xe
|L1.624|
;;;420 }
;;;421 }
;;;422 #endif
;;;423
;;;424 }
;;;425
;;;426 //字符串指针自加
;;;427 p_str ++;
000270 1c6d ADDS r5,r5,#1
000272 bf00 NOP ;383
|L1.628|
000274 7828 LDRB r0,[r5,#0] ;375
000276 2800 CMP r0,#0 ;375
000278 d1d4 BNE |L1.548|
;;;428 }
;;;429 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -