; generated by Component: ARM Compiler 5.05 update 2 (build 169) Tool: ArmCC [4d0f38]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\vk1668_driver.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\vk1668_driver.d --cpu=Cortex-M4.fp --apcs=interwork -O0 --diag_suppress=9931 -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\M451Series\Include -I..\..\..\Library\StdDriver\inc -I..\Bsp -I..\User -I..\lcd_driver -I..\exti_driver -I..\led_driver -I..\touch -I..\dotmatix_lcd -I..\KH -ID:\\A\LED\VK1628ϵ\VK1628ϵп\VK1668\VK1668_TESTCODE\project\VK1668_FUNC\Keil\RTE -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\4.3.0\CMSIS\Include -D__UVISION_VERSION=515 -D_RTE_ --omf_browse=.\obj\vk1668_driver.crf ..\led_driver\vk1668_driver.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  VK1668_delay_nus PROC
;;;50     *******************************************************************************/
;;;51     void  VK1668_delay_nus(unsigned int n)	   
000000  e007              B        |L1.18|
                  |L1.2|
;;;52     {
;;;53     	unsigned char i;
;;;54     	while(n--)
;;;55     	{
;;;56     		i=10;
000002  210a              MOVS     r1,#0xa
;;;57     		while(i--)
000004  e000              B        |L1.8|
                  |L1.6|
;;;58     		{//nopָݵƬӦ޸
;;;59     			__nop();
000006  bf00              NOP      
                  |L1.8|
000008  000a              MOVS     r2,r1                 ;57
00000a  f1a10301          SUB      r3,r1,#1              ;57
00000e  b2d9              UXTB     r1,r3                 ;57
000010  d1f9              BNE      |L1.6|
                  |L1.18|
000012  0002              MOVS     r2,r0                 ;54
000014  f1a00001          SUB      r0,r0,#1              ;54
000018  d1f3              BNE      |L1.2|
;;;60     		}
;;;61     	}
;;;62     }	
00001a  4770              BX       lr
;;;63     /*******************************************************************************
                          ENDP

                  VK1668_delayms PROC
;;;69     *******************************************************************************/
;;;70     void  VK1668_delayms(unsigned long int n)
00001c  b510              PUSH     {r4,lr}
;;;71     {
00001e  4604              MOV      r4,r0
;;;72     	while(n--)
000020  e003              B        |L1.42|
                  |L1.34|
;;;73     	{
;;;74     		 VK1668_delay_nus(1000);
000022  f44f707a          MOV      r0,#0x3e8
000026  f7fffffe          BL       VK1668_delay_nus
                  |L1.42|
00002a  0020              MOVS     r0,r4                 ;72
00002c  f1a40401          SUB      r4,r4,#1              ;72
000030  d1f7              BNE      |L1.34|
;;;75     	}
;;;76     }
000032  bd10              POP      {r4,pc}
;;;77     
                          ENDP

                  VK1668Write1BytetoIC PROC
;;;85     *******************************************************************************/
;;;86     void VK1668Write1BytetoIC(unsigned char data8)
000034  b530              PUSH     {r4,r5,lr}
;;;87     {
000036  4604              MOV      r4,r0
;;;88     	unsigned char i;
;;;89     	
;;;90     	VK1668_STB_LOW;			//֤STBΪ͵ƽ֮ǰ˿ڵ״̬
000038  2000              MOVS     r0,#0
00003a  49fa              LDR      r1,|L1.1060|
00003c  6008              STR      r0,[r1,#0]
;;;91     	for(i=0;i<8;i++)
00003e  2500              MOVS     r5,#0
000040  e01b              B        |L1.122|
                  |L1.66|
;;;92     	{
;;;93     		VK1668_SLK_LOW;		//ȽCLK
000042  2000              MOVS     r0,#0
000044  49f7              LDR      r1,|L1.1060|
000046  1f09              SUBS     r1,r1,#4
000048  6008              STR      r0,[r1,#0]
;;;94     		if((data8&0x01)!=0)
00004a  f0040001          AND      r0,r4,#1
00004e  b118              CBZ      r0,|L1.88|
;;;95     		{
;;;96     			VK1668_DAT_HIGH;//Ҫ͵ݵĵλΪ1ѡDIOø
000050  2001              MOVS     r0,#1
000052  1f09              SUBS     r1,r1,#4
000054  6008              STR      r0,[r1,#0]
000056  e003              B        |L1.96|
                  |L1.88|
;;;97     		}
;;;98     		else
;;;99     		{
;;;100    			VK1668_DAT_LOW;	//Ҫ͵ݵĵλΪ0ѡDIO
000058  2000              MOVS     r0,#0
00005a  49f2              LDR      r1,|L1.1060|
00005c  3908              SUBS     r1,r1,#8
00005e  6008              STR      r0,[r1,#0]
                  |L1.96|
;;;101    		}
;;;102    		VK1668_delay_nus(200);
000060  20c8              MOVS     r0,#0xc8
000062  f7fffffe          BL       VK1668_delay_nus
;;;103    		VK1668_SLK_HIGH;	//ʱӵ
000066  2001              MOVS     r0,#1
000068  49ee              LDR      r1,|L1.1060|
00006a  1f09              SUBS     r1,r1,#4
00006c  6008              STR      r0,[r1,#0]
;;;104    		VK1668_delay_nus(200);
00006e  20c8              MOVS     r0,#0xc8
000070  f7fffffe          BL       VK1668_delay_nus
;;;105    		data8=data8>>1;		//׼һBIT
000074  1064              ASRS     r4,r4,#1
000076  1c68              ADDS     r0,r5,#1              ;91
000078  b2c5              UXTB     r5,r0                 ;91
                  |L1.122|
00007a  2d08              CMP      r5,#8                 ;91
00007c  dbe1              BLT      |L1.66|
;;;106    	
;;;107    	}//һֽں˳ѭ
;;;108    }
00007e  bd30              POP      {r4,r5,pc}
;;;109    
                          ENDP

                  VK1668Read1BytefromIC PROC
;;;116    *******************************************************************************/
;;;117    unsigned char VK1668Read1BytefromIC(void)
000080  b530              PUSH     {r4,r5,lr}
;;;118    {
;;;119    	unsigned char i,k=0;//iѭkʱ
000082  2400              MOVS     r4,#0
;;;120    
;;;121    	VK1668_DAT_HIGH;	//ͷDIOΪ
000084  2001              MOVS     r0,#1
000086  49e7              LDR      r1,|L1.1060|
000088  3908              SUBS     r1,r1,#8
00008a  6008              STR      r0,[r1,#0]
;;;122    	VK1668_STB_LOW;	//֤STBΪ͵ƽ֮ǰ˿ڵ״̬
00008c  2000              MOVS     r0,#0
00008e  49e5              LDR      r1,|L1.1060|
000090  6008              STR      r0,[r1,#0]
;;;123    	for(i=0;i<8;i++)
000092  2500              MOVS     r5,#0
000094  e01a              B        |L1.204|
                  |L1.150|
;;;124    	{
;;;125    		VK1668_SLK_LOW;//ȽCLK
000096  2000              MOVS     r0,#0
000098  49e2              LDR      r1,|L1.1060|
00009a  1f09              SUBS     r1,r1,#4
00009c  6008              STR      r0,[r1,#0]
;;;126    		VK1668_delay_nus(200);
00009e  20c8              MOVS     r0,#0xc8
0000a0  f7fffffe          BL       VK1668_delay_nus
;;;127    		k=k>>1;
0000a4  1064              ASRS     r4,r4,#1
;;;128    		if(VK1668_DIO_IO==0)
0000a6  48df              LDR      r0,|L1.1060|
0000a8  3808              SUBS     r0,r0,#8
0000aa  6800              LDR      r0,[r0,#0]
0000ac  b910              CBNZ     r0,|L1.180|
;;;129    		{
;;;130    			k=k&0x7f;			//DIOΪ͵ƽkλ塰0λֲ
0000ae  f004047f          AND      r4,r4,#0x7f
0000b2  e002              B        |L1.186|
                  |L1.180|
;;;131    		}
;;;132    		else
;;;133    		{
;;;134    			k=(k|0x80)&0xff;//DIOΪߵƽkλá1λֲ
0000b4  b2e0              UXTB     r0,r4
0000b6  f0400480          ORR      r4,r0,#0x80
                  |L1.186|
;;;135    		}
;;;136    		VK1668_SLK_HIGH;	//ʱӵ
0000ba  2001              MOVS     r0,#1
0000bc  49d9              LDR      r1,|L1.1060|
0000be  1f09              SUBS     r1,r1,#4
0000c0  6008              STR      r0,[r1,#0]
;;;137    		VK1668_delay_nus(200);
0000c2  20c8              MOVS     r0,#0xc8
0000c4  f7fffffe          BL       VK1668_delay_nus
0000c8  1c68              ADDS     r0,r5,#1              ;123
0000ca  b2c5              UXTB     r5,r0                 ;123
                  |L1.204|
0000cc  2d08              CMP      r5,#8                 ;123
0000ce  dbe2              BLT      |L1.150|
;;;138    	}//һֽں˳ѭ
;;;139    	
;;;140    	return(k);//ض1ֽ	
0000d0  4620              MOV      r0,r4
;;;141    }
0000d2  bd30              POP      {r4,r5,pc}
;;;142    /*******************************************************************************
                          ENDP

                  VK1668_Disp_AutoAdd1Addr PROC
;;;150    *******************************************************************************/
;;;151    void VK1668_Disp_AutoAdd1Addr(unsigned char addr,unsigned char* databuf, unsigned char num)
0000d4  b5f0              PUSH     {r4-r7,lr}
;;;152    {
0000d6  4605              MOV      r5,r0
0000d8  460c              MOV      r4,r1
0000da  4616              MOV      r6,r2
;;;153    	unsigned char i;//iƱҪٸֽʾ
;;;154    	
;;;155    	VK1668_STB_HIGH;//ͨѶʼǰͨѶ˿ȫʼΪ1	
0000dc  2001              MOVS     r0,#1
0000de  49d1              LDR      r1,|L1.1060|
0000e0  6008              STR      r0,[r1,#0]
;;;156    	VK1668Write1BytetoIC(VK1668_DISPMODE_4G13S);//ʾģʽΪ134λʾģʽ
0000e2  2000              MOVS     r0,#0
0000e4  f7fffffe          BL       VK1668Write1BytetoIC
;;;157    	VK1668_STB_HIGH;//ʾģʽ󽫡STB1
0000e8  2001              MOVS     r0,#1
0000ea  49ce              LDR      r1,|L1.1060|
0000ec  6008              STR      r0,[r1,#0]
;;;158    	VK1668Write1BytetoIC(VK1668_WRDTA_AUTOADD1ADDR);//òõַԶ1ʽдʾݣ
0000ee  2040              MOVS     r0,#0x40
0000f0  f7fffffe          BL       VK1668Write1BytetoIC
;;;159    	VK1668_STB_HIGH;//ҪSTBá1
0000f4  2001              MOVS     r0,#1
0000f6  49cb              LDR      r1,|L1.1060|
0000f8  6008              STR      r0,[r1,#0]
;;;160    	VK1668Write1BytetoIC(VK1668_STARTADDR+addr);//ʼַ
0000fa  f10501c0          ADD      r1,r5,#0xc0
0000fe  b2c8              UXTB     r0,r1
000100  f7fffffe          BL       VK1668Write1BytetoIC
;;;161    	//ַ󣬡STBΪ0Ҫʾ
;;;162    	for(i=0;i<num;i++)
000104  2700              MOVS     r7,#0
000106  e005              B        |L1.276|
                  |L1.264|
;;;163    	{
;;;164    		VK1668Write1BytetoIC(*databuf++);//ʾݹУSTBһֱΪ0
000108  f8140b01          LDRB     r0,[r4],#1
00010c  f7fffffe          BL       VK1668Write1BytetoIC
000110  1c78              ADDS     r0,r7,#1              ;162
000112  b2c7              UXTB     r7,r0                 ;162
                  |L1.276|
000114  42b7              CMP      r7,r6                 ;162
000116  dbf7              BLT      |L1.264|
;;;165    	}
;;;166    	VK1668_STB_HIGH;//еʾݺ14BYTE󣬽STBá1
000118  2001              MOVS     r0,#1
00011a  49c2              LDR      r1,|L1.1060|
00011c  6008              STR      r0,[r1,#0]
;;;167    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_12_16);//ʾ
00011e  208d              MOVS     r0,#0x8d
000120  f7fffffe          BL       VK1668Write1BytetoIC
;;;168    	VK1668_STB_HIGH;//ʾ󽫡STBá1
000124  2001              MOVS     r0,#1
000126  49bf              LDR      r1,|L1.1060|
000128  6008              STR      r0,[r1,#0]
;;;169    }
00012a  bdf0              POP      {r4-r7,pc}
;;;170    /*******************************************************************************
                          ENDP

                  VK1668_Disp_FixedAddr PROC
;;;176    *******************************************************************************/
;;;177    void VK1668_Disp_FixedAddr(unsigned char addr, unsigned char data8)
00012c  b530              PUSH     {r4,r5,lr}
;;;178    {
00012e  4604              MOV      r4,r0
000130  460d              MOV      r5,r1
;;;179    	VK1668_STB_HIGH;//ͨѶʼǰͨѶ˿ȫʼΪ1	
000132  2001              MOVS     r0,#1
000134  49bb              LDR      r1,|L1.1060|
000136  6008              STR      r0,[r1,#0]
;;;180    	VK1668Write1BytetoIC(VK1668_DISPMODE_4G13S);//ʾģʽΪ134λʾģʽ
000138  2000              MOVS     r0,#0
00013a  f7fffffe          BL       VK1668Write1BytetoIC
;;;181    	VK1668_STB_HIGH;//ʾģʽ󽫡STB1
00013e  2001              MOVS     r0,#1
000140  49b8              LDR      r1,|L1.1060|
000142  6008              STR      r0,[r1,#0]
;;;182    	VK1668Write1BytetoIC(VK1668_WRDTA_FIXEDADDR);//òù̶ַдʾݣ
000144  2044              MOVS     r0,#0x44
000146  f7fffffe          BL       VK1668Write1BytetoIC
;;;183    	VK1668_STB_HIGH;//ҪSTBá1
00014a  2001              MOVS     r0,#1
00014c  49b5              LDR      r1,|L1.1060|
00014e  6008              STR      r0,[r1,#0]
;;;184    	VK1668Write1BytetoIC(VK1668_STARTADDR+addr);//ʾݶӦĵַ
000150  f10401c0          ADD      r1,r4,#0xc0
000154  b2c8              UXTB     r0,r1
000156  f7fffffe          BL       VK1668Write1BytetoIC
;;;185    	//ַ󣬡STBΪ0Ҫʾ
;;;186    	VK1668Write1BytetoIC(data8);//֡STB=01BYTEʾ
00015a  4628              MOV      r0,r5
00015c  f7fffffe          BL       VK1668Write1BytetoIC
;;;187    	VK1668_STB_HIGH;//ʾݺ󽫡STBá1
000160  2001              MOVS     r0,#1
000162  49b0              LDR      r1,|L1.1060|
000164  6008              STR      r0,[r1,#0]
;;;188    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_12_16);//ʾ
000166  208d              MOVS     r0,#0x8d
000168  f7fffffe          BL       VK1668Write1BytetoIC
;;;189    	VK1668_STB_HIGH;//ʾ󽫡STBá1
00016c  2001              MOVS     r0,#1
00016e  49ad              LDR      r1,|L1.1060|
000170  6008              STR      r0,[r1,#0]
;;;190    }
000172  bd30              POP      {r4,r5,pc}
;;;191    	
                          ENDP

                  VK1668_KeyScan PROC
;;;198    *******************************************************************************/
;;;199    unsigned char VK1668_KeyScan(void)
000174  b510              PUSH     {r4,lr}
;;;200    {
;;;201    	unsigned char i;
;;;202    	
;;;203    	VK1668_STB_HIGH;
000176  2001              MOVS     r0,#1
000178  49aa              LDR      r1,|L1.1060|
00017a  6008              STR      r0,[r1,#0]
;;;204    	VK1668Write1BytetoIC(VK1668_CMD_READKEY);//Ϊ
00017c  2042              MOVS     r0,#0x42
00017e  f7fffffe          BL       VK1668Write1BytetoIC
;;;205    	//STBΪ0ֵ
;;;206    	//ļֵMCUļĴ
;;;207    	//ICͺ˳ɶȶ
;;;208    	for(i=0;i<5;i++)
000182  2400              MOVS     r4,#0
000184  e005              B        |L1.402|
                  |L1.390|
;;;209    	{
;;;210    		vk1668_key[i]=VK1668Read1BytefromIC();
000186  f7fffffe          BL       VK1668Read1BytefromIC
00018a  49a7              LDR      r1,|L1.1064|
00018c  5508              STRB     r0,[r1,r4]
00018e  1c60              ADDS     r0,r4,#1              ;208
000190  b2c4              UXTB     r4,r0                 ;208
                  |L1.402|
000192  2c05              CMP      r4,#5                 ;208
000194  dbf7              BLT      |L1.390|
;;;211    	}
;;;212    	VK1668_STB_HIGH;
000196  2001              MOVS     r0,#1
000198  49a2              LDR      r1,|L1.1060|
00019a  6008              STR      r0,[r1,#0]
;;;213    	
;;;214    	return 0;//STBá1
00019c  2000              MOVS     r0,#0
;;;215    }
00019e  bd10              POP      {r4,pc}
;;;216    /*******************************************************************************
                          ENDP

                  VK1668_Init PROC
;;;222    *******************************************************************************/ 
;;;223    void VK1668_Init(void)    
0001a0  b510              PUSH     {r4,lr}
;;;224    {   
;;;225    	GPIO_SetMode(VK1668_STB_PORT, VK1668_STB_PIN, GPIO_MODE_OUTPUT);
0001a2  2201              MOVS     r2,#1
0001a4  0311              LSLS     r1,r2,#12
0001a6  48a1              LDR      r0,|L1.1068|
0001a8  f7fffffe          BL       GPIO_SetMode
;;;226    	GPIO_SetMode(VK1668_CLK_PORT, VK1668_CLK_PIN, GPIO_MODE_OUTPUT);
0001ac  2201              MOVS     r2,#1
0001ae  02d1              LSLS     r1,r2,#11
0001b0  489e              LDR      r0,|L1.1068|
0001b2  f7fffffe          BL       GPIO_SetMode
;;;227    	GPIO_SetMode(VK1668_DIO_PORT, VK1668_DIO_PIN, GPIO_MODE_OUTPUT);
0001b6  2201              MOVS     r2,#1
0001b8  0291              LSLS     r1,r2,#10
0001ba  489c              LDR      r0,|L1.1068|
0001bc  f7fffffe          BL       GPIO_SetMode
;;;228    	
;;;229    	VK1668_STB_HIGH;                
0001c0  2001              MOVS     r0,#1
0001c2  4998              LDR      r1,|L1.1060|
0001c4  6008              STR      r0,[r1,#0]
;;;230    	VK1668_SLK_HIGH;   
0001c6  1f09              SUBS     r1,r1,#4
0001c8  6008              STR      r0,[r1,#0]
;;;231    	VK1668_DAT_HIGH;
0001ca  1f09              SUBS     r1,r1,#4
0001cc  6008              STR      r0,[r1,#0]
;;;232    }  
0001ce  bd10              POP      {r4,pc}
;;;233    /*******************************************************************************
                          ENDP

                  VK1668_disAll PROC
;;;239    *******************************************************************************/ 
;;;240    void VK1668_disAll(unsigned char dat) 
0001d0  b530              PUSH     {r4,r5,lr}
;;;241    {
0001d2  4605              MOV      r5,r0
;;;242      unsigned char i;
;;;243    	
;;;244    	for(i=0;i<14;i++)
0001d4  2400              MOVS     r4,#0
0001d6  e003              B        |L1.480|
                  |L1.472|
;;;245    	{
;;;246    		vk1668_dispram[i]=dat;
0001d8  4895              LDR      r0,|L1.1072|
0001da  5505              STRB     r5,[r0,r4]
0001dc  1c60              ADDS     r0,r4,#1              ;244
0001de  b2c4              UXTB     r4,r0                 ;244
                  |L1.480|
0001e0  2c0e              CMP      r4,#0xe               ;244
0001e2  dbf9              BLT      |L1.472|
;;;247    	}
;;;248    	VK1668_Disp_AutoAdd1Addr(0,vk1668_dispram,14);
0001e4  220e              MOVS     r2,#0xe
0001e6  4992              LDR      r1,|L1.1072|
0001e8  2000              MOVS     r0,#0
0001ea  f7fffffe          BL       VK1668_Disp_AutoAdd1Addr
;;;249    }	
0001ee  bd30              POP      {r4,r5,pc}
;;;250    /*******************************************************************************
                          ENDP

                  VK1668_DisDotOn PROC
;;;257    *******************************************************************************/
;;;258    void VK1668_DisDotOn(unsigned char seg,unsigned char grid)
0001f0  b5f8              PUSH     {r3-r7,lr}
;;;259    {
0001f2  4605              MOV      r5,r0
0001f4  460c              MOV      r4,r1
;;;260    	unsigned char addrbyte,addrbit,tempdat;
;;;261    	
;;;262    	if(seg<8)
0001f6  2d08              CMP      r5,#8
0001f8  da05              BGE      |L1.518|
;;;263    	{
;;;264    		addrbyte=grid*2;
0001fa  0660              LSLS     r0,r4,#25
0001fc  0e06              LSRS     r6,r0,#24
;;;265    	  addrbit=(1<<seg);
0001fe  2001              MOVS     r0,#1
000200  40a8              LSLS     r0,r0,r5
000202  b2c7              UXTB     r7,r0
000204  e008              B        |L1.536|
                  |L1.518|
;;;266    	}
;;;267    	else
;;;268    	{
;;;269    		addrbyte=grid*2+1;
000206  2001              MOVS     r0,#1
000208  eb000044          ADD      r0,r0,r4,LSL #1
00020c  b2c6              UXTB     r6,r0
;;;270    		addrbit=(1<<(seg-8));
00020e  f1a50008          SUB      r0,r5,#8
000212  2101              MOVS     r1,#1
000214  4081              LSLS     r1,r1,r0
000216  b2cf              UXTB     r7,r1
                  |L1.536|
;;;271    	}
;;;272    	tempdat=vk1668_dispram[grid]|addrbit;
000218  4885              LDR      r0,|L1.1072|
00021a  5d00              LDRB     r0,[r0,r4]
00021c  4338              ORRS     r0,r0,r7
00021e  9000              STR      r0,[sp,#0]
;;;273    	vk1668_dispram[grid]=tempdat;
000220  f89d0000          LDRB     r0,[sp,#0]
000224  4982              LDR      r1,|L1.1072|
000226  5508              STRB     r0,[r1,r4]
;;;274    	VK1668_Disp_AutoAdd1Addr(addrbyte,&tempdat,1);
000228  2201              MOVS     r2,#1
00022a  4669              MOV      r1,sp
00022c  4630              MOV      r0,r6
00022e  f7fffffe          BL       VK1668_Disp_AutoAdd1Addr
;;;275    }
000232  bdf8              POP      {r3-r7,pc}
;;;276    /*******************************************************************************
                          ENDP

                  VK1668_DisDotOff PROC
;;;283    *******************************************************************************/
;;;284    void VK1668_DisDotOff(unsigned char seg,unsigned char grid)
000234  b5f8              PUSH     {r3-r7,lr}
;;;285    {
000236  4605              MOV      r5,r0
000238  460c              MOV      r4,r1
;;;286    	unsigned char addrbyte,addrbit,tempdat;
;;;287    	
;;;288    	if(seg<8)
00023a  2d08              CMP      r5,#8
00023c  da05              BGE      |L1.586|
;;;289    	{
;;;290    		addrbyte=grid*2;
00023e  0660              LSLS     r0,r4,#25
000240  0e06              LSRS     r6,r0,#24
;;;291    	  addrbit=(1<<seg);
000242  2001              MOVS     r0,#1
000244  40a8              LSLS     r0,r0,r5
000246  b2c7              UXTB     r7,r0
000248  e008              B        |L1.604|
                  |L1.586|
;;;292    	}
;;;293    	else
;;;294    	{
;;;295    		addrbyte=grid*2+1;
00024a  2001              MOVS     r0,#1
00024c  eb000044          ADD      r0,r0,r4,LSL #1
000250  b2c6              UXTB     r6,r0
;;;296    		addrbit=(1<<(seg-8));
000252  f1a50008          SUB      r0,r5,#8
000256  2101              MOVS     r1,#1
000258  4081              LSLS     r1,r1,r0
00025a  b2cf              UXTB     r7,r1
                  |L1.604|
;;;297    	}
;;;298    	tempdat=vk1668_dispram[grid]&(~addrbit);
00025c  4874              LDR      r0,|L1.1072|
00025e  5d00              LDRB     r0,[r0,r4]
000260  43b8              BICS     r0,r0,r7
000262  9000              STR      r0,[sp,#0]
;;;299    	vk1668_dispram[grid]=tempdat;
000264  f89d0000          LDRB     r0,[sp,#0]
000268  4971              LDR      r1,|L1.1072|
00026a  5508              STRB     r0,[r1,r4]
;;;300    	VK1668_Disp_AutoAdd1Addr(addrbyte,&tempdat,1);	
00026c  2201              MOVS     r2,#1
00026e  4669              MOV      r1,sp
000270  4630              MOV      r0,r6
000272  f7fffffe          BL       VK1668_Disp_AutoAdd1Addr
;;;301    }
000276  bdf8              POP      {r3-r7,pc}
;;;302    /*******************************************************************************
                          ENDP

                  VK1668_Main PROC
;;;308    *******************************************************************************/ 
;;;309    void VK1668_Main(void)
000278  f7fffffe          BL       VK1668_Init
;;;310    {  	
;;;311    	VK1668_Init();	 
;;;312    	VK1668_disAll(0x00);
00027c  2000              MOVS     r0,#0
00027e  f7fffffe          BL       VK1668_disAll
;;;313    	VK1668_delayms(1000); 
000282  f44f707a          MOV      r0,#0x3e8
000286  f7fffffe          BL       VK1668_delayms
;;;314    	
;;;315    	VK1668_disAll(0xff);
00028a  20ff              MOVS     r0,#0xff
00028c  f7fffffe          BL       VK1668_disAll
;;;316    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_1_16);//1/16
000290  2088              MOVS     r0,#0x88
000292  f7fffffe          BL       VK1668Write1BytetoIC
;;;317    	VK1668_STB_HIGH;
000296  2001              MOVS     r0,#1
000298  4962              LDR      r1,|L1.1060|
00029a  6008              STR      r0,[r1,#0]
;;;318    	VK1668_delayms(1000);
00029c  f44f707a          MOV      r0,#0x3e8
0002a0  f7fffffe          BL       VK1668_delayms
;;;319    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_4_16);//4/16
0002a4  208a              MOVS     r0,#0x8a
0002a6  f7fffffe          BL       VK1668Write1BytetoIC
;;;320    	VK1668_STB_HIGH;
0002aa  2001              MOVS     r0,#1
0002ac  495d              LDR      r1,|L1.1060|
0002ae  6008              STR      r0,[r1,#0]
;;;321    	VK1668_delayms(1000);
0002b0  f44f707a          MOV      r0,#0x3e8
0002b4  f7fffffe          BL       VK1668_delayms
;;;322    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_10_16);//10/16
0002b8  208b              MOVS     r0,#0x8b
0002ba  f7fffffe          BL       VK1668Write1BytetoIC
;;;323    	VK1668_STB_HIGH;
0002be  2001              MOVS     r0,#1
0002c0  4958              LDR      r1,|L1.1060|
0002c2  6008              STR      r0,[r1,#0]
;;;324    	VK1668_delayms(1000);
0002c4  f44f707a          MOV      r0,#0x3e8
0002c8  f7fffffe          BL       VK1668_delayms
;;;325    	VK1668Write1BytetoIC(VK1668_DISP_ON|VK1668_PDUTY_14_16);//14/16
0002cc  208f              MOVS     r0,#0x8f
0002ce  f7fffffe          BL       VK1668Write1BytetoIC
;;;326    	VK1668_STB_HIGH;
0002d2  2001              MOVS     r0,#1
0002d4  4953              LDR      r1,|L1.1060|
0002d6  6008              STR      r0,[r1,#0]
;;;327    	VK1668_delayms(1000);
0002d8  f44f707a          MOV      r0,#0x3e8
0002dc  f7fffffe          BL       VK1668_delayms
;;;328    	
;;;329    	VK1668_disAll(0xff);      //ȫ
0002e0  20ff              MOVS     r0,#0xff
0002e2  f7fffffe          BL       VK1668_disAll
;;;330    	VK1668_delayms(1500);
0002e6  f24050dc          MOV      r0,#0x5dc
0002ea  f7fffffe          BL       VK1668_delayms
;;;331    	VK1668_disAll(0x00);      //ȫ
0002ee  2000              MOVS     r0,#0
0002f0  f7fffffe          BL       VK1668_disAll
;;;332    	VK1668_delayms(1500);		
0002f4  f24050dc          MOV      r0,#0x5dc
0002f8  f7fffffe          BL       VK1668_delayms
;;;333    	
;;;334    	VK1668_disAll(0xAA);      //
0002fc  20aa              MOVS     r0,#0xaa
0002fe  f7fffffe          BL       VK1668_disAll
;;;335    	VK1668_delayms(1500);
000302  f24050dc          MOV      r0,#0x5dc
000306  f7fffffe          BL       VK1668_delayms
;;;336    	VK1668_disAll(0x55);      
00030a  2055              MOVS     r0,#0x55
00030c  f7fffffe          BL       VK1668_disAll
;;;337    	VK1668_delayms(1500);	
000310  f24050dc          MOV      r0,#0x5dc
000314  f7fffffe          BL       VK1668_delayms
;;;338    	
;;;339    	VK1668_disAll(0x00);      //ȫ
000318  2000              MOVS     r0,#0
00031a  f7fffffe          BL       VK1668_disAll
;;;340    	VK1668_delayms(500);
00031e  f44f70fa          MOV      r0,#0x1f4
000322  f7fffffe          BL       VK1668_delayms
;;;341    	for(vk1668_segi=0;vk1668_segi<VK1668_SEGNUM;vk1668_segi++)//seg
000326  2000              MOVS     r0,#0
000328  4942              LDR      r1,|L1.1076|
00032a  7008              STRB     r0,[r1,#0]
00032c  e024              B        |L1.888|
                  |L1.814|
;;;342    	{
;;;343    		for(vk1668_gridi=0;vk1668_gridi<VK1668_GRIDNUM;vk1668_gridi++)//com
00032e  2000              MOVS     r0,#0
000330  4941              LDR      r1,|L1.1080|
000332  7008              STRB     r0,[r1,#0]
000334  e017              B        |L1.870|
                  |L1.822|
;;;344    		{
;;;345    			VK1668_DisDotOn(vk1668_segtab[vk1668_segi],vk1668_gridi);	//LED
000336  4941              LDR      r1,|L1.1084|
000338  4a3e              LDR      r2,|L1.1076|
00033a  7812              LDRB     r2,[r2,#0]  ; vk1668_segi
00033c  5c88              LDRB     r0,[r1,r2]
00033e  493e              LDR      r1,|L1.1080|
000340  7809              LDRB     r1,[r1,#0]  ; vk1668_gridi
000342  f7fffffe          BL       VK1668_DisDotOn
;;;346    			VK1668_delayms(200);				//ʱ200mS
000346  20c8              MOVS     r0,#0xc8
000348  f7fffffe          BL       VK1668_delayms
;;;347    			VK1668_DisDotOff(vk1668_segtab[vk1668_segi],vk1668_gridi);//LEDر
00034c  493b              LDR      r1,|L1.1084|
00034e  4a39              LDR      r2,|L1.1076|
000350  7812              LDRB     r2,[r2,#0]  ; vk1668_segi
000352  5c88              LDRB     r0,[r1,r2]
000354  4938              LDR      r1,|L1.1080|
000356  7809              LDRB     r1,[r1,#0]  ; vk1668_gridi
000358  f7fffffe          BL       VK1668_DisDotOff
00035c  4836              LDR      r0,|L1.1080|
00035e  7800              LDRB     r0,[r0,#0]            ;343  ; vk1668_gridi
000360  1c40              ADDS     r0,r0,#1              ;343
000362  4935              LDR      r1,|L1.1080|
000364  7008              STRB     r0,[r1,#0]            ;343
                  |L1.870|
000366  4834              LDR      r0,|L1.1080|
000368  7800              LDRB     r0,[r0,#0]            ;343  ; vk1668_gridi
00036a  2804              CMP      r0,#4                 ;343
00036c  dbe3              BLT      |L1.822|
00036e  4831              LDR      r0,|L1.1076|
000370  7800              LDRB     r0,[r0,#0]            ;341  ; vk1668_segi
000372  1c40              ADDS     r0,r0,#1              ;341
000374  492f              LDR      r1,|L1.1076|
000376  7008              STRB     r0,[r1,#0]            ;341
                  |L1.888|
000378  482e              LDR      r0,|L1.1076|
00037a  7800              LDRB     r0,[r0,#0]            ;341  ; vk1668_segi
00037c  280d              CMP      r0,#0xd               ;341
00037e  dbd6              BLT      |L1.814|
;;;348    		}
;;;349    	}
;;;350    	
;;;351    	VK1668_disAll(0xff);      //ȫ
000380  20ff              MOVS     r0,#0xff
000382  f7fffffe          BL       VK1668_disAll
;;;352    	VK1668_delayms(500);
000386  f44f70fa          MOV      r0,#0x1f4
00038a  f7fffffe          BL       VK1668_delayms
;;;353    	for(vk1668_segi=0;vk1668_segi<VK1668_SEGNUM;vk1668_segi++)//seg
00038e  2000              MOVS     r0,#0
000390  4928              LDR      r1,|L1.1076|
000392  7008              STRB     r0,[r1,#0]
000394  e024              B        |L1.992|
                  |L1.918|
;;;354    	{
;;;355    		for(vk1668_gridi=0;vk1668_gridi<VK1668_GRIDNUM;vk1668_gridi++)//com
000396  2000              MOVS     r0,#0
000398  4927              LDR      r1,|L1.1080|
00039a  7008              STRB     r0,[r1,#0]
00039c  e017              B        |L1.974|
                  |L1.926|
;;;356    		{
;;;357    			VK1668_DisDotOff(vk1668_segtab[vk1668_segi],vk1668_gridi);	//LEDر
00039e  4927              LDR      r1,|L1.1084|
0003a0  4a24              LDR      r2,|L1.1076|
0003a2  7812              LDRB     r2,[r2,#0]  ; vk1668_segi
0003a4  5c88              LDRB     r0,[r1,r2]
0003a6  4924              LDR      r1,|L1.1080|
0003a8  7809              LDRB     r1,[r1,#0]  ; vk1668_gridi
0003aa  f7fffffe          BL       VK1668_DisDotOff
;;;358    			VK1668_delayms(200);				//ʱ200mS
0003ae  20c8              MOVS     r0,#0xc8
0003b0  f7fffffe          BL       VK1668_delayms
;;;359    			VK1668_DisDotOn(vk1668_segtab[vk1668_segi],vk1668_gridi);//LED
0003b4  4921              LDR      r1,|L1.1084|
0003b6  4a1f              LDR      r2,|L1.1076|
0003b8  7812              LDRB     r2,[r2,#0]  ; vk1668_segi
0003ba  5c88              LDRB     r0,[r1,r2]
0003bc  491e              LDR      r1,|L1.1080|
0003be  7809              LDRB     r1,[r1,#0]  ; vk1668_gridi
0003c0  f7fffffe          BL       VK1668_DisDotOn
0003c4  481c              LDR      r0,|L1.1080|
0003c6  7800              LDRB     r0,[r0,#0]            ;355  ; vk1668_gridi
0003c8  1c40              ADDS     r0,r0,#1              ;355
0003ca  491b              LDR      r1,|L1.1080|
0003cc  7008              STRB     r0,[r1,#0]            ;355
                  |L1.974|
0003ce  481a              LDR      r0,|L1.1080|
0003d0  7800              LDRB     r0,[r0,#0]            ;355  ; vk1668_gridi
0003d2  2804              CMP      r0,#4                 ;355
0003d4  dbe3              BLT      |L1.926|
0003d6  4817              LDR      r0,|L1.1076|
0003d8  7800              LDRB     r0,[r0,#0]            ;353  ; vk1668_segi
0003da  1c40              ADDS     r0,r0,#1              ;353
0003dc  4915              LDR      r1,|L1.1076|
0003de  7008              STRB     r0,[r1,#0]            ;353
                  |L1.992|
0003e0  4814              LDR      r0,|L1.1076|
0003e2  7800              LDRB     r0,[r0,#0]            ;353  ; vk1668_segi
0003e4  280d              CMP      r0,#0xd               ;353
0003e6  dbd6              BLT      |L1.918|
;;;360    		}
;;;361    	}	
;;;362    	VK1668_disAll(0x00); 
0003e8  2000              MOVS     r0,#0
0003ea  f7fffffe          BL       VK1668_disAll
;;;363    	while(1)
0003ee  e06f              B        |L1.1232|
                  |L1.1008|
;;;364    	{
;;;365        VK1668_KeyScan(); //ɨ
0003f0  f7fffffe          BL       VK1668_KeyScan
;;;366    		VK1668_delayms(20);
0003f4  2014              MOVS     r0,#0x14
0003f6  f7fffffe          BL       VK1668_delayms
;;;367    		if(vk1668_key[0]==0x01)
0003fa  480b              LDR      r0,|L1.1064|
0003fc  7800              LDRB     r0,[r0,#0]  ; vk1668_key
0003fe  2801              CMP      r0,#1
000400  d105              BNE      |L1.1038|
;;;368    		{
;;;369    		  VK1668_disAll(0x01);
000402  f7fffffe          BL       VK1668_disAll
;;;370    			VK1668_delayms(1000);
000406  f44f707a          MOV      r0,#0x3e8
00040a  f7fffffe          BL       VK1668_delayms
                  |L1.1038|
;;;371    		}
;;;372    		if(vk1668_key[0]==0x02)
00040e  4806              LDR      r0,|L1.1064|
000410  7800              LDRB     r0,[r0,#0]  ; vk1668_key
000412  2802              CMP      r0,#2
000414  d114              BNE      |L1.1088|
;;;373    		{
;;;374    		  VK1668_disAll(0x02);
000416  f7fffffe          BL       VK1668_disAll
;;;375    			VK1668_delayms(1000);
00041a  f44f707a          MOV      r0,#0x3e8
00041e  f7fffffe          BL       VK1668_delayms
000422  e054              B        |L1.1230|
                  |L1.1060|
                          DCD      0x40004870
                  |L1.1064|
                          DCD      vk1668_key
                  |L1.1068|
                          DCD      0x40004040
                  |L1.1072|
                          DCD      vk1668_dispram
                  |L1.1076|
                          DCD      vk1668_segi
                  |L1.1080|
                          DCD      vk1668_gridi
                  |L1.1084|
                          DCD      vk1668_segtab
                  |L1.1088|
;;;376    		}
;;;377    		else if(vk1668_key[0]==0x08)
000440  4824              LDR      r0,|L1.1236|
000442  7800              LDRB     r0,[r0,#0]  ; vk1668_key
000444  2808              CMP      r0,#8
000446  d107              BNE      |L1.1112|
;;;378    		{
;;;379    			VK1668_disAll(0x03);
000448  2003              MOVS     r0,#3
00044a  f7fffffe          BL       VK1668_disAll
;;;380    			VK1668_delayms(1000);
00044e  f44f707a          MOV      r0,#0x3e8
000452  f7fffffe          BL       VK1668_delayms
000456  e03a              B        |L1.1230|
                  |L1.1112|
;;;381    		}
;;;382    		else if(vk1668_key[0]==0x10)
000458  481e              LDR      r0,|L1.1236|
00045a  7800              LDRB     r0,[r0,#0]  ; vk1668_key
00045c  2810              CMP      r0,#0x10
00045e  d107              BNE      |L1.1136|
;;;383    		{
;;;384    			VK1668_disAll(0x04);
000460  2004              MOVS     r0,#4
000462  f7fffffe          BL       VK1668_disAll
;;;385    			VK1668_delayms(1000);
000466  f44f707a          MOV      r0,#0x3e8
00046a  f7fffffe          BL       VK1668_delayms
00046e  e02e              B        |L1.1230|
                  |L1.1136|
;;;386    		}
;;;387    		else if(vk1668_key[1]==0x01)
000470  4818              LDR      r0,|L1.1236|
000472  7840              LDRB     r0,[r0,#1]  ; vk1668_key
000474  2801              CMP      r0,#1
000476  d107              BNE      |L1.1160|
;;;388    		{
;;;389    			VK1668_disAll(0x05);
000478  2005              MOVS     r0,#5
00047a  f7fffffe          BL       VK1668_disAll
;;;390    			VK1668_delayms(1000);
00047e  f44f707a          MOV      r0,#0x3e8
000482  f7fffffe          BL       VK1668_delayms
000486  e022              B        |L1.1230|
                  |L1.1160|
;;;391    		}
;;;392    		else if(vk1668_key[1]==0x02)
000488  4812              LDR      r0,|L1.1236|
00048a  7840              LDRB     r0,[r0,#1]  ; vk1668_key
00048c  2802              CMP      r0,#2
00048e  d107              BNE      |L1.1184|
;;;393    		{
;;;394    			VK1668_disAll(0x06);
000490  2006              MOVS     r0,#6
000492  f7fffffe          BL       VK1668_disAll
;;;395    			VK1668_delayms(1000);
000496  f44f707a          MOV      r0,#0x3e8
00049a  f7fffffe          BL       VK1668_delayms
00049e  e016              B        |L1.1230|
                  |L1.1184|
;;;396    		}
;;;397    		else if(vk1668_key[1]==0x08)
0004a0  480c              LDR      r0,|L1.1236|
0004a2  7840              LDRB     r0,[r0,#1]  ; vk1668_key
0004a4  2808              CMP      r0,#8
0004a6  d107              BNE      |L1.1208|
;;;398    		{
;;;399    			VK1668_disAll(0x07);
0004a8  2007              MOVS     r0,#7
0004aa  f7fffffe          BL       VK1668_disAll
;;;400    			VK1668_delayms(1000);
0004ae  f44f707a          MOV      r0,#0x3e8
0004b2  f7fffffe          BL       VK1668_delayms
0004b6  e00a              B        |L1.1230|
                  |L1.1208|
;;;401    		}
;;;402    		else if(vk1668_key[1]==0x10)
0004b8  4806              LDR      r0,|L1.1236|
0004ba  7840              LDRB     r0,[r0,#1]  ; vk1668_key
0004bc  2810              CMP      r0,#0x10
0004be  d106              BNE      |L1.1230|
;;;403    		{
;;;404    			VK1668_disAll(0x08);
0004c0  2008              MOVS     r0,#8
0004c2  f7fffffe          BL       VK1668_disAll
;;;405    			VK1668_delayms(1000);
0004c6  f44f707a          MOV      r0,#0x3e8
0004ca  f7fffffe          BL       VK1668_delayms
                  |L1.1230|
;;;406    		}
;;;407    		
;;;408    		__nop();
0004ce  bf00              NOP      
                  |L1.1232|
0004d0  e78e              B        |L1.1008|
;;;409    	}
;;;410    }    
;;;411    /************************END OF FILE****/
                          ENDP

0004d2  0000              DCW      0x0000
                  |L1.1236|
                          DCD      vk1668_key

                          AREA ||.bss||, DATA, NOINIT, ALIGN=0

                  vk1668_dispram
                          %        16

                          AREA ||.data||, DATA, ALIGN=0

                  vk1668_key
                          DCDU     0x00000000
000004  00                DCB      0x00
                  vk1668_segi
000005  00                DCB      0x00
                  vk1668_gridi
000006  00                DCB      0x00
                  vk1668_segtab
000007  00                DCB      0x00
000008  01020304          DCB      0x01,0x02,0x03,0x04
00000c  05060708          DCB      0x05,0x06,0x07,0x08
000010  090b0c0d          DCB      0x09,0x0b,0x0c,0x0d

;*** Start embedded assembler ***

#line 1 "..\\led_driver\\vk1668_driver.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___15_vk1668_driver_c_e805f146____REV16|
#line 114 "..\\..\\..\\Library\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_vk1668_driver_c_e805f146____REV16| PROC
#line 115

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___15_vk1668_driver_c_e805f146____REVSH|
#line 128
|__asm___15_vk1668_driver_c_e805f146____REVSH| PROC
#line 129

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
