   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Parser V4.8.32 - 23 Mar 2010
   3                     ; Generator V4.3.4 - 23 Mar 2010
  17                     	switch	.data
  18  0000               _gcOldKey:
  19  0000 00            	dc.b	0
  20  0001               _gcKeyFilter:
  21  0001 0000          	dc.w	0
  22  0003               _gcKeyStack:
  23  0003 0000          	dc.b	0,0
  24  0005 000000000000  	ds.b	8
  25  000d               _gcKeySavePtr:
  26  000d 00            	dc.b	0
  27  000e               _gcKetGetPtr:
  28  000e 00            	dc.b	0
  29  000f               _gcBLTimer:
  30  000f ff            	dc.b	255
  31  0010               _gcKey:
  32  0010 00            	dc.b	0
  76                     ; 13 void TaskScanKey(void)
  76                     ; 14 {		
  78                     .text:	section	.text,new
  79  0000               _TaskScanKey:
  81  0000 88            	push	a
  82       00000001      OFST:	set	1
  85                     ; 15 		unsigned char Key = KEY; 	//按键输入     //去掉LOCK,上下到位  半降全降信号			  
  87                     ; 16 		Key = KEY&KEY_MAP;
  89  0001 c60004        	ld	a,_SPIIO+4
  90  0004 44            	srl	a
  91  0005 44            	srl	a
  92  0006 a40f          	and	a,#15
  93  0008 6b01          	ld	(OFST+0,sp),a
  94                     ; 17 		if(Key!=0x0)
  96  000a 0d01          	tnz	(OFST+0,sp)
  97  000c 2603          	jrne	L6
  98  000e cc00b9        	jp	L52
  99  0011               L6:
 100                     ; 19 			if(Key!=gcOldKey)    			//digit filter
 102  0011 7b01          	ld	a,(OFST+0,sp)
 103  0013 c10000        	cp	a,_gcOldKey
 104  0016 2717          	jreq	L72
 105                     ; 21 				gcOldKey=Key;
 107  0018 7b01          	ld	a,(OFST+0,sp)
 108  001a c70000        	ld	_gcOldKey,a
 109                     ; 22 				gcKeyFilter=0;
 111  001d 5f            	clrw	x
 112  001e cf0001        	ldw	_gcKeyFilter,x
 113                     ; 23 				Beep(1,100); 
 115  0021 ae0064        	ldw	x,#100
 116  0024 89            	pushw	x
 117  0025 a601          	ld	a,#1
 118  0027 cd0000        	call	_Beep
 120  002a 85            	popw	x
 122  002b acfa00fa      	jpf	L74
 123  002f               L72:
 124                     ; 27 				gcKeyFilter++;		
 126  002f ce0001        	ldw	x,_gcKeyFilter
 127  0032 1c0001        	addw	x,#1
 128  0035 cf0001        	ldw	_gcKeyFilter,x
 129                     ; 28 				if( gcKeyFilter>MAX_KEY_FILTER)        //save key to stack
 131  0038 9c            	rvf
 132  0039 ce0001        	ldw	x,_gcKeyFilter
 133  003c a30005        	cpw	x,#5
 134  003f 2e03          	jrsge	L01
 135  0041 cc00fa        	jp	L74
 136  0044               L01:
 137                     ; 30 			 if(gcKeyFilter>250) 
 139  0044 9c            	rvf
 140  0045 ce0001        	ldw	x,_gcKeyFilter
 141  0048 a300fb        	cpw	x,#251
 142  004b 2f2a          	jrslt	L53
 143                     ; 32             if(Key==KEY_STOP)     //长按2.5S 停止就变成了中停2按键 
 145  004d 7b01          	ld	a,(OFST+0,sp)
 146  004f a101          	cp	a,#1
 147  0051 2624          	jrne	L53
 148                     ; 34 						 gcKeyStack[gcKeySavePtr]=KEY_STOP2; 
 150  0053 c6000d        	ld	a,_gcKeySavePtr
 151  0056 5f            	clrw	x
 152  0057 97            	ld	xl,a
 153  0058 a681          	ld	a,#129
 154  005a d70003        	ld	(_gcKeyStack,x),a
 155                     ; 35 						 gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK; 
 157  005d c6000d        	ld	a,_gcKeySavePtr
 158  0060 5f            	clrw	x
 159  0061 97            	ld	xl,a
 160  0062 5c            	incw	x
 161  0063 a60a          	ld	a,#10
 162  0065 cd0000        	call	c_smodx
 164  0068 01            	rrwa	x,a
 165  0069 c7000d        	ld	_gcKeySavePtr,a
 166  006c 02            	rlwa	x,a
 167                     ; 36              Beep(1,500); 						 
 169  006d ae01f4        	ldw	x,#500
 170  0070 89            	pushw	x
 171  0071 a601          	ld	a,#1
 172  0073 cd0000        	call	_Beep
 174  0076 85            	popw	x
 175  0077               L53:
 176                     ; 42 					if(((Key&KEY_STOPWARN)==KEY_STOPWARN)
 176                     ; 43 					||  ( (Key&KEY_DEBUG)==KEY_DEBUG)
 176                     ; 44 					||  ( (Key&KEY_SELFTEST)==KEY_SELFTEST))
 178  0077 7b01          	ld	a,(OFST+0,sp)
 179  0079 a403          	and	a,#3
 180  007b a103          	cp	a,#3
 181  007d 2710          	jreq	L34
 183  007f 7b01          	ld	a,(OFST+0,sp)
 184  0081 a406          	and	a,#6
 185  0083 a106          	cp	a,#6
 186  0085 2708          	jreq	L34
 188  0087 7b01          	ld	a,(OFST+0,sp)
 189  0089 a405          	and	a,#5
 190  008b a105          	cp	a,#5
 191  008d 266b          	jrne	L74
 192  008f               L34:
 193                     ; 46 						gcKeyFilter=0;	   
 195  008f 5f            	clrw	x
 196  0090 cf0001        	ldw	_gcKeyFilter,x
 197                     ; 47 						gcKeyStack[gcKeySavePtr]=Key;
 199  0093 c6000d        	ld	a,_gcKeySavePtr
 200  0096 5f            	clrw	x
 201  0097 97            	ld	xl,a
 202  0098 7b01          	ld	a,(OFST+0,sp)
 203  009a d70003        	ld	(_gcKeyStack,x),a
 204                     ; 48 						gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK;  
 206  009d c6000d        	ld	a,_gcKeySavePtr
 207  00a0 5f            	clrw	x
 208  00a1 97            	ld	xl,a
 209  00a2 5c            	incw	x
 210  00a3 a60a          	ld	a,#10
 211  00a5 cd0000        	call	c_smodx
 213  00a8 01            	rrwa	x,a
 214  00a9 c7000d        	ld	_gcKeySavePtr,a
 215  00ac 02            	rlwa	x,a
 216                     ; 49 						Beep(1,50);           //beep 10ms					 
 218  00ad ae0032        	ldw	x,#50
 219  00b0 89            	pushw	x
 220  00b1 a601          	ld	a,#1
 221  00b3 cd0000        	call	_Beep
 223  00b6 85            	popw	x
 224  00b7 2041          	jra	L74
 225  00b9               L52:
 226                     ; 56 			if((gcKeyFilter>6)&&(gcKeyFilter<250))			//延时去抖动 ,按键松开的情况
 228  00b9 9c            	rvf
 229  00ba ce0001        	ldw	x,_gcKeyFilter
 230  00bd a30007        	cpw	x,#7
 231  00c0 2f34          	jrslt	L15
 233  00c2 9c            	rvf
 234  00c3 ce0001        	ldw	x,_gcKeyFilter
 235  00c6 a300fa        	cpw	x,#250
 236  00c9 2e2b          	jrsge	L15
 237                     ; 58 				gcKeyFilter=0;
 239  00cb 5f            	clrw	x
 240  00cc cf0001        	ldw	_gcKeyFilter,x
 241                     ; 59 				gcKeyStack[gcKeySavePtr]=gcOldKey;
 243  00cf c6000d        	ld	a,_gcKeySavePtr
 244  00d2 5f            	clrw	x
 245  00d3 97            	ld	xl,a
 246  00d4 c60000        	ld	a,_gcOldKey
 247  00d7 d70003        	ld	(_gcKeyStack,x),a
 248                     ; 60 				gcKeySavePtr=(gcKeySavePtr+1)%MAX_KEY_STACK;
 250  00da c6000d        	ld	a,_gcKeySavePtr
 251  00dd 5f            	clrw	x
 252  00de 97            	ld	xl,a
 253  00df 5c            	incw	x
 254  00e0 a60a          	ld	a,#10
 255  00e2 cd0000        	call	c_smodx
 257  00e5 01            	rrwa	x,a
 258  00e6 c7000d        	ld	_gcKeySavePtr,a
 259  00e9 02            	rlwa	x,a
 260                     ; 61 				Beep(1,100);           //beep 10ms				  
 262  00ea ae0064        	ldw	x,#100
 263  00ed 89            	pushw	x
 264  00ee a601          	ld	a,#1
 265  00f0 cd0000        	call	_Beep
 267  00f3 85            	popw	x
 269  00f4 2004          	jra	L74
 270  00f6               L15:
 271                     ; 65 			 gcKeyFilter=0;
 273  00f6 5f            	clrw	x
 274  00f7 cf0001        	ldw	_gcKeyFilter,x
 275  00fa               L74:
 276                     ; 72 }
 279  00fa 84            	pop	a
 280  00fb 81            	ret
 315                     ; 78 unsigned char GetKey(void)
 315                     ; 79 {
 316                     .text:	section	.text,new
 317  0000               _GetKey:
 319  0000 88            	push	a
 320       00000001      OFST:	set	1
 323                     ; 82     if(gcKetGetPtr!=gcKeySavePtr)
 325  0001 c6000e        	ld	a,_gcKetGetPtr
 326  0004 c1000d        	cp	a,_gcKeySavePtr
 327  0007 271c          	jreq	L17
 328                     ; 84         ret=gcKeyStack[gcKetGetPtr];
 330  0009 c6000e        	ld	a,_gcKetGetPtr
 331  000c 5f            	clrw	x
 332  000d 97            	ld	xl,a
 333  000e d60003        	ld	a,(_gcKeyStack,x)
 334  0011 6b01          	ld	(OFST+0,sp),a
 335                     ; 85         gcKetGetPtr=(gcKetGetPtr+1)%MAX_KEY_STACK;
 337  0013 c6000e        	ld	a,_gcKetGetPtr
 338  0016 5f            	clrw	x
 339  0017 97            	ld	xl,a
 340  0018 5c            	incw	x
 341  0019 a60a          	ld	a,#10
 342  001b cd0000        	call	c_smodx
 344  001e 01            	rrwa	x,a
 345  001f c7000e        	ld	_gcKetGetPtr,a
 346  0022 02            	rlwa	x,a
 348  0023 2002          	jra	L37
 349  0025               L17:
 350                     ; 88         ret=0;	
 352  0025 0f01          	clr	(OFST+0,sp)
 353  0027               L37:
 354                     ; 89     return ret;
 356  0027 7b01          	ld	a,(OFST+0,sp)
 359  0029 5b01          	addw	sp,#1
 360  002b 81            	ret
 427                     	xdef	_gcBLTimer
 428                     	xdef	_gcKetGetPtr
 429                     	xdef	_gcKeySavePtr
 430                     	xdef	_gcKeyStack
 431                     	xdef	_gcKeyFilter
 432                     	xdef	_gcOldKey
 433                     	xref	_Beep
 434                     	xref	_SPIIO
 435                     	xdef	_GetKey
 436                     	xdef	_gcKey
 437                     	xdef	_TaskScanKey
 438                     	xref.b	c_x
 457                     	xref	c_smodx
 458                     	end
