; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d] ; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o..\list\lcd_st7920.o --asm_dir=..\List\ --list_dir=..\List\ --depend=..\list\lcd_st7920.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931 -I..\src\myprintf -I..\src\RTT -I.\RTE\_XWY -ID:\Keil\ARM\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include -ID:\Keil\ARM\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -D_RTE_ -DSTM32F10X_HD -D_RTE_ -D_DEBUG --omf_browse=..\list\lcd_st7920.crf ..\src\lcd_st7920.c] THUMB AREA ||i.LCD_DELAY_NOP||, CODE, READONLY, ALIGN=1 LCD_DELAY_NOP PROC ;;;28 ;;;29 void LCD_DELAY_NOP (void) 000000 2000 MOVS r0,#0 ;;;30 { ;;;31 u16 i; ;;;32 ;;;33 for(i = 0; i < LCD_DELAY_NOP_NUM; i++); 000002 e001 B |L1.8| |L1.4| 000004 1c41 ADDS r1,r0,#1 000006 b288 UXTH r0,r1 |L1.8| 000008 280a CMP r0,#0xa 00000a dbfb BLT |L1.4| ;;;34 } 00000c 4770 BX lr ;;;35 ENDP AREA ||i.delay_ms||, CODE, READONLY, ALIGN=1 delay_ms PROC ;;;17 ;;;18 void delay_ms (u16 ms_num) 000000 e008 B |L2.20| |L2.2| ;;;19 { ;;;20 u16 i; ;;;21 ;;;22 while(ms_num != 0) ;;;23 { ;;;24 ms_num--; 000002 1e42 SUBS r2,r0,#1 000004 b290 UXTH r0,r2 ;;;25 for(i = 0; i < delay_ms_num; i++); 000006 2100 MOVS r1,#0 000008 e001 B |L2.14| |L2.10| 00000a 1c4a ADDS r2,r1,#1 00000c b291 UXTH r1,r2 |L2.14| 00000e f5b17f7a CMP r1,#0x3e8 000012 dbfa BLT |L2.10| |L2.20| 000014 2800 CMP r0,#0 ;22 000016 d1f4 BNE |L2.2| ;;;26 } ;;;27 } 000018 4770 BX lr ;;;28 ENDP AREA ||i.lcd_display||, CODE, READONLY, ALIGN=1 lcd_display PROC ;;;186 //LCD显示字符 ;;;187 void lcd_display (u16 c) 000000 b570 PUSH {r4-r6,lr} ;;;188 { 000002 4604 MOV r4,r0 ;;;189 u8 temp; ;;;190 ;;;191 if (c < 128) 000004 2c80 CMP r4,#0x80 000006 da05 BGE |L3.20| ;;;192 { ;;;193 temp = (u8)(c); 000008 b2e5 UXTB r5,r4 ;;;194 lcd_write (LCD_DATA, temp); 00000a 4629 MOV r1,r5 00000c 20fa MOVS r0,#0xfa 00000e f7fffffe BL lcd_write 000012 e009 B |L3.40| |L3.20| ;;;195 } ;;;196 else ;;;197 { ;;;198 temp = (u8)(c >> 8); 000014 1225 ASRS r5,r4,#8 ;;;199 lcd_write (LCD_DATA, temp); 000016 4629 MOV r1,r5 000018 20fa MOVS r0,#0xfa 00001a f7fffffe BL lcd_write ;;;200 ;;;201 temp = (u8)(c); 00001e b2e5 UXTB r5,r4 ;;;202 lcd_write (LCD_DATA, temp); 000020 4629 MOV r1,r5 000022 20fa MOVS r0,#0xfa 000024 f7fffffe BL lcd_write |L3.40| ;;;203 } ;;;204 } 000028 bd70 POP {r4-r6,pc} ;;;205 ENDP AREA ||i.lcd_display_black||, CODE, READONLY, ALIGN=2 lcd_display_black PROC ;;;563 //反白显示,多字符 ;;;564 void lcd_display_black (u8 y, u8 x, u8 length, u8 style) 000000 e92d5fff PUSH {r0-r12,lr} ;;;565 { 000004 4604 MOV r4,r0 000006 460f MOV r7,r1 000008 4690 MOV r8,r2 ;;;566 u8 i, it, n, es, ee; ;;;567 ;;;568 if (style) 00000a 9803 LDR r0,[sp,#0xc] 00000c b108 CBZ r0,|L4.18| ;;;569 it = 0xff; 00000e 26ff MOVS r6,#0xff 000010 e000 B |L4.20| |L4.18| ;;;570 else ;;;571 it = 0x00; 000012 2600 MOVS r6,#0 |L4.20| ;;;572 ;;;573 if (y < 2) 000014 2c02 CMP r4,#2 000016 da03 BGE |L4.32| ;;;574 lcd_post_select = 0; 000018 2000 MOVS r0,#0 00001a 491e LDR r1,|L4.148| 00001c 7008 STRB r0,[r1,#0] 00001e e004 B |L4.42| |L4.32| ;;;575 else ;;;576 { ;;;577 lcd_post_select = 1; 000020 2001 MOVS r0,#1 000022 491c LDR r1,|L4.148| 000024 7008 STRB r0,[r1,#0] ;;;578 y -= 2; 000026 1ea0 SUBS r0,r4,#2 000028 b2c4 UXTB r4,r0 |L4.42| ;;;579 } ;;;580 ;;;581 es = y * 16; 00002a 0720 LSLS r0,r4,#28 00002c ea4f6a10 LSR r10,r0,#24 ;;;582 ee = y * 16 + 16; 000030 2010 MOVS r0,#0x10 000032 eb001004 ADD r0,r0,r4,LSL #4 000036 f0000bff AND r11,r0,#0xff ;;;583 ;;;584 lcd_write (LCD_COMMAND, 0x34); //关闭屏幕 00003a 2134 MOVS r1,#0x34 00003c 20f8 MOVS r0,#0xf8 00003e f7fffffe BL lcd_write ;;;585 ;;;586 for (n = es; n < ee; n++) 000042 4655 MOV r5,r10 000044 e01a B |L4.124| |L4.70| ;;;587 { ;;;588 lcd_write (LCD_COMMAND, 0x80 + n); //设置绘图区的Y地址坐标0 000046 f1050080 ADD r0,r5,#0x80 00004a b2c1 UXTB r1,r0 00004c 20f8 MOVS r0,#0xf8 00004e f7fffffe BL lcd_write ;;;589 lcd_write (LCD_COMMAND, 0x80 + x); //设置绘图区的X地址坐标 000052 f1070080 ADD r0,r7,#0x80 000056 b2c1 UXTB r1,r0 000058 20f8 MOVS r0,#0xf8 00005a f7fffffe BL lcd_write ;;;590 for(i = 0; i < length; i++) //每行 00005e f04f0900 MOV r9,#0 000062 e007 B |L4.116| |L4.100| ;;;591 lcd_write (LCD_DATA, it); 000064 4631 MOV r1,r6 000066 20fa MOVS r0,#0xfa 000068 f7fffffe BL lcd_write 00006c f1090001 ADD r0,r9,#1 ;590 000070 f00009ff AND r9,r0,#0xff ;590 |L4.116| 000074 45c1 CMP r9,r8 ;590 000076 dbf5 BLT |L4.100| 000078 1c68 ADDS r0,r5,#1 ;586 00007a b2c5 UXTB r5,r0 ;586 |L4.124| 00007c 455d CMP r5,r11 ;586 00007e dbe2 BLT |L4.70| ;;;592 } ;;;593 ;;;594 lcd_write (LCD_COMMAND, 0x36); //打开屏幕 000080 2136 MOVS r1,#0x36 000082 20f8 MOVS r0,#0xf8 000084 f7fffffe BL lcd_write ;;;595 lcd_write (LCD_COMMAND, 0x30); //返回文本模式 000088 2130 MOVS r1,#0x30 00008a 20f8 MOVS r0,#0xf8 00008c f7fffffe BL lcd_write ;;;596 } 000090 e8bd9fff POP {r0-r12,pc} ;;;597 ENDP |L4.148| DCD lcd_post_select AREA ||i.lcd_display_black_one||, CODE, READONLY, ALIGN=2 lcd_display_black_one PROC ;;;598 //反白显示,单ASCII字符,y第几行,x第几个ASCII字符,最大23 ;;;599 void lcd_display_black_one (u8 y, u8 x, u8 style) 000000 e92d5ff0 PUSH {r4-r12,lr} ;;;600 { 000004 4605 MOV r5,r0 000006 460e MOV r6,r1 000008 4692 MOV r10,r2 ;;;601 u8 it, n, es, ee, post; ;;;602 ;;;603 if (style) 00000a f1ba0f00 CMP r10,#0 00000e d001 BEQ |L5.20| ;;;604 it = 0xff; 000010 27ff MOVS r7,#0xff 000012 e000 B |L5.22| |L5.20| ;;;605 else ;;;606 it = 0x00; 000014 2700 MOVS r7,#0 |L5.22| ;;;607 ;;;608 if (y < 2) 000016 2d02 CMP r5,#2 000018 da03 BGE |L5.34| ;;;609 lcd_post_select = 0; 00001a 2000 MOVS r0,#0 00001c 492a LDR r1,|L5.200| 00001e 7008 STRB r0,[r1,#0] 000020 e004 B |L5.44| |L5.34| ;;;610 else ;;;611 { ;;;612 lcd_post_select = 1; 000022 2001 MOVS r0,#1 000024 4928 LDR r1,|L5.200| 000026 7008 STRB r0,[r1,#0] ;;;613 y -= 2; 000028 1ea8 SUBS r0,r5,#2 00002a b2c5 UXTB r5,r0 |L5.44| ;;;614 } ;;;615 ;;;616 es = y * 16; 00002c 0728 LSLS r0,r5,#28 00002e ea4f6810 LSR r8,r0,#24 ;;;617 ee = y * 16 + 16; 000032 2010 MOVS r0,#0x10 000034 eb001005 ADD r0,r0,r5,LSL #4 000038 f00009ff AND r9,r0,#0xff ;;;618 ;;;619 post = x & 0x01; 00003c f0060b01 AND r11,r6,#1 ;;;620 x >>= 1; 000040 1076 ASRS r6,r6,#1 ;;;621 ;;;622 lcd_write (LCD_COMMAND, 0x34); //关闭屏幕 000042 2134 MOVS r1,#0x34 000044 20f8 MOVS r0,#0xf8 000046 f7fffffe BL lcd_write ;;;623 ;;;624 if (post == 0) 00004a f1bb0f00 CMP r11,#0 00004e d116 BNE |L5.126| ;;;625 { ;;;626 for (n = es; n < ee; n++) 000050 4644 MOV r4,r8 000052 e011 B |L5.120| |L5.84| ;;;627 { ;;;628 lcd_write (LCD_COMMAND, 0x80 + n); //设置绘图区的Y地址坐标0 000054 f1040080 ADD r0,r4,#0x80 000058 b2c1 UXTB r1,r0 00005a 20f8 MOVS r0,#0xf8 00005c f7fffffe BL lcd_write ;;;629 lcd_write (LCD_COMMAND, 0x80 + x); //设置绘图区的X地址坐标 000060 f1060080 ADD r0,r6,#0x80 000064 b2c1 UXTB r1,r0 000066 20f8 MOVS r0,#0xf8 000068 f7fffffe BL lcd_write ;;;630 lcd_write (LCD_DATA, it); 00006c 4639 MOV r1,r7 00006e 20fa MOVS r0,#0xfa 000070 f7fffffe BL lcd_write 000074 1c60 ADDS r0,r4,#1 ;626 000076 b2c4 UXTB r4,r0 ;626 |L5.120| 000078 454c CMP r4,r9 ;626 00007a dbeb BLT |L5.84| 00007c e019 B |L5.178| |L5.126| ;;;631 } ;;;632 } ;;;633 else ;;;634 { ;;;635 for (n = es; n < ee; n++) 00007e 4644 MOV r4,r8 000080 e015 B |L5.174| |L5.130| ;;;636 { ;;;637 lcd_write (LCD_COMMAND, 0x80 + n); //设置绘图区的Y地址坐标0 000082 f1040080 ADD r0,r4,#0x80 000086 b2c1 UXTB r1,r0 000088 20f8 MOVS r0,#0xf8 00008a f7fffffe BL lcd_write ;;;638 lcd_write (LCD_COMMAND, 0x80 + x); //设置绘图区的X地址坐标 00008e f1060080 ADD r0,r6,#0x80 000092 b2c1 UXTB r1,r0 000094 20f8 MOVS r0,#0xf8 000096 f7fffffe BL lcd_write ;;;639 lcd_write (LCD_DATA, 0x00); 00009a 2100 MOVS r1,#0 00009c 20fa MOVS r0,#0xfa 00009e f7fffffe BL lcd_write ;;;640 lcd_write (LCD_DATA, it); 0000a2 4639 MOV r1,r7 0000a4 20fa MOVS r0,#0xfa 0000a6 f7fffffe BL lcd_write 0000aa 1c60 ADDS r0,r4,#1 ;635 0000ac b2c4 UXTB r4,r0 ;635 |L5.174| 0000ae 454c CMP r4,r9 ;635 0000b0 dbe7 BLT |L5.130| |L5.178| ;;;641 } ;;;642 } ;;;643 ;;;644 lcd_write (LCD_COMMAND, 0x36); //打开屏幕 0000b2 2136 MOVS r1,#0x36 0000b4 20f8 MOVS r0,#0xf8 0000b6 f7fffffe BL lcd_write ;;;645 lcd_write (LCD_COMMAND, 0x30); //返回文本模式 0000ba 2130 MOVS r1,#0x30 0000bc 20f8 MOVS r0,#0xf8 0000be f7fffffe BL lcd_write ;;;646 } 0000c2 e8bd9ff0 POP {r4-r12,pc} ENDP 0000c6 0000 DCW 0x0000 |L5.200| DCD lcd_post_select AREA ||i.lcd_display_string||, CODE, READONLY, ALIGN=2 lcd_display_string PROC ;;;206 //LCD显示字符串 ;;;207 void lcd_display_string (u8 x, u8 y, u8 *p) 000000 b570 PUSH {r4-r6,lr} ;;;208 { 000002 4605 MOV r5,r0 000004 460e MOV r6,r1 000006 4614 MOV r4,r2 ;;;209 if (x == 0) 000008 b91d CBNZ r5,|L6.18| ;;;210 Ai_CTRL.PWM_STATUS_FLAG = 1; 00000a 2001 MOVS r0,#1 00000c 4908 LDR r1,|L6.48| 00000e f8c100b0 STR r0,[r1,#0xb0] ; Ai_CTRL |L6.18| ;;;211 ;;;212 lcd_post (x, y); 000012 4631 MOV r1,r6 000014 4628 MOV r0,r5 000016 f7fffffe BL lcd_post ;;;213 ;;;214 while(*p != 0) 00001a e004 B |L6.38| |L6.28| ;;;215 lcd_write (LCD_DATA, *p++); 00001c f8141b01 LDRB r1,[r4],#1 000020 20fa MOVS r0,#0xfa 000022 f7fffffe BL lcd_write |L6.38| 000026 7820 LDRB r0,[r4,#0] ;214 000028 2800 CMP r0,#0 ;214 00002a d1f7 BNE |L6.28| ;;;216 } 00002c bd70 POP {r4-r6,pc} ;;;217 ENDP 00002e 0000 DCW 0x0000 |L6.48| DCD Ai_CTRL AREA ||i.lcd_display_temp_space||, CODE, READONLY, ALIGN=2 lcd_display_temp_space PROC ;;;218 //LCD温度显示后补充空白显示字符串 ;;;219 void lcd_display_temp_space (void) 000000 e92d47f0 PUSH {r4-r10,lr} ;;;220 { ;;;221 u32 z, a, b, c, d, e; ;;;222 u8 flag; ;;;223 ;;;224 if (MFL_PARA_A.temp_dis_more_flag == 0) 000004 489e LDR r0,|L7.640| 000006 f8d000f4 LDR r0,[r0,#0xf4] ; MFL_PARA_A 00000a b9f0 CBNZ r0,|L7.74| ;;;225 { ;;;226 lcd_display (' '); 00000c 2020 MOVS r0,#0x20 00000e f7fffffe BL lcd_display ;;;227 lcd_display (' '); 000012 2020 MOVS r0,#0x20 000014 f7fffffe BL lcd_display ;;;228 lcd_display (' '); 000018 2020 MOVS r0,#0x20 00001a f7fffffe BL lcd_display ;;;229 lcd_display (' '); 00001e 2020 MOVS r0,#0x20 000020 f7fffffe BL lcd_display ;;;230 lcd_display (' '); 000024 2020 MOVS r0,#0x20 000026 f7fffffe BL lcd_display ;;;231 ;;;232 lcd_display (' '); 00002a 2020 MOVS r0,#0x20 00002c f7fffffe BL lcd_display ;;;233 lcd_display (' '); 000030 2020 MOVS r0,#0x20 000032 f7fffffe BL lcd_display ;;;234 lcd_display (' '); 000036 2020 MOVS r0,#0x20 000038 f7fffffe BL lcd_display ;;;235 lcd_display (' '); 00003c 2020 MOVS r0,#0x20 00003e f7fffffe BL lcd_display ;;;236 lcd_display (' '); 000042 2020 MOVS r0,#0x20 000044 f7fffffe BL lcd_display 000048 e118 B |L7.636| |L7.74| ;;;237 } ;;;238 else if (MFL_PARA_A.temp_dis_more_flag == 1) 00004a 488d LDR r0,|L7.640| 00004c f8d000f4 LDR r0,[r0,#0xf4] ; MFL_PARA_A 000050 2801 CMP r0,#1 000052 d178 BNE |L7.326| ;;;239 { ;;;240 lcd_display (' '); 000054 2020 MOVS r0,#0x20 000056 f7fffffe BL lcd_display ;;;241 lcd_display (' '); 00005a 2020 MOVS r0,#0x20 00005c f7fffffe BL lcd_display ;;;242 lcd_display (' '); 000060 2020 MOVS r0,#0x20 000062 f7fffffe BL lcd_display ;;;243 ;;;244 //display voltage ;;;245 z = RS485_READ_VOLTAGE_VALUE; 000066 4887 LDR r0,|L7.644| 000068 8804 LDRH r4,[r0,#0] ; RS485_READ_VOLTAGE_VALUE ;;;246 a = z / 1000; 00006a f44f707a MOV r0,#0x3e8 00006e fbb4f5f0 UDIV r5,r4,r0 ;;;247 z -= a * 1000; 000072 eb050045 ADD r0,r5,r5,LSL #1 000076 ebc010c5 RSB r0,r0,r5,LSL #7 00007a eba404c0 SUB r4,r4,r0,LSL #3 ;;;248 b = z / 100; 00007e 2064 MOVS r0,#0x64 000080 fbb4f6f0 UDIV r6,r4,r0 ;;;249 z -= b * 100; 000084 eb0600c6 ADD r0,r6,r6,LSL #3 000088 eb001006 ADD r0,r0,r6,LSL #4 00008c eba40480 SUB r4,r4,r0,LSL #2 ;;;250 c = z / 10; 000090 200a MOVS r0,#0xa 000092 fbb4f8f0 UDIV r8,r4,r0 ;;;251 z -= c * 10; 000096 bf00 NOP ;;;252 d = z; 000098 bf00 NOP ;;;253 ;;;254 if (a == 0) 00009a b91d CBNZ r5,|L7.164| ;;;255 lcd_display (' '); 00009c 2020 MOVS r0,#0x20 00009e f7fffffe BL lcd_display 0000a2 e004 B |L7.174| |L7.164| ;;;256 else ;;;257 lcd_display (a + 0x30); 0000a4 f1050130 ADD r1,r5,#0x30 0000a8 b288 UXTH r0,r1 0000aa f7fffffe BL lcd_display |L7.174| ;;;258 ;;;259 if ((a == 0) && (b == 0)) 0000ae b925 CBNZ r5,|L7.186| 0000b0 b91e CBNZ r6,|L7.186| ;;;260 lcd_display (' '); 0000b2 2020 MOVS r0,#0x20 0000b4 f7fffffe BL lcd_display 0000b8 e004 B |L7.196| |L7.186| ;;;261 else ;;;262 lcd_display (b + 0x30); 0000ba f1060130 ADD r1,r6,#0x30 0000be b288 UXTH r0,r1 0000c0 f7fffffe BL lcd_display |L7.196| ;;;263 ;;;264 lcd_display (c + 0x30); 0000c4 f1080130 ADD r1,r8,#0x30 0000c8 b288 UXTH r0,r1 0000ca f7fffffe BL lcd_display ;;;265 ;;;266 lcd_display ('V'); 0000ce 2056 MOVS r0,#0x56 0000d0 f7fffffe BL lcd_display ;;;267 ;;;268 //display current ;;;269 z = RS485_READ_CURRENT_VALUE; 0000d4 486c LDR r0,|L7.648| 0000d6 8804 LDRH r4,[r0,#0] ; RS485_READ_CURRENT_VALUE ;;;270 a = z / 1000; 0000d8 f44f707a MOV r0,#0x3e8 0000dc fbb4f5f0 UDIV r5,r4,r0 ;;;271 z -= a * 1000; 0000e0 eb050045 ADD r0,r5,r5,LSL #1 0000e4 ebc010c5 RSB r0,r0,r5,LSL #7 0000e8 eba404c0 SUB r4,r4,r0,LSL #3 ;;;272 b = z / 100; 0000ec 2064 MOVS r0,#0x64 0000ee fbb4f6f0 UDIV r6,r4,r0 ;;;273 z -= b * 100; 0000f2 eb0600c6 ADD r0,r6,r6,LSL #3 0000f6 eb001006 ADD r0,r0,r6,LSL #4 0000fa eba40480 SUB r4,r4,r0,LSL #2 ;;;274 c = z / 10; 0000fe 200a MOVS r0,#0xa 000100 fbb4f8f0 UDIV r8,r4,r0 ;;;275 z -= c * 10; 000104 eb080088 ADD r0,r8,r8,LSL #2 000108 eba40440 SUB r4,r4,r0,LSL #1 ;;;276 d = z; 00010c 46a1 MOV r9,r4 ;;;277 ;;;278 if (a == 0) 00010e b91d CBNZ r5,|L7.280| ;;;279 lcd_display (' '); 000110 2020 MOVS r0,#0x20 000112 f7fffffe BL lcd_display 000116 e004 B |L7.290| |L7.280| ;;;280 else ;;;281 lcd_display (a + 0x30); 000118 f1050130 ADD r1,r5,#0x30 00011c b288 UXTH r0,r1 00011e f7fffffe BL lcd_display |L7.290| ;;;282 ;;;283 if ((a == 0) && (b == 0)) 000122 b925 CBNZ r5,|L7.302| 000124 b91e CBNZ r6,|L7.302| ;;;284 lcd_display (' '); 000126 2020 MOVS r0,#0x20 000128 f7fffffe BL lcd_display 00012c e004 B |L7.312| |L7.302| ;;;285 else ;;;286 lcd_display (b + 0x30); 00012e f1060130 ADD r1,r6,#0x30 000132 b288 UXTH r0,r1 000134 f7fffffe BL lcd_display |L7.312| ;;;287 ;;;288 lcd_display (c + 0x30); 000138 f1080130 ADD r1,r8,#0x30 00013c b288 UXTH r0,r1 00013e f7fffffe BL lcd_display |L7.322| 000142 e09b B |L7.636| 000144 e7ff B |L7.326| |L7.326| ;;;289 } ;;;290 else if (MFL_PARA_A.temp_dis_more_flag == 2) 000146 484e LDR r0,|L7.640| 000148 f8d000f4 LDR r0,[r0,#0xf4] ; MFL_PARA_A 00014c 2802 CMP r0,#2 00014e d1f8 BNE |L7.322| ;;;291 { ;;;292 //display board temperature ;;;293 a = MFL_PARA_A.adc_BoardTemp_data; 000150 484b LDR r0,|L7.640| 000152 f8d050c4 LDR r5,[r0,#0xc4] ; MFL_PARA_A ;;;294 flag = 0; 000156 2700 MOVS r7,#0 ;;;295 ;;;296 lcd_display (' '); 000158 2020 MOVS r0,#0x20 00015a f7fffffe BL lcd_display ;;;297 ;;;298 z = a / 1000; 00015e f44f707a MOV r0,#0x3e8 000162 fbb5f4f0 UDIV r4,r5,r0 ;;;299 if ((z == 0) && (flag == 0)) 000166 b924 CBNZ r4,|L7.370| 000168 b91f CBNZ r7,|L7.370| ;;;300 { ;;;301 lcd_display (' '); 00016a 2020 MOVS r0,#0x20 00016c f7fffffe BL lcd_display 000170 e005 B |L7.382| |L7.370| ;;;302 } ;;;303 else ;;;304 { ;;;305 lcd_display (z + 0x30); 000172 f1040130 ADD r1,r4,#0x30 000176 b288 UXTH r0,r1 000178 f7fffffe BL lcd_display ;;;306 flag = 1; 00017c 2701 MOVS r7,#1 |L7.382| ;;;307 } ;;;308 a -= z * 1000; 00017e eb040044 ADD r0,r4,r4,LSL #1 000182 ebc010c4 RSB r0,r0,r4,LSL #7 000186 eba505c0 SUB r5,r5,r0,LSL #3 ;;;309 ;;;310 z = a / 100; 00018a 2064 MOVS r0,#0x64 00018c fbb5f4f0 UDIV r4,r5,r0 ;;;311 if ((z == 0) && (flag == 0)) 000190 b924 CBNZ r4,|L7.412| 000192 b91f CBNZ r7,|L7.412| ;;;312 { ;;;313 lcd_display (' '); 000194 2020 MOVS r0,#0x20 000196 f7fffffe BL lcd_display 00019a e005 B |L7.424| |L7.412| ;;;314 } ;;;315 else ;;;316 { ;;;317 lcd_display (z + 0x30); 00019c f1040130 ADD r1,r4,#0x30 0001a0 b288 UXTH r0,r1 0001a2 f7fffffe BL lcd_display ;;;318 flag = 1; 0001a6 2701 MOVS r7,#1 |L7.424| ;;;319 } ;;;320 a -= z * 100; 0001a8 eb0400c4 ADD r0,r4,r4,LSL #3 0001ac eb001004 ADD r0,r0,r4,LSL #4 0001b0 eba50580 SUB r5,r5,r0,LSL #2 ;;;321 ;;;322 z = a / 10; 0001b4 200a MOVS r0,#0xa 0001b6 fbb5f4f0 UDIV r4,r5,r0 ;;;323 if ((z == 0) && (flag == 0)) 0001ba b924 CBNZ r4,|L7.454| 0001bc b91f CBNZ r7,|L7.454| ;;;324 { ;;;325 lcd_display (' '); 0001be 2020 MOVS r0,#0x20 0001c0 f7fffffe BL lcd_display 0001c4 e005 B |L7.466| |L7.454| ;;;326 } ;;;327 else ;;;328 { ;;;329 lcd_display (z + 0x30); 0001c6 f1040130 ADD r1,r4,#0x30 0001ca b288 UXTH r0,r1 0001cc f7fffffe BL lcd_display ;;;330 flag = 1; 0001d0 2701 MOVS r7,#1 |L7.466| ;;;331 } ;;;332 a -= z * 10; 0001d2 eb040084 ADD r0,r4,r4,LSL #2 0001d6 eba50540 SUB r5,r5,r0,LSL #1 ;;;333 ;;;334 z = a; 0001da 462c MOV r4,r5 ;;;335 lcd_display (z + 0x30); 0001dc f1040130 ADD r1,r4,#0x30 0001e0 b288 UXTH r0,r1 0001e2 f7fffffe BL lcd_display ;;;336 ;;;337 ;;;338 //display thermo voltage ;;;339 a = MFL_PARA_A.adc_Thermo_data; 0001e6 4826 LDR r0,|L7.640| 0001e8 f8d050cc LDR r5,[r0,#0xcc] ; MFL_PARA_A ;;;340 flag = 0; 0001ec 2700 MOVS r7,#0 ;;;341 ;;;342 lcd_display (' '); 0001ee 2020 MOVS r0,#0x20 0001f0 f7fffffe BL lcd_display ;;;343 ;;;344 z = a / 1000; 0001f4 f44f707a MOV r0,#0x3e8 0001f8 fbb5f4f0 UDIV r4,r5,r0 ;;;345 if ((z == 0) && (flag == 0)) 0001fc b924 CBNZ r4,|L7.520| 0001fe b91f CBNZ r7,|L7.520| ;;;346 { ;;;347 lcd_display (' '); 000200 2020 MOVS r0,#0x20 000202 f7fffffe BL lcd_display 000206 e005 B |L7.532| |L7.520| ;;;348 } ;;;349 else ;;;350 { ;;;351 lcd_display (z + 0x30); 000208 f1040130 ADD r1,r4,#0x30 00020c b288 UXTH r0,r1 00020e f7fffffe BL lcd_display ;;;352 flag = 1; 000212 2701 MOVS r7,#1 |L7.532| ;;;353 } ;;;354 a -= z * 1000; 000214 eb040044 ADD r0,r4,r4,LSL #1 000218 ebc010c4 RSB r0,r0,r4,LSL #7 00021c eba505c0 SUB r5,r5,r0,LSL #3 ;;;355 ;;;356 z = a / 100; 000220 2064 MOVS r0,#0x64 000222 fbb5f4f0 UDIV r4,r5,r0 ;;;357 if ((z == 0) && (flag == 0)) 000226 b924 CBNZ r4,|L7.562| 000228 b91f CBNZ r7,|L7.562| ;;;358 { ;;;359 lcd_display (' '); 00022a 2020 MOVS r0,#0x20 00022c f7fffffe BL lcd_display 000230 e005 B |L7.574| |L7.562| ;;;360 } ;;;361 else ;;;362 { ;;;363 lcd_display (z + 0x30); 000232 f1040130 ADD r1,r4,#0x30 000236 b288 UXTH r0,r1 000238 f7fffffe BL lcd_display ;;;364 flag = 1; 00023c 2701 MOVS r7,#1 |L7.574| ;;;365 } ;;;366 a -= z * 100; 00023e eb0400c4 ADD r0,r4,r4,LSL #3 000242 eb001004 ADD r0,r0,r4,LSL #4 000246 eba50580 SUB r5,r5,r0,LSL #2 ;;;367 ;;;368 z = a / 10; 00024a 200a MOVS r0,#0xa 00024c fbb5f4f0 UDIV r4,r5,r0 ;;;369 if ((z == 0) && (flag == 0)) 000250 b924 CBNZ r4,|L7.604| 000252 b91f CBNZ r7,|L7.604| ;;;370 { ;;;371 lcd_display (' '); 000254 2020 MOVS r0,#0x20 000256 f7fffffe BL lcd_display 00025a e005 B |L7.616| |L7.604| ;;;372 } ;;;373 else ;;;374 { ;;;375 lcd_display (z + 0x30); 00025c f1040130 ADD r1,r4,#0x30 000260 b288 UXTH r0,r1 000262 f7fffffe BL lcd_display ;;;376 flag = 1; 000266 2701 MOVS r7,#1 |L7.616| ;;;377 } ;;;378 a -= z * 10; 000268 eb040084 ADD r0,r4,r4,LSL #2 00026c eba50540 SUB r5,r5,r0,LSL #1 ;;;379 ;;;380 z = a; 000270 462c MOV r4,r5 ;;;381 lcd_display (z + 0x30); 000272 f1040130 ADD r1,r4,#0x30 000276 b288 UXTH r0,r1 000278 f7fffffe BL lcd_display |L7.636| ;;;382 } ;;;383 } 00027c e8bd87f0 POP {r4-r10,pc} ;;;384 ENDP |L7.640| DCD MFL_PARA_A+0x2000 |L7.644| DCD RS485_READ_VOLTAGE_VALUE |L7.648| DCD RS485_READ_CURRENT_VALUE AREA ||i.lcd_display_time_space||, CODE, READONLY, ALIGN=2 lcd_display_time_space PROC ;;;385 //LCD时间显示后补充空白显示字符串 ;;;386 void lcd_display_time_space (void) 000000 b570 PUSH {r4-r6,lr} ;;;387 { ;;;388 u32 z, a; ;;;389 u8 flag; ;;;390 ;;;391 if (MFL_PARA_A.temp_dis_more_flag != 0x55) 000002 4833 LDR r0,|L8.208| 000004 f8d000f4 LDR r0,[r0,#0xf4] ; MFL_PARA_A 000008 2855 CMP r0,#0x55 00000a d012 BEQ |L8.50| ;;;392 { ;;;393 lcd_display (' '); 00000c 2020 MOVS r0,#0x20 00000e f7fffffe BL lcd_display ;;;394 lcd_display (' '); 000012 2020 MOVS r0,#0x20 000014 f7fffffe BL lcd_display ;;;395 lcd_display (' '); 000018 2020 MOVS r0,#0x20 00001a f7fffffe BL lcd_display ;;;396 lcd_display (' '); 00001e 2020 MOVS r0,#0x20 000020 f7fffffe BL lcd_display ;;;397 lcd_display (' '); 000024 2020 MOVS r0,#0x20 000026 f7fffffe BL lcd_display ;;;398 lcd_display (' '); 00002a 2020 MOVS r0,#0x20 00002c f7fffffe BL lcd_display 000030 e04c B |L8.204| |L8.50| ;;;399 } ;;;400 else ;;;401 { ;;;402 lcd_display (' '); 000032 2020 MOVS r0,#0x20 000034 f7fffffe BL lcd_display ;;;403 lcd_display (' '); 000038 2020 MOVS r0,#0x20 00003a f7fffffe BL lcd_display ;;;404 ;;;405 //display original temperature ;;;406 a = MFL_PARA_A.TEMP_VALUE; 00003e 4825 LDR r0,|L8.212| 000040 8e05 LDRH r5,[r0,#0x30] ; MFL_PARA_A ;;;407 flag = 0; 000042 2600 MOVS r6,#0 ;;;408 ;;;409 z = a / 1000; 000044 f44f707a MOV r0,#0x3e8 000048 fbb5f4f0 UDIV r4,r5,r0 ;;;410 if ((z == 0) && (flag == 0)) 00004c b924 CBNZ r4,|L8.88| 00004e b91e CBNZ r6,|L8.88| ;;;411 { ;;;412 lcd_display (' '); 000050 2020 MOVS r0,#0x20 000052 f7fffffe BL lcd_display 000056 e005 B |L8.100| |L8.88| ;;;413 } ;;;414 else ;;;415 { ;;;416 lcd_display (z + 0x30); 000058 f1040130 ADD r1,r4,#0x30 00005c b288 UXTH r0,r1 00005e f7fffffe BL lcd_display ;;;417 flag = 1; 000062 2601 MOVS r6,#1 |L8.100| ;;;418 } ;;;419 a -= z * 1000; 000064 eb040044 ADD r0,r4,r4,LSL #1 000068 ebc010c4 RSB r0,r0,r4,LSL #7 00006c eba505c0 SUB r5,r5,r0,LSL #3 ;;;420 ;;;421 z = a / 100; 000070 2064 MOVS r0,#0x64 000072 fbb5f4f0 UDIV r4,r5,r0 ;;;422 if ((z == 0) && (flag == 0)) 000076 b924 CBNZ r4,|L8.130| 000078 b91e CBNZ r6,|L8.130| ;;;423 { ;;;424 lcd_display (' '); 00007a 2020 MOVS r0,#0x20 00007c f7fffffe BL lcd_display 000080 e005 B |L8.142| |L8.130| ;;;425 } ;;;426 else ;;;427 { ;;;428 lcd_display (z + 0x30); 000082 f1040130 ADD r1,r4,#0x30 000086 b288 UXTH r0,r1 000088 f7fffffe BL lcd_display ;;;429 flag = 1; 00008c 2601 MOVS r6,#1 |L8.142| ;;;430 } ;;;431 a -= z * 100; 00008e eb0400c4 ADD r0,r4,r4,LSL #3 000092 eb001004 ADD r0,r0,r4,LSL #4 000096 eba50580 SUB r5,r5,r0,LSL #2 ;;;432 ;;;433 z = a / 10; 00009a 200a MOVS r0,#0xa 00009c fbb5f4f0 UDIV r4,r5,r0 ;;;434 if ((z == 0) && (flag == 0)) 0000a0 b924 CBNZ r4,|L8.172| 0000a2 b91e CBNZ r6,|L8.172| ;;;435 { ;;;436 lcd_display (' '); 0000a4 2020 MOVS r0,#0x20 0000a6 f7fffffe BL lcd_display 0000aa e005 B |L8.184| |L8.172| ;;;437 } ;;;438 else ;;;439 { ;;;440 lcd_display (z + 0x30); 0000ac f1040130 ADD r1,r4,#0x30 0000b0 b288 UXTH r0,r1 0000b2 f7fffffe BL lcd_display ;;;441 flag = 1; 0000b6 2601 MOVS r6,#1 |L8.184| ;;;442 } ;;;443 a -= z * 10; 0000b8 eb040084 ADD r0,r4,r4,LSL #2 0000bc eba50540 SUB r5,r5,r0,LSL #1 ;;;444 ;;;445 z = a; 0000c0 462c MOV r4,r5 ;;;446 lcd_display (z + 0x30); 0000c2 f1040130 ADD r1,r4,#0x30 0000c6 b288 UXTH r0,r1 0000c8 f7fffffe BL lcd_display |L8.204| ;;;447 ;;;448 //display board temperature ;;;449 /*z=MFL_PARA_A.ads1220_original_data; ;;;450 ;;;451 z>>=4; ;;;452 a=z&0x0f; ;;;453 if (a>9) ;;;454 lcd_display (a+0x37); ;;;455 else ;;;456 lcd_display (a+0x30); ;;;457 ;;;458 z>>=4; ;;;459 a=z&0x0f; ;;;460 if (a>9) ;;;461 lcd_display (a+0x37); ;;;462 else ;;;463 lcd_display (a+0x30); ;;;464 ;;;465 z>>=4; ;;;466 a=z&0x0f; ;;;467 if (a>9) ;;;468 lcd_display (a+0x37); ;;;469 else ;;;470 lcd_display (a+0x30); ;;;471 ;;;472 z>>=4; ;;;473 a=z&0x0f; ;;;474 if (a>9) ;;;475 lcd_display (a+0x37); ;;;476 else ;;;477 lcd_display (a+0x30); ;;;478 ;;;479 z>>=4; ;;;480 a=z&0x0f; ;;;481 if (a>9) ;;;482 lcd_display (a+0x37); ;;;483 else ;;;484 lcd_display (a+0x30); ;;;485 */ ;;;486 } ;;;487 } 0000cc bd70 POP {r4-r6,pc} ;;;488 ENDP 0000ce 0000 DCW 0x0000 |L8.208| DCD MFL_PARA_A+0x2000 |L8.212| DCD MFL_PARA_A AREA ||i.lcd_init||, CODE, READONLY, ALIGN=2 lcd_init PROC ;;;36 //LCD初始化 ;;;37 void lcd_init (void) 000000 b510 PUSH {r4,lr} ;;;38 { ;;;39 LCD_CLK1_L; 000002 f44f7180 MOV r1,#0x100 000006 483a LDR r0,|L9.240| 000008 f7fffffe BL GPIO_ResetBits ;;;40 LCD_CLK2_L; 00000c f44f7100 MOV r1,#0x200 000010 4838 LDR r0,|L9.244| 000012 f7fffffe BL GPIO_ResetBits ;;;41 LCD_DIN_L; 000016 f44f7100 MOV r1,#0x200 00001a 4835 LDR r0,|L9.240| 00001c f7fffffe BL GPIO_ResetBits ;;;42 LCD_CS_L; 000020 f44f6180 MOV r1,#0x400 000024 4832 LDR r0,|L9.240| 000026 f7fffffe BL GPIO_ResetBits ;;;43 ;;;44 LCD_RESET_L; 00002a f44f7180 MOV r1,#0x100 00002e 4831 LDR r0,|L9.244| 000030 f7fffffe BL GPIO_ResetBits ;;;45 delay_ms(200); 000034 20c8 MOVS r0,#0xc8 000036 f7fffffe BL delay_ms ;;;46 LCD_RESET_H; 00003a f44f7180 MOV r1,#0x100 00003e 482d LDR r0,|L9.244| 000040 f7fffffe BL GPIO_SetBits ;;;47 LCD_CS_H; 000044 f44f6180 MOV r1,#0x400 000048 4829 LDR r0,|L9.240| 00004a f7fffffe BL GPIO_SetBits ;;;48 ;;;49 lcd_post_select = 0; 00004e 2000 MOVS r0,#0 000050 4929 LDR r1,|L9.248| 000052 7008 STRB r0,[r1,#0] ;;;50 ;;;51 lcd_write (LCD_COMMAND, 0x30); 000054 2130 MOVS r1,#0x30 000056 20f8 MOVS r0,#0xf8 000058 f7fffffe BL lcd_write ;;;52 delay_ms(50); 00005c 2032 MOVS r0,#0x32 00005e f7fffffe BL delay_ms ;;;53 ;;;54 lcd_write (LCD_COMMAND, 0x30); 000062 2130 MOVS r1,#0x30 000064 20f8 MOVS r0,#0xf8 000066 f7fffffe BL lcd_write ;;;55 delay_ms(50); 00006a 2032 MOVS r0,#0x32 00006c f7fffffe BL delay_ms ;;;56 ;;;57 lcd_write (LCD_COMMAND, 0x0c); 000070 210c MOVS r1,#0xc 000072 20f8 MOVS r0,#0xf8 000074 f7fffffe BL lcd_write ;;;58 delay_ms(50); 000078 2032 MOVS r0,#0x32 00007a f7fffffe BL delay_ms ;;;59 ;;;60 lcd_write (LCD_COMMAND, 0x01); 00007e 2101 MOVS r1,#1 000080 20f8 MOVS r0,#0xf8 000082 f7fffffe BL lcd_write ;;;61 delay_ms(200); 000086 20c8 MOVS r0,#0xc8 000088 f7fffffe BL delay_ms ;;;62 ;;;63 lcd_write (LCD_COMMAND, 0x06); 00008c 2106 MOVS r1,#6 00008e 20f8 MOVS r0,#0xf8 000090 f7fffffe BL lcd_write ;;;64 delay_ms(200); 000094 20c8 MOVS r0,#0xc8 000096 f7fffffe BL delay_ms ;;;65 ;;;66 lcd_post_select = 1; 00009a 2001 MOVS r0,#1 00009c 4916 LDR r1,|L9.248| 00009e 7008 STRB r0,[r1,#0] ;;;67 ;;;68 ;;;69 lcd_write (LCD_COMMAND, 0x30); 0000a0 2130 MOVS r1,#0x30 0000a2 20f8 MOVS r0,#0xf8 0000a4 f7fffffe BL lcd_write ;;;70 delay_ms(50); 0000a8 2032 MOVS r0,#0x32 0000aa f7fffffe BL delay_ms ;;;71 ;;;72 lcd_write (LCD_COMMAND, 0x30); 0000ae 2130 MOVS r1,#0x30 0000b0 20f8 MOVS r0,#0xf8 0000b2 f7fffffe BL lcd_write ;;;73 delay_ms(50); 0000b6 2032 MOVS r0,#0x32 0000b8 f7fffffe BL delay_ms ;;;74 ;;;75 lcd_write (LCD_COMMAND, 0x0c); 0000bc 210c MOVS r1,#0xc 0000be 20f8 MOVS r0,#0xf8 0000c0 f7fffffe BL lcd_write ;;;76 delay_ms(50); 0000c4 2032 MOVS r0,#0x32 0000c6 f7fffffe BL delay_ms ;;;77 ;;;78 lcd_write (LCD_COMMAND, 0x01); 0000ca 2101 MOVS r1,#1 0000cc 20f8 MOVS r0,#0xf8 0000ce f7fffffe BL lcd_write ;;;79 delay_ms(200); 0000d2 20c8 MOVS r0,#0xc8 0000d4 f7fffffe BL delay_ms ;;;80 ;;;81 lcd_write (LCD_COMMAND, 0x06); 0000d8 2106 MOVS r1,#6 0000da 20f8 MOVS r0,#0xf8 0000dc f7fffffe BL lcd_write ;;;82 delay_ms(200); 0000e0 20c8 MOVS r0,#0xc8 0000e2 f7fffffe BL delay_ms ;;;83 ;;;84 //LCD_BL_ON; ;;;85 ;;;86 lcd_picture_mode (); 0000e6 f7fffffe BL lcd_picture_mode ;;;87 lcd_text_mode (); 0000ea f7fffffe BL lcd_text_mode ;;;88 } 0000ee bd10 POP {r4,pc} ;;;89 ENDP |L9.240| DCD 0x40010800 |L9.244| DCD 0x40011000 |L9.248| DCD lcd_post_select AREA ||i.lcd_picture_mode||, CODE, READONLY, ALIGN=2 lcd_picture_mode PROC ;;;525 //进入绘图模式,同时将整个屏幕清空 ;;;526 void lcd_picture_mode (void) 000000 b570 PUSH {r4-r6,lr} ;;;527 { ;;;528 u8 i, n; ;;;529 ;;;530 lcd_post_select = 0; 000002 2000 MOVS r0,#0 000004 492a LDR r1,|L10.176| 000006 7008 STRB r0,[r1,#0] ;;;531 lcd_write (LCD_COMMAND, 0x34); 000008 2134 MOVS r1,#0x34 00000a 20f8 MOVS r0,#0xf8 00000c f7fffffe BL lcd_write ;;;532 ;;;533 lcd_post_select = 1; 000010 2001 MOVS r0,#1 000012 4927 LDR r1,|L10.176| 000014 7008 STRB r0,[r1,#0] ;;;534 lcd_write (LCD_COMMAND, 0x34); 000016 2134 MOVS r1,#0x34 000018 20f8 MOVS r0,#0xf8 00001a f7fffffe BL lcd_write ;;;535 ;;;536 lcd_post_select = 0; 00001e 2000 MOVS r0,#0 000020 4923 LDR r1,|L10.176| 000022 7008 STRB r0,[r1,#0] ;;;537 for(i = 0; i < 32; i++) //上半屏32行 000024 2400 MOVS r4,#0 000026 e015 B |L10.84| |L10.40| ;;;538 { ;;;539 lcd_write (LCD_COMMAND, 0x80 + i); //设置绘图区的Y地址坐标0 000028 f1040080 ADD r0,r4,#0x80 00002c b2c1 UXTB r1,r0 00002e 20f8 MOVS r0,#0xf8 000030 f7fffffe BL lcd_write ;;;540 lcd_write (LCD_COMMAND, 0x80); //设置绘图区的X地址坐标0 000034 2180 MOVS r1,#0x80 000036 20f8 MOVS r0,#0xf8 000038 f7fffffe BL lcd_write ;;;541 ;;;542 for(n = 0; n < 24; n++) 00003c 2500 MOVS r5,#0 00003e e005 B |L10.76| |L10.64| ;;;543 lcd_write (LCD_DATA, 0x00); 000040 2100 MOVS r1,#0 000042 20fa MOVS r0,#0xfa 000044 f7fffffe BL lcd_write 000048 1c68 ADDS r0,r5,#1 ;542 00004a b2c5 UXTB r5,r0 ;542 |L10.76| 00004c 2d18 CMP r5,#0x18 ;542 00004e dbf7 BLT |L10.64| 000050 1c60 ADDS r0,r4,#1 ;537 000052 b2c4 UXTB r4,r0 ;537 |L10.84| 000054 2c20 CMP r4,#0x20 ;537 000056 dbe7 BLT |L10.40| ;;;544 } ;;;545 ;;;546 lcd_post_select = 1; 000058 2001 MOVS r0,#1 00005a 4915 LDR r1,|L10.176| 00005c 7008 STRB r0,[r1,#0] ;;;547 for(i = 0; i < 32; i++ ) //下半屏32行 00005e 2400 MOVS r4,#0 000060 e015 B |L10.142| |L10.98| ;;;548 { ;;;549 lcd_write (LCD_COMMAND, 0x80 + i); //设置绘图区的Y地址坐标0 000062 f1040080 ADD r0,r4,#0x80 000066 b2c1 UXTB r1,r0 000068 20f8 MOVS r0,#0xf8 00006a f7fffffe BL lcd_write ;;;550 lcd_write (LCD_COMMAND, 0x80); //设置绘图区的X地址坐标0 00006e 2180 MOVS r1,#0x80 000070 20f8 MOVS r0,#0xf8 000072 f7fffffe BL lcd_write ;;;551 ;;;552 for(n = 0; n < 24; n++) 000076 2500 MOVS r5,#0 000078 e005 B |L10.134| |L10.122| ;;;553 lcd_write (LCD_DATA, 0x00); 00007a 2100 MOVS r1,#0 00007c 20fa MOVS r0,#0xfa 00007e f7fffffe BL lcd_write 000082 1c68 ADDS r0,r5,#1 ;552 000084 b2c5 UXTB r5,r0 ;552 |L10.134| 000086 2d18 CMP r5,#0x18 ;552 000088 dbf7 BLT |L10.122| 00008a 1c60 ADDS r0,r4,#1 ;547 00008c b2c4 UXTB r4,r0 ;547 |L10.142| 00008e 2c20 CMP r4,#0x20 ;547 000090 dbe7 BLT |L10.98| ;;;554 } ;;;555 ;;;556 lcd_post_select = 0; 000092 2000 MOVS r0,#0 000094 4906 LDR r1,|L10.176| 000096 7008 STRB r0,[r1,#0] ;;;557 lcd_write (LCD_COMMAND, 0x36); 000098 2136 MOVS r1,#0x36 00009a 20f8 MOVS r0,#0xf8 00009c f7fffffe BL lcd_write ;;;558 ;;;559 lcd_post_select = 1; 0000a0 2001 MOVS r0,#1 0000a2 4903 LDR r1,|L10.176| 0000a4 7008 STRB r0,[r1,#0] ;;;560 lcd_write (LCD_COMMAND, 0x36); 0000a6 2136 MOVS r1,#0x36 0000a8 20f8 MOVS r0,#0xf8 0000aa f7fffffe BL lcd_write ;;;561 } 0000ae bd70 POP {r4-r6,pc} ;;;562 ENDP |L10.176| DCD lcd_post_select AREA ||i.lcd_picture_off||, CODE, READONLY, ALIGN=2 lcd_picture_off PROC ;;;500 //关闭显示屏幕 (图像模式) ;;;501 void lcd_picture_off (void) 000000 b510 PUSH {r4,lr} ;;;502 { ;;;503 lcd_post_select = 0; //8BIT控制界面,维持扩充指令集,,绘图显示off 000002 2000 MOVS r0,#0 000004 4906 LDR r1,|L11.32| 000006 7008 STRB r0,[r1,#0] ;;;504 lcd_write (LCD_COMMAND, 0x34); 000008 2134 MOVS r1,#0x34 00000a 20f8 MOVS r0,#0xf8 00000c f7fffffe BL lcd_write ;;;505 ;;;506 lcd_post_select = 1; 000010 2001 MOVS r0,#1 000012 4903 LDR r1,|L11.32| 000014 7008 STRB r0,[r1,#0] ;;;507 lcd_write (LCD_COMMAND, 0x34); 000016 2134 MOVS r1,#0x34 000018 20f8 MOVS r0,#0xf8 00001a f7fffffe BL lcd_write ;;;508 ;;;509 } 00001e bd10 POP {r4,pc} ;;;510 ENDP |L11.32| DCD lcd_post_select AREA ||i.lcd_picture_on||, CODE, READONLY, ALIGN=2 lcd_picture_on PROC ;;;489 //打开显示屏幕 (图像模式) ;;;490 void lcd_picture_on (void) 000000 b510 PUSH {r4,lr} ;;;491 { ;;;492 lcd_post_select = 0; //8BIT控制界面,维持扩充指令集,,绘图显示on 000002 2000 MOVS r0,#0 000004 4906 LDR r1,|L12.32| 000006 7008 STRB r0,[r1,#0] ;;;493 lcd_write (LCD_COMMAND, 0x36); 000008 2136 MOVS r1,#0x36 00000a 20f8 MOVS r0,#0xf8 00000c f7fffffe BL lcd_write ;;;494 ;;;495 lcd_post_select = 1; 000010 2001 MOVS r0,#1 000012 4903 LDR r1,|L12.32| 000014 7008 STRB r0,[r1,#0] ;;;496 lcd_write (LCD_COMMAND, 0x36); 000016 2136 MOVS r1,#0x36 000018 20f8 MOVS r0,#0xf8 00001a f7fffffe BL lcd_write ;;;497 ;;;498 } 00001e bd10 POP {r4,pc} ;;;499 ENDP |L12.32| DCD lcd_post_select AREA ||i.lcd_post||, CODE, READONLY, ALIGN=2 lcd_post PROC ;;;172 //LCD显示位置定位,0-x-3,0-y-12 ;;;173 void lcd_post (u8 x, u8 y) 000000 b570 PUSH {r4-r6,lr} ;;;174 { 000002 4604 MOV r4,r0 000004 460d MOV r5,r1 ;;;175 if (x < 2) 000006 2c02 CMP r4,#2 000008 da03 BGE |L13.18| ;;;176 lcd_post_select = 0; 00000a 2000 MOVS r0,#0 00000c 4909 LDR r1,|L13.52| 00000e 7008 STRB r0,[r1,#0] 000010 e002 B |L13.24| |L13.18| ;;;177 else ;;;178 lcd_post_select = 1; 000012 2001 MOVS r0,#1 000014 4907 LDR r1,|L13.52| 000016 7008 STRB r0,[r1,#0] |L13.24| ;;;179 ;;;180 if ((x == 1) || (x == 3)) 000018 2c01 CMP r4,#1 00001a d001 BEQ |L13.32| 00001c 2c03 CMP r4,#3 00001e d102 BNE |L13.38| |L13.32| ;;;181 y += 0x10; 000020 f1050010 ADD r0,r5,#0x10 000024 b2c5 UXTB r5,r0 |L13.38| ;;;182 ;;;183 lcd_write (LCD_COMMAND, 0x80 + y); 000026 f1050080 ADD r0,r5,#0x80 00002a b2c1 UXTB r1,r0 00002c 20f8 MOVS r0,#0xf8 00002e f7fffffe BL lcd_write ;;;184 } 000032 bd70 POP {r4-r6,pc} ;;;185 ENDP |L13.52| DCD lcd_post_select AREA ||i.lcd_text_mode||, CODE, READONLY, ALIGN=2 lcd_text_mode PROC ;;;511 //进入字符模式,同时将整个屏幕用空格填充 ;;;512 void lcd_text_mode (void) 000000 b510 PUSH {r4,lr} ;;;513 { ;;;514 lcd_post_select = 0; 000002 2000 MOVS r0,#0 000004 490c LDR r1,|L14.56| 000006 7008 STRB r0,[r1,#0] ;;;515 lcd_write (LCD_COMMAND, 0x30); //回到字体模式 000008 2130 MOVS r1,#0x30 00000a 20f8 MOVS r0,#0xf8 00000c f7fffffe BL lcd_write ;;;516 lcd_write (LCD_COMMAND, 0x01); 000010 2101 MOVS r1,#1 000012 20f8 MOVS r0,#0xf8 000014 f7fffffe BL lcd_write ;;;517 ;;;518 lcd_post_select = 1; 000018 2001 MOVS r0,#1 00001a 4907 LDR r1,|L14.56| 00001c 7008 STRB r0,[r1,#0] ;;;519 lcd_write (LCD_COMMAND, 0x30); //回到字体模式 00001e 2130 MOVS r1,#0x30 000020 20f8 MOVS r0,#0xf8 000022 f7fffffe BL lcd_write ;;;520 lcd_write (LCD_COMMAND, 0x01); 000026 2101 MOVS r1,#1 000028 20f8 MOVS r0,#0xf8 00002a f7fffffe BL lcd_write ;;;521 ;;;522 delay_ms(200); 00002e 20c8 MOVS r0,#0xc8 000030 f7fffffe BL delay_ms ;;;523 } 000034 bd10 POP {r4,pc} ;;;524 ENDP 000036 0000 DCW 0x0000 |L14.56| DCD lcd_post_select AREA ||i.lcd_write||, CODE, READONLY, ALIGN=2 lcd_write PROC ;;;90 //LCD写入 ;;;91 void lcd_write (u8 lcd_style, u8 a) 000000 e92d41f0 PUSH {r4-r8,lr} ;;;92 { 000004 4607 MOV r7,r0 000006 460e MOV r6,r1 ;;;93 u8 n, x; ;;;94 ;;;95 x = lcd_style; 000008 463d MOV r5,r7 ;;;96 for (n = 0; n < 8; n++) 00000a 2400 MOVS r4,#0 00000c e02d B |L15.106| |L15.14| ;;;97 { ;;;98 if (lcd_post_select == 0) 00000e 484e LDR r0,|L15.328| 000010 7800 LDRB r0,[r0,#0] ; lcd_post_select 000012 b928 CBNZ r0,|L15.32| ;;;99 LCD_CLK1_L; 000014 f44f7180 MOV r1,#0x100 000018 484c LDR r0,|L15.332| 00001a f7fffffe BL GPIO_ResetBits 00001e e004 B |L15.42| |L15.32| ;;;100 else ;;;101 LCD_CLK2_L; 000020 f44f7100 MOV r1,#0x200 000024 484a LDR r0,|L15.336| 000026 f7fffffe BL GPIO_ResetBits |L15.42| ;;;102 ;;;103 if ((x & 0x80) != 0) 00002a f0050080 AND r0,r5,#0x80 00002e b128 CBZ r0,|L15.60| ;;;104 LCD_DIN_H; 000030 f44f7100 MOV r1,#0x200 000034 4845 LDR r0,|L15.332| 000036 f7fffffe BL GPIO_SetBits 00003a e004 B |L15.70| |L15.60| ;;;105 else ;;;106 LCD_DIN_L; 00003c f44f7100 MOV r1,#0x200 000040 4842 LDR r0,|L15.332| 000042 f7fffffe BL GPIO_ResetBits |L15.70| ;;;107 ;;;108 //LCD_DELAY_NOP (); ;;;109 ;;;110 if (lcd_post_select == 0) 000046 4840 LDR r0,|L15.328| 000048 7800 LDRB r0,[r0,#0] ; lcd_post_select 00004a b928 CBNZ r0,|L15.88| ;;;111 LCD_CLK1_H; 00004c f44f7180 MOV r1,#0x100 000050 483e LDR r0,|L15.332| 000052 f7fffffe BL GPIO_SetBits 000056 e004 B |L15.98| |L15.88| ;;;112 else ;;;113 LCD_CLK2_H; 000058 f44f7100 MOV r1,#0x200 00005c 483c LDR r0,|L15.336| 00005e f7fffffe BL GPIO_SetBits |L15.98| ;;;114 ;;;115 //LCD_DELAY_NOP (); ;;;116 ;;;117 x <<= 1; 000062 0668 LSLS r0,r5,#25 000064 0e05 LSRS r5,r0,#24 000066 1c60 ADDS r0,r4,#1 ;96 000068 b2c4 UXTB r4,r0 ;96 |L15.106| 00006a 2c08 CMP r4,#8 ;96 00006c dbcf BLT |L15.14| ;;;118 } ;;;119 ;;;120 x = a & 0xf0; 00006e f00605f0 AND r5,r6,#0xf0 ;;;121 for (n = 0; n < 8; n++) 000072 2400 MOVS r4,#0 000074 e02d B |L15.210| |L15.118| ;;;122 { ;;;123 if (lcd_post_select == 0) 000076 4834 LDR r0,|L15.328| 000078 7800 LDRB r0,[r0,#0] ; lcd_post_select 00007a b928 CBNZ r0,|L15.136| ;;;124 LCD_CLK1_L; 00007c f44f7180 MOV r1,#0x100 000080 4832 LDR r0,|L15.332| 000082 f7fffffe BL GPIO_ResetBits 000086 e004 B |L15.146| |L15.136| ;;;125 else ;;;126 LCD_CLK2_L; 000088 f44f7100 MOV r1,#0x200 00008c 4830 LDR r0,|L15.336| 00008e f7fffffe BL GPIO_ResetBits |L15.146| ;;;127 ;;;128 if ((x & 0x80) != 0) 000092 f0050080 AND r0,r5,#0x80 000096 b128 CBZ r0,|L15.164| ;;;129 LCD_DIN_H; 000098 f44f7100 MOV r1,#0x200 00009c 482b LDR r0,|L15.332| 00009e f7fffffe BL GPIO_SetBits 0000a2 e004 B |L15.174| |L15.164| ;;;130 else ;;;131 LCD_DIN_L; 0000a4 f44f7100 MOV r1,#0x200 0000a8 4828 LDR r0,|L15.332| 0000aa f7fffffe BL GPIO_ResetBits |L15.174| ;;;132 ;;;133 //LCD_DELAY_NOP (); ;;;134 ;;;135 if (lcd_post_select == 0) 0000ae 4826 LDR r0,|L15.328| 0000b0 7800 LDRB r0,[r0,#0] ; lcd_post_select 0000b2 b928 CBNZ r0,|L15.192| ;;;136 LCD_CLK1_H; 0000b4 f44f7180 MOV r1,#0x100 0000b8 4824 LDR r0,|L15.332| 0000ba f7fffffe BL GPIO_SetBits 0000be e004 B |L15.202| |L15.192| ;;;137 else ;;;138 LCD_CLK2_H; 0000c0 f44f7100 MOV r1,#0x200 0000c4 4822 LDR r0,|L15.336| 0000c6 f7fffffe BL GPIO_SetBits |L15.202| ;;;139 ;;;140 //LCD_DELAY_NOP (); ;;;141 ;;;142 x <<= 1; 0000ca 0668 LSLS r0,r5,#25 0000cc 0e05 LSRS r5,r0,#24 0000ce 1c60 ADDS r0,r4,#1 ;121 0000d0 b2c4 UXTB r4,r0 ;121 |L15.210| 0000d2 2c08 CMP r4,#8 ;121 0000d4 dbcf BLT |L15.118| ;;;143 } ;;;144 ;;;145 a <<= 4; 0000d6 0730 LSLS r0,r6,#28 0000d8 0e06 LSRS r6,r0,#24 ;;;146 x = a & 0xf0; 0000da f00605f0 AND r5,r6,#0xf0 ;;;147 for (n = 0; n < 8; n++) 0000de 2400 MOVS r4,#0 0000e0 e02d B |L15.318| |L15.226| ;;;148 { ;;;149 if (lcd_post_select == 0) 0000e2 4819 LDR r0,|L15.328| 0000e4 7800 LDRB r0,[r0,#0] ; lcd_post_select 0000e6 b928 CBNZ r0,|L15.244| ;;;150 LCD_CLK1_L; 0000e8 f44f7180 MOV r1,#0x100 0000ec 4817 LDR r0,|L15.332| 0000ee f7fffffe BL GPIO_ResetBits 0000f2 e004 B |L15.254| |L15.244| ;;;151 else ;;;152 LCD_CLK2_L; 0000f4 f44f7100 MOV r1,#0x200 0000f8 4815 LDR r0,|L15.336| 0000fa f7fffffe BL GPIO_ResetBits |L15.254| ;;;153 ;;;154 if ((x & 0x80) != 0) 0000fe f0050080 AND r0,r5,#0x80 000102 b128 CBZ r0,|L15.272| ;;;155 LCD_DIN_H; 000104 f44f7100 MOV r1,#0x200 000108 4810 LDR r0,|L15.332| 00010a f7fffffe BL GPIO_SetBits 00010e e004 B |L15.282| |L15.272| ;;;156 else ;;;157 LCD_DIN_L; 000110 f44f7100 MOV r1,#0x200 000114 480d LDR r0,|L15.332| 000116 f7fffffe BL GPIO_ResetBits |L15.282| ;;;158 ;;;159 //LCD_DELAY_NOP (); ;;;160 ;;;161 if (lcd_post_select == 0) 00011a 480b LDR r0,|L15.328| 00011c 7800 LDRB r0,[r0,#0] ; lcd_post_select 00011e b928 CBNZ r0,|L15.300| ;;;162 LCD_CLK1_H; 000120 f44f7180 MOV r1,#0x100 000124 4809 LDR r0,|L15.332| 000126 f7fffffe BL GPIO_SetBits 00012a e004 B |L15.310| |L15.300| ;;;163 else ;;;164 LCD_CLK2_H; 00012c f44f7100 MOV r1,#0x200 000130 4807 LDR r0,|L15.336| 000132 f7fffffe BL GPIO_SetBits |L15.310| ;;;165 ;;;166 //LCD_DELAY_NOP (); ;;;167 ;;;168 x <<= 1; 000136 0668 LSLS r0,r5,#25 000138 0e05 LSRS r5,r0,#24 00013a 1c60 ADDS r0,r4,#1 ;147 00013c b2c4 UXTB r4,r0 ;147 |L15.318| 00013e 2c08 CMP r4,#8 ;147 000140 dbcf BLT |L15.226| ;;;169 } ;;;170 } 000142 e8bd81f0 POP {r4-r8,pc} ;;;171 ENDP 000146 0000 DCW 0x0000 |L15.328| DCD lcd_post_select |L15.332| DCD 0x40010800 |L15.336| DCD 0x40011000 AREA ||.data||, DATA, ALIGN=0 lcd_post_select 000000 00 DCB 0x00