?? tft_lcd.txt
字號:
;;;903 /* PE3,PE4 用于A19, A20, STM32F103ZE-EK(REV 2.0)必須使能 */
;;;904 /* PE5,PE6 用于A19, A20, STM32F103ZE-EK(REV 2.0)必須使能 */
;;;905 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
000030 f64f70f8 MOV r0,#0xfff8
000034 f8ad0000 STRH r0,[sp,#0]
;;;906 GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
;;;907 GPIO_Pin_15 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
;;;908 GPIO_Init(GPIOE, &GPIO_InitStructure);
000038 4669 MOV r1,sp
00003a 480a LDR r0,|L4.100|
00003c f7fffffe BL GPIO_Init
;;;909
;;;910 /* 設置 PF.00(A0 (RS)) 為復用推挽輸出 */
;;;911 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
000040 2001 MOVS r0,#1
000042 f8ad0000 STRH r0,[sp,#0]
;;;912 GPIO_Init(GPIOF, &GPIO_InitStructure);
000046 4669 MOV r1,sp
000048 4807 LDR r0,|L4.104|
00004a f7fffffe BL GPIO_Init
;;;913
;;;914 /* 設置 PG.12(NE4 (LCD/CS)) 為復用推挽輸出 - CE3(LCD /CS) */
;;;915 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
00004e f44f5080 MOV r0,#0x1000
000052 f8ad0000 STRH r0,[sp,#0]
;;;916 GPIO_Init(GPIOG, &GPIO_InitStructure);
000056 4669 MOV r1,sp
000058 4804 LDR r0,|L4.108|
00005a f7fffffe BL GPIO_Init
;;;917
;;;918 }
00005e bd08 POP {r3,pc}
;;;919
ENDP
|L4.96|
DCD 0x40011400
|L4.100|
DCD 0x40011800
|L4.104|
DCD 0x40011c00
|L4.108|
DCD 0x40012000
AREA ||i.LCD_DisplayOff||, CODE, READONLY, ALIGN=1
LCD_DisplayOff PROC
;;;868 */
;;;869 void LCD_DisplayOff(void)
000000 b500 PUSH {lr}
;;;870 {
;;;871 /* Display Off */
;;;872 LCD_WriteReg(R7, 0x0);
000002 2100 MOVS r1,#0
000004 2007 MOVS r0,#7
000006 f7fffffe BL LCD_WriteReg
;;;873 }
00000a bd00 POP {pc}
;;;874
ENDP
AREA ||i.LCD_DisplayOn||, CODE, READONLY, ALIGN=1
LCD_DisplayOn PROC
;;;856 */
;;;857 void LCD_DisplayOn(void)
000000 b500 PUSH {lr}
;;;858 {
;;;859 /* Display On */
;;;860 LCD_WriteReg(R7, 0x0173); /* 262K color and display ON */
000002 f2401173 MOV r1,#0x173
000006 2007 MOVS r0,#7
000008 f7fffffe BL LCD_WriteReg
;;;861 }
00000c bd00 POP {pc}
;;;862
ENDP
AREA ||i.LCD_DisplayString||, CODE, READONLY, ALIGN=2
LCD_DisplayString PROC
;;;339 */
;;;340 void LCD_DisplayString(uint16_t Xpos, uint16_t Ypos, uint8_t *ptr)
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;341 {
000004 4604 MOV r4,r0
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
;;;342 uint32_t i = 0;
00000a 2700 MOVS r7,#0
;;;343 uint8_t code1;
;;;344 uint8_t code2;
;;;345 uint32_t address;
;;;346 uint32_t k;
;;;347
;;;348
;;;349 while ((*ptr != 0) & (i < 50))
00000c e03f B |L7.142|
|L7.14|
;;;350 {
;;;351 code1 = *ptr; /* ascii代碼 或者漢字代碼的高字節(jié) */
00000e f8968000 LDRB r8,[r6,#0]
;;;352 if (code1 < 0x80)
000012 f1b80f80 CMP r8,#0x80
000016 da0b BGE |L7.48|
;;;353 {
;;;354 LCD_DrawChar(Xpos, Ypos, &Ascii16[code1 * 16], 8); /* 16 表示1個字符字模的字節(jié)數(shù) */
000018 4924 LDR r1,|L7.172|
00001a eb011208 ADD r2,r1,r8,LSL #4
00001e 2308 MOVS r3,#8
000020 4629 MOV r1,r5
000022 4620 MOV r0,r4
000024 f7fffffe BL LCD_DrawChar
;;;355 Xpos += 8; /* 列地址+8 */
000028 f1040008 ADD r0,r4,#8
00002c b284 UXTH r4,r0
00002e e02c B |L7.138|
|L7.48|
;;;356 }
;;;357 else /* 漢字內(nèi)碼 */
;;;358 {
;;;359 code2 = *++ptr;
000030 1c70 ADDS r0,r6,#1
000032 4606 MOV r6,r0
000034 f8909000 LDRB r9,[r0,#0]
;;;360 if (code2 == 0)
000038 f1b90f00 CMP r9,#0
00003c d100 BNE |L7.64|
;;;361 {
;;;362 break;
00003e e032 B |L7.166|
|L7.64|
;;;363 }
;;;364
;;;365 /* 計算16點陣漢字點陣地址
;;;366 ADDRESS = [(code1-0xa1) * 94 + (code2-0xa1)] * 32
;;;367 ;
;;;368 */
;;;369 #ifdef USE_SMALL_FONT
;;;370 for (k = 0; k < HZ_COUNT; k++)
000040 f04f0b00 MOV r11,#0
000044 e012 B |L7.108|
|L7.70|
;;;371 {
;;;372 address = k * 34;
000046 eb0b100b ADD r0,r11,r11,LSL #4
00004a ea4f0a40 LSL r10,r0,#1
;;;373
;;;374 if ((code1 == g_Hz16[address + 0]) && (code2 == g_Hz16[address + 1]))
00004e 4918 LDR r1,|L7.176|
000050 f811000a LDRB r0,[r1,r10]
000054 4540 CMP r0,r8
000056 d107 BNE |L7.104|
000058 f10a0001 ADD r0,r10,#1
00005c 5c08 LDRB r0,[r1,r0]
00005e 4548 CMP r0,r9
000060 d102 BNE |L7.104|
;;;375 {
;;;376 address += 2;
000062 f10a0a02 ADD r10,r10,#2
;;;377 break;
000066 e004 B |L7.114|
|L7.104|
000068 f10b0b01 ADD r11,r11,#1 ;370
|L7.108|
00006c f1bb0f42 CMP r11,#0x42 ;370
000070 d3e9 BCC |L7.70|
|L7.114|
000072 bf00 NOP
;;;378 }
;;;379 }
;;;380 address = (uint32_t)&g_Hz16[address];
000074 480e LDR r0,|L7.176|
000076 4482 ADD r10,r10,r0
;;;381 #else
;;;382 address = ((code1-0xa1) * 94 + (code2-0xa1)) * 32 + HZK16_ADDR;
;;;383 #endif
;;;384
;;;385 LCD_DrawChar(Xpos, Ypos, (const uint8_t *)address, 16);
000078 2310 MOVS r3,#0x10
00007a 4652 MOV r2,r10
00007c 4629 MOV r1,r5
00007e 4620 MOV r0,r4
000080 f7fffffe BL LCD_DrawChar
;;;386 Xpos += 16; /* 列地址+16 */
000084 f1040010 ADD r0,r4,#0x10
000088 b284 UXTH r4,r0
|L7.138|
;;;387 }
;;;388 ptr++; /* 指向下一個字符 */
00008a 1c76 ADDS r6,r6,#1
;;;389 i++;
00008c 1c7f ADDS r7,r7,#1
|L7.142|
00008e 7830 LDRB r0,[r6,#0] ;349
000090 b108 CBZ r0,|L7.150|
000092 2001 MOVS r0,#1 ;349
000094 e000 B |L7.152|
|L7.150|
000096 2000 MOVS r0,#0 ;349
|L7.152|
000098 2f32 CMP r7,#0x32 ;349
00009a d201 BCS |L7.160|
00009c 2101 MOVS r1,#1 ;349
00009e e000 B |L7.162|
|L7.160|
0000a0 2100 MOVS r1,#0 ;349
|L7.162|
0000a2 4208 TST r0,r1 ;349
0000a4 d1b3 BNE |L7.14|
|L7.166|
0000a6 bf00 NOP ;362
;;;390 }
;;;391 }
0000a8 e8bd8ff0 POP {r4-r11,pc}
;;;392
ENDP
|L7.172|
DCD Ascii16
|L7.176|
DCD g_Hz16
AREA ||i.LCD_DrawChar||, CODE, READONLY, ALIGN=2
LCD_DrawChar PROC
;;;279 */
;;;280 void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c, uint8_t width)
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;281 {
000004 4604 MOV r4,r0
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
00000a 461f MOV r7,r3
;;;282 uint32_t index = 0, i = 0;
00000c f04f0800 MOV r8,#0
000010 46c1 MOV r9,r8
;;;283 uint8_t Yaddress;
;;;284
;;;285 Yaddress = Ypos;
000012 f0050aff AND r10,r5,#0xff
;;;286
;;;287 LCD_SetCursor(Xpos, Ypos);
000016 4629 MOV r1,r5
000018 4620 MOV r0,r4
00001a f7fffffe BL LCD_SetCursor
;;;288
;;;289 if (s_Transparent == 0)
00001e 4836 LDR r0,|L8.248|
000020 7800 LDRB r0,[r0,#0] ; s_Transparent
000022 2800 CMP r0,#0
000024 d132 BNE |L8.140|
;;;290 {
;;;291 for (index = 0; index < 16; index++) /* 字符高度 */
000026 bf00 NOP
000028 e02c B |L8.132|
|L8.42|
;;;292 {
;;;293 LCD_WriteRAM_Prepare();
00002a f7fffffe BL LCD_WriteRAM_Prepare
;;;294 for (i = 0; i < width; i++) /* 字符寬度 */
00002e f04f0900 MOV r9,#0
000032 e01b B |L8.108|
|L8.52|
;;;295 {
;;;296 if ((c[index * (width / 8) + i / 8] & (0x80 >> (i % 8))) == 0x00)
000034 17f9 ASRS r1,r7,#31
000036 eb077151 ADD r1,r7,r1,LSR #29
00003a 10c9 ASRS r1,r1,#3
00003c fb01f108 MUL r1,r1,r8
000040 eb0101d9 ADD r1,r1,r9,LSR #3
000044 5c71 LDRB r1,[r6,r1]
000046 f0090307 AND r3,r9,#7
00004a 2280 MOVS r2,#0x80
00004c 411a ASRS r2,r2,r3
00004e 4211 TST r1,r2
000050 d105 BNE |L8.94|
;;;297 {
;;;298 LCD_WriteRAM(s_BackColor);
000052 4829 LDR r0,|L8.248|
000054 1e80 SUBS r0,r0,#2
000056 8800 LDRH r0,[r0,#0] ; s_BackColor
000058 f7fffffe BL LCD_WriteRAM
00005c e004 B |L8.104|
|L8.94|
;;;299 }
;;;300 else
;;;301 {
;;;302 LCD_WriteRAM(s_TextColor);
00005e 4826 LDR r0,|L8.248|
000060 1f00 SUBS r0,r0,#4
000062 8800 LDRH r0,[r0,#0] ; s_TextColor
000064 f7fffffe BL LCD_WriteRAM
|L8.104|
000068 f1090901 ADD r9,r9,#1 ;294
|L8.108|
00006c 45b9 CMP r9,r7 ;294
00006e d3e1 BCC |L8.52|
;;;303 }
;;;304 }
;;;305 Yaddress++;
000070 f10a0001 ADD r0,r10,#1
000074 f0000aff AND r10,r0,#0xff
;;;306 LCD_SetCursor(Xpos, Yaddress);
000078 4651 MOV r1,r10
00007a 4620 MOV r0,r4
00007c f7fffffe BL LCD_SetCursor
000080 f1080801 ADD r8,r8,#1 ;291
|L8.132|
000084 f1b80f10 CMP r8,#0x10 ;291
000088 d3cf BCC |L8.42|
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -