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

📄 lcd_gui.txt

📁 STM32+ov7670
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -