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

📄 训练项目九:ps2键盘的使用.lis

📁 长沙理工自己的实验程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 000C           ;     if((count>0)&&(count<9))
 000C 20900400          lds R2,_count
 0010 80E0              ldi R24,0
 0012 8215              cp R24,R2
 0014 C0F4              brsh L2
 0016           X0:
 0016 822D              mov R24,R2
 0018 8930              cpi R24,9
 001A A8F4              brsh L2
 001C           X1:
 001C           ;     {
 001C           ;     flag=0;                                     /* 标志位                   */  
 001C 2224              clr R2
 001E 20920300          sts _flag,R2
 0022           ;     key=key>>1;
 0022 20900000          lds R2,_key
 0026 2694              lsr R2
 0028 20920000          sts _key,R2
 002C           ;     if(DATA)
 002C 0D9B              sbis 0x1,5
 002E 05C0              rjmp L4
 0030           X2:
 0030           ; 	  key|=0x80;
 0030 822D              mov R24,R2
 0032 8068              ori R24,128
 0034 80930000          sts _key,R24
 0038 09C0              xjmp L3
 003A           L4:
 003A           ; 	else
 003A           ; 	  key&=0x7f;
 003A 80910000          lds R24,_key
 003E 8F77              andi R24,127
 0040 80930000          sts _key,R24
 0044           ;    }
 0044 03C0              xjmp L3
 0046           L2:
 0046           ;     else 
 0046           ;     flag=1;
 0046 81E0              ldi R24,1
 0048 80930300          sts _flag,R24
 004C           L3:
 004C           ;     count++;
 004C 80910400          lds R24,_count
 0050 8F5F              subi R24,255    ; addi 1
 0052 80930400          sts _count,R24
 0056           L6:
 0056           ; 	
 0056           ;     while(!(PINE&0x10));
 0056           L7:
 0056 0C9B              sbis 0x1,4
 0058 FECF              rjmp L6
 005A           X3:
 005A           ; 		
 005A           ;     if(count>10)
 005A 8AE0              ldi R24,10
 005C 20900400          lds R2,_count
 0060 8215              cp R24,R2
 0062 18F4              brsh L9
 0064           X4:
 0064           ;     {
 0064           ;     count=0;
 0064 2224              clr R2
 0066 20920400          sts _count,R2
 006A           ;     }
 006A           L9:
 006A           L1:
 006A                   .dbline 0 ; func end
 006A 1990              ld R1,y+
 006C 1FBE              out 0x3f,R1
 006E 9991              ld R25,y+
 0070 8991              ld R24,y+
 0072 2990              ld R2,y+
 0074 1990              ld R1,y+
 0076 1895              reti
 0078           ;              i -> R20
 0078           ;           data -> R16
                        .even
 0078           _key_check::
 0078 0E940000          xcall push_xgsetF000
 007C           ; }
 007C           ; 
 007C           ; unsigned char key_check (unsigned char data)       /*  查表,处理键值       */
 007C           ; {
 007C           ;     unsigned char i=0;
 007C 4427              clr R20
 007E           ;       
 007E           ;     switch(data)
 007E 602F              mov R22,R16
 0080 7727              clr R23
 0082 6935              cpi R22,89
 0084 E0E0              ldi R30,0
 0086 7E07              cpc R23,R30
 0088 09F1              breq L19
 008A           X5:
 008A 89E5              ldi R24,89
 008C 90E0              ldi R25,0
 008E 8617              cp R24,R22
 0090 9707              cpc R25,R23
 0092 2CF0              brlt L43
 0094           X6:
 0094           L42:
 0094 6231              cpi R22,18
 0096 E0E0              ldi R30,0
 0098 7E07              cpc R23,R30
 009A 59F0              breq L16
 009C           X7:
 009C 24C0              xjmp L12
 009E           L43:
 009E 603F              cpi R22,240
 00A0 E0E0              ldi R30,0
 00A2 7E07              cpc R23,R30
 00A4 09F0              breq L15
 00A6           X8:
 00A6 1FC0              xjmp L12
 00A8           L15:
 00A8           ;     {
 00A8           ; 	case 0xf0:up=1;return(0);
 00A8 81E0              ldi R24,1
 00AA 80930200          sts _up,R24
 00AE 0027              clr R16
 00B0 61C0              xjmp L11
 00B2           L16:
 00B2           ;     case 0x12:shift=(up==0)?1:0;return(0);
 00B2 20900200          lds R2,_up
 00B6 2220              tst R2
 00B8 19F4              brne L17
 00BA           X9:
 00BA 61E0              ldi R22,1
 00BC 70E0              ldi R23,0
 00BE 02C0              xjmp L18
 00C0           L17:
 00C0 6627              clr R22
 00C2 7727              clr R23
 00C4           L18:
 00C4 60930100          sts _shift,R22
 00C8 0027              clr R16
 00CA 54C0              xjmp L11
 00CC           L19:
 00CC           ; 	case 0x59:shift=(up==0)?1:0;return(0);
 00CC 20900200          lds R2,_up
 00D0 2220              tst R2
 00D2 19F4              brne L20
 00D4           X10:
 00D4 61E0              ldi R22,1
 00D6 70E0              ldi R23,0
 00D8 02C0              xjmp L21
 00DA           L20:
 00DA 6627              clr R22
 00DC 7727              clr R23
 00DE           L21:
 00DE 60930100          sts _shift,R22
 00E2 0027              clr R16
 00E4 47C0              xjmp L11
 00E6           L12:
 00E6           ; 	default:
 00E6           ;         {
 00E6           ; 		if(up==0)
 00E6 20900200          lds R2,_up
 00EA 2220              tst R2
 00EC 09F0              breq X18
 00EE 3EC0              xjmp L22
 00F0           X18:
 00F0           X11:
 00F0           ; 		{
 00F0           ; 		    if(shift==0)
 00F0 20900100          lds R2,_shift
 00F4 2220              tst R2
 00F6 D9F4              brne L24
 00F8           X12:
 00F8           ; 		    {
 00F8           ; 			    for(i=0;i<60;i++)
 00F8 4427              clr R20
 00FA 16C0              xjmp L29
 00FC           L26:
 00FC           ; 				{
 00FC           ; 				    if (UnShifted[i][0]==data)
 00FC 80E0              ldi R24,<_UnShifted
 00FE 90E0              ldi R25,>_UnShifted
 0100 E42F              mov R30,R20
 0102 FF27              clr R31
 0104 EE0F              lsl R30
 0106 FF1F              rol R31
 0108 E80F              add R30,R24
 010A F91F              adc R31,R25
 010C 2080              ldd R2,z+0
 010E 2016              cp R2,R16
 0110 51F4              brne L30
 0112           X13:
 0112           ; 				    return(UnShifted[i][1]);
 0112 80E0              ldi R24,<_UnShifted+1
 0114 90E0              ldi R25,>_UnShifted+1
 0116 E42F              mov R30,R20
 0118 FF27              clr R31
 011A EE0F              lsl R30
 011C FF1F              rol R31
 011E E80F              add R30,R24
 0120 F91F              adc R31,R25
 0122 0081              ldd R16,z+0
 0124 27C0              xjmp L11
 0126           L30:
 0126           ; 				 }
 0126           L27:
 0126 4395              inc R20
 0128           L29:
 0128 4C33              cpi R20,60
 012A 40F3              brlo L26
 012C           X14:
 012C           ; 			}
 012C 23C0              xjmp L23
 012E           L24:
 012E           ; 			else if(shift==1)
 012E 80910100          lds R24,_shift
 0132 8130              cpi R24,1
 0134 F9F4              brne L23
 0136           X15:
 0136           ; 		        {
 0136           ; 				    for(i=0;i<59;i++)
 0136 4427              clr R20
 0138 16C0              xjmp L38
 013A           L35:
 013A           ; 				    {
 013A           ; 				        if (Shifted[i][0]==data)
 013A 80E0              ldi R24,<_Shifted
 013C 90E0              ldi R25,>_Shifted
 013E E42F              mov R30,R20
 0140 FF27              clr R31
 0142 EE0F              lsl R30
 0144 FF1F              rol R31
 0146 E80F              add R30,R24
 0148 F91F              adc R31,R25
 014A 2080              ldd R2,z+0
 014C 2016              cp R2,R16
 014E 51F4              brne L39
 0150           X16:
 0150           ; 				        return(Shifted[i][1]);
 0150 80E0              ldi R24,<_Shifted+1
 0152 90E0              ldi R25,>_Shifted+1
 0154 E42F              mov R30,R20
 0156 FF27              clr R31
 0158 EE0F              lsl R30
 015A FF1F              rol R31
 015C E80F              add R30,R24
 015E F91F              adc R31,R25
 0160 0081              ldd R16,z+0
 0162 08C0              xjmp L11
 0164           L39:
 0164           ; 				    } 
 0164           L36:
 0164 4395              inc R20
 0166           L38:
 0166 4B33              cpi R20,59
 0168 40F3              brlo L35
 016A           X17:
 016A           ; 				  }
 016A           ; 			}
 016A 04C0              xjmp L23
 016C           L22:
 016C           ; 			else
 016C           ; 			    {
 016C           ; 				up=0;
 016C 2224              clr R2
 016E 20920200          sts _up,R2
 0172           ;                               return(0);
 0172 0027              clr R16
 0174           L23:
 0174           ; 				}
 0174           ;         }
 0174           ;     }
 0174           L11:
 0174                   .dbline 0 ; func end
 0174 0C940000          xjmp pop_xgsetF000
 0178           ;              a -> R10
                        .even
 0178           _main::
 0178 2297              sbiw R28,2
 017A           ; }
 017A           ; 
 017A           ; /****************************************************************************
 017A           ; ** Function Name:      main      
 017A           ; ** Descriptions:       
 017A           ; ** Input Parameters:   void
 017A           ; ** Output parameters:  void
 017A           ; ** Returned Value:     void
 017A           ; **---------------------------------------------------------------------------
 017A           ; ****************************************************************************/
 017A           ; 
 017A           ; void main(void)
 017A           ; {
 017A           ; 
 017A           ;     unsigned char a=0;
 017A AA24              clr R10
 017C           ; 
 017C           ;     MCUCR=0;                                      /* MCU控制寄存器           */
 017C 2224              clr R2
 017E 25BE              out 0x35,R2
 0180           ;     SEI();
 0180 7894              sei
 0182           ;     lcd_init();
 0182 0E940000          xcall _lcd_init
 0186           ;     DDRE&=0xcf;                                   /* PE4和PE5作输入          */
 0186 82B1              in R24,0x2
 0188 8F7C              andi R24,207
 018A 82B9              out 0x2,R24
 018C           ;     EIMSK=0x10;                                   /* 外部中断屏蔽寄存器      */                                 
 018C 80E1              ldi R24,16
 018E 89BF              out 0x39,R24
 0190           ;     EICRB=0x02;                                   /* 外部中断寄存器B         */
 0190 82E0              ldi R24,2
 0192 8ABF              out 0x3a,R24
 0194           ;     lcd_clear();
 0194 0E940000          xcall _lcd_clear
 0198 0EC0              xjmp L46
 019A           L45:
 019A           ;     while(1)                                      /* 显示在液晶显示器上      */
 019A           ; { 
 019A           ;     a=key_check(key); lcd_putss(0,0,a);}
 019A 00910000          lds R16,_key
 019E 6CDF              xcall _key_check
 01A0 A02E              mov R10,R16
 01A2 2A2C              mov R2,R10
 01A4 3324              clr R3
 01A6 3982              std y+1,R3
 01A8 2882              std y+0,R2
 01AA 2227              clr R18
 01AC 3327              clr R19
 01AE 0027              clr R16
 01B0 1127              clr R17
 01B2 0E940000          xcall _lcd_putss
 01B6           L46:
 01B6 F1CF              xjmp L45
 01B8           X19:
 01B8           L44:
 01B8                   .dbline 0 ; func end
 01B8 2296              adiw R28,2
 01BA 0895              ret
 01BC           ; }

⌨️ 快捷键说明

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