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

📄 button.txt

📁 STM32手持式示波器源代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\button.o --depend=.\Obj\button.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\button.c]
                          THUMB

                          AREA ||i.DetectButton||, CODE, READONLY, ALIGN=1

                  DetectButton PROC
;;;192    */
;;;193    static void DetectButton(BUTTON_T *_pBtn)
000000  b510              PUSH     {r4,lr}
;;;194    {
000002  4604              MOV      r4,r0
;;;195    	/* 如果没有初始化按键函数,则报错
;;;196    	if (_pBtn->IsKeyDownFunc == 0)
;;;197    	{
;;;198    		printf("Fault : DetectButton(), _pBtn->IsKeyDownFunc undefine");
;;;199    	}
;;;200    	*/
;;;201    
;;;202    	if (_pBtn->IsKeyDownFunc())
000004  6820              LDR      r0,[r4,#0]
000006  4780              BLX      r0
000008  b358              CBZ      r0,|L1.98|
;;;203    	{
;;;204    		if (_pBtn->Count < _pBtn->FilterTime)
00000a  7920              LDRB     r0,[r4,#4]
00000c  7961              LDRB     r1,[r4,#5]
00000e  4288              CMP      r0,r1
000010  da02              BGE      |L1.24|
;;;205    		{
;;;206    			_pBtn->Count = _pBtn->FilterTime;
000012  7960              LDRB     r0,[r4,#5]
000014  7120              STRB     r0,[r4,#4]
000016  e03e              B        |L1.150|
                  |L1.24|
;;;207    		}
;;;208    		else if(_pBtn->Count < 2 * _pBtn->FilterTime)
000018  7920              LDRB     r0,[r4,#4]
00001a  7961              LDRB     r1,[r4,#5]
00001c  0049              LSLS     r1,r1,#1
00001e  4288              CMP      r0,r1
000020  da03              BGE      |L1.42|
;;;209    		{
;;;210    			_pBtn->Count++;
000022  7920              LDRB     r0,[r4,#4]
000024  1c40              ADDS     r0,r0,#1
000026  7120              STRB     r0,[r4,#4]
000028  e035              B        |L1.150|
                  |L1.42|
;;;211    		}
;;;212    		else
;;;213    		{
;;;214    			if (_pBtn->State == 0)
00002a  7aa0              LDRB     r0,[r4,#0xa]
00002c  b938              CBNZ     r0,|L1.62|
;;;215    			{
;;;216    				_pBtn->State = 1;
00002e  2001              MOVS     r0,#1
000030  72a0              STRB     r0,[r4,#0xa]
;;;217    
;;;218    				/* 发送按钮按下的消息 */
;;;219    				if (_pBtn->KeyCodeDown > 0)
000032  7b20              LDRB     r0,[r4,#0xc]
000034  2800              CMP      r0,#0
000036  dd02              BLE      |L1.62|
;;;220    				{
;;;221    					/* 键值放入按键FIFO */
;;;222    					PutKey(_pBtn->KeyCodeDown);
000038  7b20              LDRB     r0,[r4,#0xc]
00003a  f7fffffe          BL       PutKey
                  |L1.62|
;;;223    				}
;;;224    			}
;;;225    
;;;226    			if (_pBtn->LongTime > 0)
00003e  8920              LDRH     r0,[r4,#8]
000040  2800              CMP      r0,#0
000042  dd28              BLE      |L1.150|
;;;227    			{
;;;228    				if (_pBtn->LongCount < _pBtn->LongTime)
000044  88e0              LDRH     r0,[r4,#6]
000046  8921              LDRH     r1,[r4,#8]
000048  4288              CMP      r0,r1
00004a  da24              BGE      |L1.150|
;;;229    				{
;;;230    					/* 发送按钮持续按下的消息 */
;;;231    					if (++_pBtn->LongCount == _pBtn->LongTime)
00004c  88e0              LDRH     r0,[r4,#6]
00004e  1c40              ADDS     r0,r0,#1
000050  b280              UXTH     r0,r0
000052  80e0              STRH     r0,[r4,#6]
000054  8921              LDRH     r1,[r4,#8]
000056  4288              CMP      r0,r1
000058  d11d              BNE      |L1.150|
;;;232    					{
;;;233    						/* 键值放入按键FIFO */
;;;234    						PutKey(_pBtn->KeyCodeLong);
00005a  7b60              LDRB     r0,[r4,#0xd]
00005c  f7fffffe          BL       PutKey
000060  e019              B        |L1.150|
                  |L1.98|
;;;235    					}
;;;236    				}
;;;237    			}
;;;238    		}
;;;239    	}
;;;240    	else
;;;241    	{
;;;242    		if(_pBtn->Count > _pBtn->FilterTime)
000062  7920              LDRB     r0,[r4,#4]
000064  7961              LDRB     r1,[r4,#5]
000066  4288              CMP      r0,r1
000068  dd02              BLE      |L1.112|
;;;243    		{
;;;244    			_pBtn->Count = _pBtn->FilterTime;
00006a  7960              LDRB     r0,[r4,#5]
00006c  7120              STRB     r0,[r4,#4]
00006e  e010              B        |L1.146|
                  |L1.112|
;;;245    		}
;;;246    		else if(_pBtn->Count != 0)
000070  7920              LDRB     r0,[r4,#4]
000072  b118              CBZ      r0,|L1.124|
;;;247    		{
;;;248    			_pBtn->Count--;
000074  7920              LDRB     r0,[r4,#4]
000076  1e40              SUBS     r0,r0,#1
000078  7120              STRB     r0,[r4,#4]
00007a  e00a              B        |L1.146|
                  |L1.124|
;;;249    		}
;;;250    		else
;;;251    		{
;;;252    			if (_pBtn->State == 1)
00007c  7aa0              LDRB     r0,[r4,#0xa]
00007e  2801              CMP      r0,#1
000080  d107              BNE      |L1.146|
;;;253    			{
;;;254    				_pBtn->State = 0;
000082  2000              MOVS     r0,#0
000084  72a0              STRB     r0,[r4,#0xa]
;;;255    
;;;256    				/* 发送按钮弹起的消息 */
;;;257    				if (_pBtn->KeyCodeUp > 0)
000086  7ae0              LDRB     r0,[r4,#0xb]
000088  2800              CMP      r0,#0
00008a  dd02              BLE      |L1.146|
;;;258    				{
;;;259    					/* 键值放入按键FIFO */
;;;260    					PutKey(_pBtn->KeyCodeUp);
00008c  7ae0              LDRB     r0,[r4,#0xb]
00008e  f7fffffe          BL       PutKey
                  |L1.146|
;;;261    				}
;;;262    			}
;;;263    		}
;;;264    
;;;265    		_pBtn->LongCount = 0;
000092  2000              MOVS     r0,#0
000094  80e0              STRH     r0,[r4,#6]
                  |L1.150|
;;;266    	}
;;;267    }
000096  bd10              POP      {r4,pc}
;;;268    
                          ENDP


                          AREA ||i.GetKey||, CODE, READONLY, ALIGN=2

                  GetKey PROC
;;;166    */
;;;167    uint8_t GetKey(void)
000000  480b              LDR      r0,|L2.48|
;;;168    {
;;;169    	uint8_t ret;
;;;170    
;;;171    	if (s_Key.Read == s_Key.Write)
000002  7d00              LDRB     r0,[r0,#0x14]  ; s_Key
000004  4a0a              LDR      r2,|L2.48|
000006  7d52              LDRB     r2,[r2,#0x15]  ; s_Key
000008  4290              CMP      r0,r2
00000a  d101              BNE      |L2.16|
;;;172    	{
;;;173    		return KEY_NONE;
00000c  2000              MOVS     r0,#0
                  |L2.14|
;;;174    	}
;;;175    	else
;;;176    	{
;;;177    		ret = s_Key.Buf[s_Key.Read];
;;;178    
;;;179    		if (++s_Key.Read >= KEY_FIFO_SIZE)
;;;180    		{
;;;181    			s_Key.Read = 0;
;;;182    		}
;;;183    		return ret;
;;;184    	}
;;;185    }
00000e  4770              BX       lr
                  |L2.16|
000010  4807              LDR      r0,|L2.48|
000012  7d00              LDRB     r0,[r0,#0x14]         ;177  ; s_Key
000014  4a06              LDR      r2,|L2.48|
000016  5c11              LDRB     r1,[r2,r0]            ;177
000018  4610              MOV      r0,r2                 ;179
00001a  7d00              LDRB     r0,[r0,#0x14]         ;179  ; s_Key
00001c  1c40              ADDS     r0,r0,#1              ;179
00001e  b2c0              UXTB     r0,r0                 ;179
000020  7510              STRB     r0,[r2,#0x14]         ;179
000022  2814              CMP      r0,#0x14              ;179
000024  db01              BLT      |L2.42|
000026  2000              MOVS     r0,#0                 ;181
000028  7510              STRB     r0,[r2,#0x14]         ;181
                  |L2.42|
00002a  4608              MOV      r0,r1                 ;183
00002c  e7ef              B        |L2.14|
;;;186    
                          ENDP

00002e  0000              DCW      0x0000
                  |L2.48|
                          DCD      ||.bss||+0x80

                          AREA ||i.InitButtonVar||, CODE, READONLY, ALIGN=2

                  InitButtonVar PROC
;;;57     */
;;;58     void InitButtonVar(void)
000000  2000              MOVS     r0,#0
;;;59     {
;;;60     	/* 对按键FIFO读写指针清零 */
;;;61     	s_Key.Read = 0;
000002  4957              LDR      r1,|L3.352|
000004  7508              STRB     r0,[r1,#0x14]
;;;62     	s_Key.Write = 0;
000006  7548              STRB     r0,[r1,#0x15]
;;;63     
;;;64     	/* 初始化USER按键变量 */
;;;65     	s_BtnUser.IsKeyDownFunc = IsKeyDownUser;	/* 判断按键按下的函数 */
000008  4856              LDR      r0,|L3.356|
00000a  3980              SUBS     r1,r1,#0x80
00000c  6008              STR      r0,[r1,#0]  ; s_BtnUser
;;;66     	s_BtnUser.FilterTime = BUTTON_FILTER_TIME;	/* 按键滤波时间 */
00000e  2005              MOVS     r0,#5
000010  7148              STRB     r0,[r1,#5]
;;;67     	s_BtnUser.LongTime = BUTTON_LONG_TIME;		/* 长按时间 */
000012  2064              MOVS     r0,#0x64
000014  8108              STRH     r0,[r1,#8]
;;;68     	s_BtnUser.Count = s_BtnUser.FilterTime / 2;	/* 计数器设置为滤波时间的一半 */
000016  7948              LDRB     r0,[r1,#5]  ; s_BtnUser
000018  eb0071d0          ADD      r1,r0,r0,LSR #31
00001c  1049              ASRS     r1,r1,#1
00001e  4a50              LDR      r2,|L3.352|
000020  3a80              SUBS     r2,r2,#0x80
000022  7111              STRB     r1,[r2,#4]
;;;69     	s_BtnUser.State = 0;						/* 按键缺省状态,0为未按下 */
000024  2000              MOVS     r0,#0
000026  4611              MOV      r1,r2
000028  7288              STRB     r0,[r1,#0xa]
;;;70     	s_BtnUser.KeyCodeDown = KEY_DOWN_USER;		/* 按键按下的键值代码 */
00002a  2001              MOVS     r0,#1
00002c  7308              STRB     r0,[r1,#0xc]
;;;71     	s_BtnUser.KeyCodeUp = KEY_UP_USER;			/* 按键弹起的键值代码 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -