keyscan.lst

来自「cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表」· LST 代码 · 共 372 行 · 第 1/2 页

LST
372
字号
   1               		.file	"KeyScan.c"
   2               		.arch atmega8
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 101               	.global	WatchKeyTime
 102               	.global	WatchKeyTime
 103               		.section .bss
 106               	WatchKeyTime:
 107 0000 0000 00   		.skip 3,0
 108               	.global	KeyScan
 109               		.data
 112               	KeyScan:
 113 0000 00        		.byte	0
 114 0001 0100      		.word	1
 115               		.lcomm KeyState.0,1
 116               		.lcomm OldKeyCode.1,1
 117               		.lcomm KeyCount.2,1
 118               		.text
 120               	.global	ScanKey_MainLoop
 122               	ScanKey_MainLoop:
   1:driver/KeyScan.c **** /********************************************
   2:driver/KeyScan.c **** 公司名称:
   3:driver/KeyScan.c **** 文 件 名:
   4:driver/KeyScan.c **** 版 本 号:
   5:driver/KeyScan.c **** 程序设计:
   6:driver/KeyScan.c **** 说    明:
   7:driver/KeyScan.c **** 完成日期:
   8:driver/KeyScan.c **** 修改日期:
   9:driver/KeyScan.c **** 功能摘要:
  10:driver/KeyScan.c **** **********************************************/
  11:driver/KeyScan.c **** #define  _KeyScanV20
  12:driver/KeyScan.c **** #include  "includes.h"
  13:driver/KeyScan.c **** //---------------------------------------------
  14:driver/KeyScan.c **** uint8   KeyVal;
  15:driver/KeyScan.c **** WAIT_TIME_STRUCT  KeyScan = {0,_10MS};
  16:driver/KeyScan.c **** WAIT_TIME_STRUCT  WatchKeyTime = {0,0};
  17:driver/KeyScan.c **** 
  18:driver/KeyScan.c **** void   	WatchKey(void);	  
  19:driver/KeyScan.c **** void    ScanKey_MainLoop(void)
  20:driver/KeyScan.c **** {
 124               	.LM1:
 125               	/* prologue: frame size=0 */
 126               	/* prologue end (size=0) */
  21:driver/KeyScan.c ****   static  uint8 KeyState = 0;              //按键状态
  22:driver/KeyScan.c ****   static  uint8 OldKeyCode = 0;            //老键值缓存 
  23:driver/KeyScan.c ****   static  uint8 KeyCount = 0;              //按键按下的时间,用于连击处理
  24:driver/KeyScan.c ****   uint8   GETKEY = 0;   
 128               	.LM2:
 129 0000 20E0      		ldi r18,lo8(0)
  25:driver/KeyScan.c ****         
  26:driver/KeyScan.c ****   if (!KeyScan.fGetTime)
 131               	.LM3:
 132 0002 8091 0000 		lds r24,KeyScan
 133 0006 8823      		tst r24
 134 0008 19F4      		brne .L2
  27:driver/KeyScan.c ****      { KeyVal = 0;    }
 136               	.LM4:
 137 000a 2093 0000 		sts KeyVal,r18
 138 000e 0895      		ret
 139               	.L2:
  28:driver/KeyScan.c ****   else
  29:driver/KeyScan.c ****      {               //系统时间到进行按键扫描 
  30:driver/KeyScan.c ****        KeyScan.fGetTime = 0;
 141               	.LM5:
 142 0010 2093 0000 		sts KeyScan,r18
  31:driver/KeyScan.c ****        KeyScan.WaitTime = _10MS;
 144               	.LM6:
 145 0014 81E0      		ldi r24,lo8(1)
 146 0016 90E0      		ldi r25,hi8(1)
 147 0018 9093 0000 		sts (KeyScan+1)+1,r25
 148 001c 8093 0000 		sts KeyScan+1,r24
  32:driver/KeyScan.c **** 	         
  33:driver/KeyScan.c **** 	  if (!SET_KEY) GETKEY |= 0x04;     
 150               	.LM7:
 151 0020 B59B      		sbis 54-0x20,5
 152 0022 24E0      		ldi r18,lo8(4)
 153               	.L4:
  34:driver/KeyScan.c **** 	  if (!UP_KEY)  GETKEY |= 0x02;     
 155               	.LM8:
 156 0024 B49B      		sbis 54-0x20,4
 157 0026 2260      		ori r18,lo8(2)
 158               	.L5:
  35:driver/KeyScan.c **** 	  if (!DN_KEY)  GETKEY |= 0x01;	
 160               	.LM9:
 161 0028 B39B      		sbis 54-0x20,3
 162 002a 2160      		ori r18,lo8(1)
 163               	.L6:
  36:driver/KeyScan.c **** 
  37:driver/KeyScan.c ****        switch (KeyState)             //根据按键不同的状态进行处理
 165               	.LM10:
 166 002c 8091 0000 		lds r24,KeyState.0
 167 0030 9927      		clr r25
 168 0032 8130      		cpi r24,1
 169 0034 9105      		cpc r25,__zero_reg__
 170 0036 A9F0      		breq .L10
 171 0038 8230      		cpi r24,2
 172 003a 9105      		cpc r25,__zero_reg__
 173 003c 1CF4      		brge .L28
 174 003e 892B      		or r24,r25
 175 0040 39F0      		breq .L8
 176 0042 0895      		ret
 177               	.L28:
 178 0044 8230      		cpi r24,2
 179 0046 9105      		cpc r25,__zero_reg__
 180 0048 81F0      		breq .L11
 181 004a 0397      		sbiw r24,3
 182 004c 09F1      		breq .L14
 183 004e 0895      		ret
 184               	.L8:
  38:driver/KeyScan.c ****        {
  39:driver/KeyScan.c ****         case 0:
  40:driver/KeyScan.c ****          if (GETKEY)
 186               	.LM11:
 187 0050 2223      		tst r18
 188 0052 09F4      		brne .+2
 189 0054 50C0      		rjmp .L29
  41:driver/KeyScan.c ****            {
  42:driver/KeyScan.c ****              OldKeyCode = GETKEY;
 191               	.LM12:
 192 0056 2093 0000 		sts OldKeyCode.1,r18
  43:driver/KeyScan.c ****              KeyState = 1;            
 194               	.LM13:
 195 005a 81E0      		ldi r24,lo8(1)
 196 005c 8093 0000 		sts KeyState.0,r24
 197 0060 4AC0      		rjmp .L29
 198               	.L10:
  44:driver/KeyScan.c ****             }
  45:driver/KeyScan.c ****          KeyVal = 0;
  46:driver/KeyScan.c ****          break;
  47:driver/KeyScan.c ****                     
  48:driver/KeyScan.c ****          case 1:
  49:driver/KeyScan.c ****          KeyState = 2;           //按键消抖20ms         
 200               	.LM14:
 201 0062 82E0      		ldi r24,lo8(2)
 202 0064 8093 0000 		sts KeyState.0,r24
  50:driver/KeyScan.c ****          break;
 204               	.LM15:
 205 0068 0895      		ret
 206               	.L11:
  51:driver/KeyScan.c ****               
  52:driver/KeyScan.c ****          case 2:
  53:driver/KeyScan.c ****          if (OldKeyCode == GETKEY)
 208               	.LM16:
 209 006a 8091 0000 		lds r24,OldKeyCode.1
 210 006e 8217      		cp r24,r18
 211 0070 61F4      		brne .L12
  54:driver/KeyScan.c ****            {
  55:driver/KeyScan.c ****              KeyState = 3;          //按键按下
 213               	.LM17:
 214 0072 83E0      		ldi r24,lo8(3)
 215 0074 8093 0000 		sts KeyState.0,r24
  56:driver/KeyScan.c ****              KeyVal = OldKeyCode;    //传递键值
 217               	.LM18:
 218 0078 2093 0000 		sts KeyVal,r18
  57:driver/KeyScan.c ****              WatchKeyTime.WaitTime = _60S;                  
 220               	.LM19:
 221 007c 80E7      		ldi r24,lo8(6000)
 222 007e 97E1      		ldi r25,hi8(6000)
 223 0080 9093 0000 		sts (WatchKeyTime+1)+1,r25
 224 0084 8093 0000 		sts WatchKeyTime+1,r24
 225 0088 0895      		ret
 226               	.L12:
  58:driver/KeyScan.c ****            }
  59:driver/KeyScan.c ****          else
  60:driver/KeyScan.c ****            {  KeyState = 0; }       //抖动                
 228               	.LM20:
 229 008a 1092 0000 		sts KeyState.0,__zero_reg__
  61:driver/KeyScan.c ****          break;
 231               	.LM21:
 232 008e 0895      		ret
 233               	.L14:
  62:driver/KeyScan.c ****               
  63:driver/KeyScan.c ****          case 3:
  64:driver/KeyScan.c ****          if (OldKeyCode == GETKEY)
 235               	.LM22:
 236 0090 3091 0000 		lds r19,OldKeyCode.1
 237 0094 3217      		cp r19,r18
 238 0096 C1F5      		brne .L15
  65:driver/KeyScan.c ****          {

⌨️ 快捷键说明

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