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

📄 keyboard.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0129) 		           }		           
(0130) 		 default:{
(0131) 		          if (shift==0)
    018D 9020007A  LDS	R2,0x7A
    018F 2022      TST	R2
    0190 F529      BNE	0x01B6
(0132) 					 {
(0133) 					 for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
    0191 24AA      CLR	R10
    0192 C001      RJMP	0x0194
    0193 94A3      INC	R10
    0194 E082      LDI	R24,2
    0195 9D8A      MUL	R24,R10
    0196 01F0      MOVW	R30,R0
    0197 E584      LDI	R24,0x54
    0198 E090      LDI	R25,0
    0199 0FE8      ADD	R30,R24
    019A 1FF9      ADC	R31,R25
    019B 9024      LPM	R2,0(Z)
    019C 2433      CLR	R3
    019D 142C      CP	R2,R12
    019E F011      BEQ	0x01A1
    019F 2022      TST	R2
    01A0 F791      BNE	0x0193
(0134)                      if (unshifted[i][0] == sc)
    01A1 E082      LDI	R24,2
    01A2 9D8A      MUL	R24,R10
    01A3 01F0      MOVW	R30,R0
    01A4 E584      LDI	R24,0x54
    01A5 E090      LDI	R25,0
    01A6 0FE8      ADD	R30,R24
    01A7 1FF9      ADC	R31,R25
    01A8 91E4      LPM	R30,0(Z)
    01A9 15EC      CP	R30,R12
    01AA F009      BEQ	0x01AC
    01AB C02D      RJMP	0x01D9
(0135) 						  put_kbbuff(unshifted[i][1]);	 
    01AC E082      LDI	R24,2
    01AD 9D8A      MUL	R24,R10
    01AE 01F0      MOVW	R30,R0
    01AF E585      LDI	R24,0x55
    01B0 E090      LDI	R25,0
    01B1 0FE8      ADD	R30,R24
    01B2 1FF9      ADC	R31,R25
    01B3 9104      LPM	R16,0(Z)
    01B4 DF2B      RCALL	_put_kbbuff
(0136) 					 }
    01B5 C023      RJMP	0x01D9
(0137) 				  else
(0138) 				     {
(0139) 					 for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
    01B6 24AA      CLR	R10
    01B7 C001      RJMP	0x01B9
    01B8 94A3      INC	R10
    01B9 E082      LDI	R24,2
    01BA 9D8A      MUL	R24,R10
    01BB 01F0      MOVW	R30,R0
    01BC ED8C      LDI	R24,0xDC
    01BD E090      LDI	R25,0
    01BE 0FE8      ADD	R30,R24
    01BF 1FF9      ADC	R31,R25
    01C0 9024      LPM	R2,0(Z)
    01C1 2433      CLR	R3
    01C2 142C      CP	R2,R12
    01C3 F011      BEQ	0x01C6
    01C4 2022      TST	R2
    01C5 F791      BNE	0x01B8
(0140)                      if (shifted[i][0] == sc)
    01C6 E082      LDI	R24,2
    01C7 9D8A      MUL	R24,R10
    01C8 01F0      MOVW	R30,R0
    01C9 ED8C      LDI	R24,0xDC
    01CA E090      LDI	R25,0
    01CB 0FE8      ADD	R30,R24
    01CC 1FF9      ADC	R31,R25
    01CD 91E4      LPM	R30,0(Z)
    01CE 15EC      CP	R30,R12
    01CF F449      BNE	0x01D9
(0141)                          {
(0142) 						  put_kbbuff(shifted[i][1]);						  
    01D0 E082      LDI	R24,2
    01D1 9D8A      MUL	R24,R10
    01D2 01F0      MOVW	R30,R0
    01D3 ED8D      LDI	R24,0xDD
    01D4 E090      LDI	R25,0
    01D5 0FE8      ADD	R30,R24
    01D6 1FF9      ADC	R31,R25
    01D7 9104      LPM	R16,0(Z)
    01D8 DF07      RCALL	_put_kbbuff
(0143) 						 }	 	 						 
(0144) 					 } 
(0145) 		         }		         
(0146) 		} 		
(0147)     }
    01D9 940E0251  CALL	pop_gset5x
    01DB 9508      RET
_int1_isr:
    01DC 940E025F  CALL	push_lset
    01DE 940E0254  CALL	push_gset3x
(0148) #pragma interrupt_handler int1_isr:iv_INT1    
(0149) //键盘数据读取中断程序
(0150) void int1_isr(void)
(0151)    {
(0152)     static unsigned char data;   	
(0153)     switch (bitcount)
    01E0 90A000BE  LDS	R10,_bitcount
    01E2 24BB      CLR	R11
    01E3 01C5      MOVW	R24,R10
    01E4 3081      CPI	R24,1
    01E5 E0E0      LDI	R30,0
    01E6 079E      CPC	R25,R30
    01E7 F0E9      BEQ	0x0205
    01E8 3082      CPI	R24,2
    01E9 E0E0      LDI	R30,0
    01EA 079E      CPC	R25,R30
    01EB F099      BEQ	0x01FF
    01EC 3081      CPI	R24,1
    01ED E0E0      LDI	R30,0
    01EE 079E      CPC	R25,R30
    01EF F13C      BLT	0x0217
    01F0 01C5      MOVW	R24,R10
    01F1 308B      CPI	R24,0xB
    01F2 E0E0      LDI	R30,0
    01F3 079E      CPC	R25,R30
    01F4 F009      BEQ	0x01F6
    01F5 C021      RJMP	0x0217
(0154) 	  {
(0155) 	   case 11:{
(0156) 	            if ((PIN_KB&(1<<DATAPIN))!=0)
    01F6 9B82      SBIS	0x10,2
    01F7 C001      RJMP	0x01F9
(0157) 				     return;
    01F8 C02E      RJMP	0x0227
(0158) 			    else		 
(0159) 	   			    bitcount--;
    01F9 918000BE  LDS	R24,_bitcount
    01FB 5081      SUBI	R24,1
    01FC 938000BE  STS	_bitcount,R24
(0160) 	    		break;}
    01FE C028      RJMP	0x0227
(0161) 	   case 2:{
(0162) 	   			bitcount--;	   		   
    01FF 918000BE  LDS	R24,_bitcount
    0201 5081      SUBI	R24,1
    0202 938000BE  STS	_bitcount,R24
(0163) 			    break;}
    0204 C022      RJMP	0x0227
(0164) 	   case 1:{
(0165) 	   			bitcount--;	 
    0205 918000BE  LDS	R24,_bitcount
    0207 5081      SUBI	R24,1
    0208 938000BE  STS	_bitcount,R24
(0166) 				if ((PIN_KB&(1<<DATAPIN))==0)
    020A 9982      SBIC	0x10,2
    020B C004      RJMP	0x0210
(0167) 				    {
(0168) 					 bitcount=11;
    020C E08B      LDI	R24,0xB
    020D 938000BE  STS	_bitcount,R24
(0169) 					 return;
    020F C017      RJMP	0x0227
(0170) 					}
(0171) 				else
(0172) 				   {
(0173) 				    bitcount=11;
    0210 E08B      LDI	R24,0xB
    0211 938000BE  STS	_bitcount,R24
(0174) 		            decode(data);
    0213 9100007D  LDS	R16,0x7D
    0215 DF2D      RCALL	_decode
(0175) 				   }	  
(0176) 	   	        break;}
    0216 C010      RJMP	0x0227
(0177) 	   default:{
(0178) 	   	        data = (data >> 1);
    0217 9020007D  LDS	R2,0x7D
    0219 9426      LSR	R2
    021A 9220007D  STS	0x7D,R2
(0179)                 if((PIN_KB&(1<<DATAPIN))!=0)
    021C 9B82      SBIS	0x10,2
    021D C004      RJMP	0x0222
(0180)                     data|=0x80;
    021E 2D82      MOV	R24,R2
    021F 6880      ORI	R24,0x80
    0220 9380007D  STS	0x7D,R24
(0181) 				bitcount--;
    0222 918000BE  LDS	R24,_bitcount
    0224 5081      SUBI	R24,1
    0225 938000BE  STS	_bitcount,R24
(0182) 	            }		
(0183) 	  }		 		 	  	
(0184)     } 
    0227 940E0245  CALL	pop_gset3x
    0229 940E0276  CALL	pop_lset
    022B 9518      RETI
(0185) //PC键盘演示程序,SHIFT键和按键同时按下时为大写
(0186)   void main()
(0187)   {
(0188)   unsigned char key;
(0189)   
(0190)   uart_init();
_main:
  key                  --> R10
    022C DEE3      RCALL	_uart_init
(0191)   init_kb();
    022D DF06      RCALL	_init_kb
(0192)   puts("双龙电子PC键盘演示程序:");
    022E E602      LDI	R16,0x62
    022F E010      LDI	R17,0
    0230 DEEC      RCALL	_puts
(0193)   putchar(0x0d);
    0231 E00D      LDI	R16,0xD
    0232 DEE6      RCALL	_putchar
(0194)   putchar(0x0d);
    0233 E00D      LDI	R16,0xD
    0234 DEE4      RCALL	_putchar
    0235 C00D      RJMP	0x0243
(0195)   while(1)
(0196)        {
(0197) 	  
(0198)        key=get_char();
    0236 DEBD      RCALL	_get_char
    0237 2EA0      MOV	R10,R16
(0199)        if (key!=0)
    0238 2300      TST	R16
    0239 F049      BEQ	0x0243
(0200)             {
(0201)             if (key==0x0d)
    023A 300D      CPI	R16,0xD
    023B F429      BNE	0x0241
(0202)                 {
(0203)                 putchar('\n');
    023C E00A      LDI	R16,0xA
    023D DEDB      RCALL	_putchar
(0204)                 putchar(key);
    023E 2D0A      MOV	R16,R10
    023F DED9      RCALL	_putchar
(0205)                 }
    0240 C002      RJMP	0x0243
(0206)             else
(0207)                 putchar(key);
    0241 2D0A      MOV	R16,R10
    0242 DED6      RCALL	_putchar
    0243 CFF2      RJMP	0x0236
(0208)             }
(0209)          }
(0210)   }
FILE: <library>
    0244 9508      RET
pop_gset3x:
    0245 E0E4      LDI	R30,4
popx:
    0246 90A9      LD	R10,Y+
    0247 90B9      LD	R11,Y+
    0248 FDE2      SBRC	R30,2
    0249 9508      RET
    024A 90C9      LD	R12,Y+
    024B 90D9      LD	R13,Y+
    024C FDE3      SBRC	R30,3
    024D 9508      RET
    024E 90E9      LD	R14,Y+
    024F 90F9      LD	R15,Y+
    0250 9508      RET
pop_gset5x:
    0251 27EE      CLR	R30
    0252 940C0246  JMP	popx
push_gset3x:
    0254 92BA      ST	R11,-Y
    0255 92AA      ST	R10,-Y
    0256 9508      RET
push_gset4x:
    0257 92DA      ST	R13,-Y
    0258 92CA      ST	R12,-Y
    0259 940C0254  JMP	push_gset3x
push_gset5x:
    025B 92FA      ST	R15,-Y
    025C 92EA      ST	R14,-Y
    025D 940C0257  JMP	push_gset4x
push_lset:
    025F 93FA      ST	R31,-Y
    0260 93EA      ST	R30,-Y
    0261 93BA      ST	R27,-Y
    0262 93AA      ST	R26,-Y
    0263 939A      ST	R25,-Y
    0264 938A      ST	R24,-Y
    0265 933A      ST	R19,-Y
    0266 932A      ST	R18,-Y
    0267 931A      ST	R17,-Y
    0268 930A      ST	R16,-Y
    0269 929A      ST	R9,-Y
    026A 928A      ST	R8,-Y
    026B 927A      ST	R7,-Y
    026C 926A      ST	R6,-Y
    026D 925A      ST	R5,-Y
    026E 924A      ST	R4,-Y
    026F 923A      ST	R3,-Y
    0270 922A      ST	R2,-Y
    0271 921A      ST	R1,-Y
    0272 920A      ST	R0,-Y
    0273 B60F      IN	R0,0x3F
    0274 920A      ST	R0,-Y
    0275 9508      RET
pop_lset:
    0276 9009      LD	R0,Y+
    0277 BE0F      OUT	0x3F,R0
    0278 9009      LD	R0,Y+
    0279 9019      LD	R1,Y+
    027A 9029      LD	R2,Y+
    027B 9039      LD	R3,Y+
    027C 9049      LD	R4,Y+
    027D 9059      LD	R5,Y+
    027E 9069      LD	R6,Y+
    027F 9079      LD	R7,Y+
    0280 9089      LD	R8,Y+
    0281 9099      LD	R9,Y+
    0282 9109      LD	R16,Y+
    0283 9119      LD	R17,Y+
    0284 9129      LD	R18,Y+
    0285 9139      LD	R19,Y+
    0286 9189      LD	R24,Y+
    0287 9199      LD	R25,Y+
    0288 91A9      LD	R26,Y+
    0289 91B9      LD	R27,Y+
    028A 91E9      LD	R30,Y+
    028B 91F9      LD	R31,Y+
    028C 9508      RET

⌨️ 快捷键说明

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