⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tft_lcd.txt

📁 STM32手持式示波器源代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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代码 或者汉字代码的高字节 */
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个字符字模的字节数 */
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	/* 汉字内码 */
;;;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 + -