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

📄 4x4key.lst

📁 meg16 的所有功能实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0145) 	
(0146)  	if((KEY_IN&H1)==H1)	 return L4_H1;
    00B8 B389      IN	R24,0x19
    00B9 7180      ANDI	R24,0x10
    00BA 3180      CPI	R24,0x10
    00BB F411      BNE	0x00BE
    00BC E003      LDI	R16,3
    00BD C013      RJMP	0x00D1
(0147) 	if((KEY_IN&H2)==H2)	 return L4_H2;
    00BE B389      IN	R24,0x19
    00BF 7280      ANDI	R24,0x20
    00C0 3280      CPI	R24,0x20
    00C1 F411      BNE	0x00C4
    00C2 E007      LDI	R16,7
    00C3 C00D      RJMP	0x00D1
(0148) 	if((KEY_IN&H3)==H3)	 return L4_H3;
    00C4 B389      IN	R24,0x19
    00C5 7480      ANDI	R24,0x40
    00C6 3480      CPI	R24,0x40
    00C7 F411      BNE	0x00CA
    00C8 E00B      LDI	R16,0xB
    00C9 C007      RJMP	0x00D1
(0149) 	if((KEY_IN&H4)==H4)	 return L4_H4;
    00CA B389      IN	R24,0x19
    00CB 7880      ANDI	R24,0x80
    00CC 3880      CPI	R24,0x80
    00CD F411      BNE	0x00D0
    00CE E00F      LDI	R16,0xF
    00CF C001      RJMP	0x00D1
(0150) 
(0151) 	return ON_PUSH;
    00D0 EF0F      LDI	R16,0xFF
    00D1 9508      RET
_Read_Key:
    00D2 940E0135  CALL	push_gset1
(0152) 	
(0153) }
(0154) 
(0155) //=======================================================================
(0156) void Read_Key(void)
(0157) {
(0158)  switch(Key_State)
    00D4 91400061  LDS	R20,Key_State
    00D6 2755      CLR	R21
    00D7 3040      CPI	R20,0
    00D8 0745      CPC	R20,R21
    00D9 F049      BEQ	0x00E3
    00DA 3041      CPI	R20,1
    00DB E0E0      LDI	R30,0
    00DC 075E      CPC	R21,R30
    00DD F071      BEQ	0x00EC
    00DE 3042      CPI	R20,2
    00DF E0E0      LDI	R30,0
    00E0 075E      CPC	R21,R30
    00E1 F0E1      BEQ	0x00FE
    00E2 C021      RJMP	0x0104
(0159)      {
(0160)   	 case 0:
(0161)          if(KEYDIN() != ON_PUSH)
    00E3 DF80      RCALL	_KEYDIN
    00E4 3F0F      CPI	R16,0xFF
    00E5 F0F1      BEQ	0x0104
(0162) 		 	{
(0163) 			Key_State++;
    00E6 91800061  LDS	R24,Key_State
    00E8 5F8F      SUBI	R24,0xFF
    00E9 93800061  STS	Key_State,R24
(0164) 			}  
(0165) 		 break;
    00EB C018      RJMP	0x0104
(0166)   	 case 1:
(0167)          if(KEYDIN() != ON_PUSH)
    00EC DF77      RCALL	_KEYDIN
    00ED 3F0F      CPI	R16,0xFF
    00EE F049      BEQ	0x00F8
(0168) 		    {
(0169) 			 Key_State++;
    00EF 91800061  LDS	R24,Key_State
    00F1 5F8F      SUBI	R24,0xFF
    00F2 93800061  STS	Key_State,R24
(0170) 			 Key_Value=KEYDIN();
    00F4 DF6F      RCALL	_KEYDIN
    00F5 93000060  STS	Key_Value,R16
(0171) 			}
    00F7 C00C      RJMP	0x0104
(0172) 		 else 
(0173) 		    {
(0174) 			Key_State--;
    00F8 91800061  LDS	R24,Key_State
    00FA 5081      SUBI	R24,1
    00FB 93800061  STS	Key_State,R24
(0175) 			}
(0176) 		 break;
    00FD C006      RJMP	0x0104
(0177)      case 2:
(0178)          if(KEYDIN() == ON_PUSH)
    00FE DF65      RCALL	_KEYDIN
    00FF 3F0F      CPI	R16,0xFF
    0100 F419      BNE	0x0104
(0179) 		    {
(0180) 			Key_State=0;
    0101 2422      CLR	R2
    0102 92200061  STS	Key_State,R2
(0181) 			}
(0182) 		 break;
    0104 940E0138  CALL	pop_gset1
    0106 9508      RET
(0183)      }
(0184)  
(0185) }
(0186) 
(0187) void main(void)
(0188) {
(0189)  KEY_Init();
_main:
    0107 DF43      RCALL	_KEY_Init
(0190)  
(0191)  Key_State = 0;
    0108 2422      CLR	R2
    0109 92200061  STS	Key_State,R2
(0192)  Key_Value = ON_PUSH;
    010B EF8F      LDI	R24,0xFF
    010C 93800060  STS	Key_Value,R24
(0193)  
(0194)  Uart_Init();                 //TART初始化
    010E D00D      RCALL	_Uart_Init
(0195)  SEI();                       //全局中断使能
    010F 9478      BSET	7
    0110 C009      RJMP	0x011A
(0196)  
(0197)  while(1)
(0198)      {
(0199)      if(Key_Value != ON_PUSH)
    0111 91800060  LDS	R24,Key_Value
    0113 3F8F      CPI	R24,0xFF
    0114 F029      BEQ	0x011A
(0200)          {
(0201) 	     USART_TXD(Key_Value);
    0115 2F08      MOV	R16,R24
    0116 D00E      RCALL	_USART_TXD
(0202) 		 Key_Value = ON_PUSH;
    0117 EF8F      LDI	R24,0xFF
    0118 93800060  STS	Key_Value,R24
    011A CFF6      RJMP	0x0111
    011B 9508      RET
(0203) 	     }
(0204)      }
(0205) }
(0206) 
(0207) //===============================================================
(0208) void Uart_Init(void)          //UART初始化
(0209)   { 
(0210)      
(0211)     //设置侦格式
(0212) 	//异步,8位数据,无奇偶校验,一个停止位,无倍速
(0213) 	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
_Uart_Init:
    011C E886      LDI	R24,0x86
    011D BD80      OUT	0x20,R24
(0214) 	
(0215)     //设置波特率
(0216)     UBRRL= (F_osc/Baud_rate/16-1)%256;
    011E E28F      LDI	R24,0x2F
    011F B989      OUT	0x09,R24
(0217)     UBRRH= (F_osc/Baud_rate/16-1)/256;
    0120 2422      CLR	R2
    0121 BC20      OUT	0x20,R2
(0218) 
(0219) 	//使能接收中断,使能接收,使能发送
(0220)     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    0122 E988      LDI	R24,0x98
    0123 B98A      OUT	0x0A,R24
    0124 9508      RET
(0221)   }
(0222)   
(0223) 
(0224) //===============================================================
(0225) void USART_TXD(uint8 data) //发送采用查询方式
(0226) {
(0227) 	while( !(UCSRA & BIT(UDRE)) );
_USART_TXD:
  data                 --> R16
    0125 9B5D      SBIS	0x0B,5
    0126 CFFE      RJMP	_USART_TXD
(0228) 	UDR=data;
    0127 B90C      OUT	0x0C,R16
(0229) 	while( !(UCSRA & BIT(TXC )) );
    0128 9B5E      SBIS	0x0B,6
    0129 CFFE      RJMP	0x0128
(0230) 	UCSRA|=BIT(TXC);
    012A 9A5E      SBI	0x0B,6
    012B 9508      RET
(0231) }
(0232) 
(0233) //=======================================================================
(0234) 
(0235) #pragma interrupt_handler USART_RXC:12
(0236) void USART_RXC(void)
(0237) {
FILE: <library>
_USART_RXC:
    012C 9518      RETI
push_gset5:
    012D 92FA      ST	R15,-Y
    012E 92EA      ST	R14,-Y
push_gset4:
    012F 92DA      ST	R13,-Y
    0130 92CA      ST	R12,-Y
push_gset3:
    0131 92BA      ST	R11,-Y
    0132 92AA      ST	R10,-Y
push_gset2:
    0133 937A      ST	R23,-Y
    0134 936A      ST	R22,-Y
push_gset1:
    0135 935A      ST	R21,-Y
    0136 934A      ST	R20,-Y
    0137 9508      RET
pop_gset1:
    0138 E0E1      LDI	R30,1
pop:
    0139 9149      LD	R20,Y+
    013A 9159      LD	R21,Y+
    013B FDE0      SBRC	R30,0
    013C 9508      RET
    013D 9169      LD	R22,Y+
    013E 9179      LD	R23,Y+
    013F FDE1      SBRC	R30,1
    0140 9508      RET
    0141 90A9      LD	R10,Y+
    0142 90B9      LD	R11,Y+
    0143 FDE2      SBRC	R30,2
    0144 9508      RET
    0145 90C9      LD	R12,Y+
    0146 90D9      LD	R13,Y+
    0147 FDE3      SBRC	R30,3
    0148 9508      RET
    0149 90E9      LD	R14,Y+
    014A 90F9      LD	R15,Y+
    014B 9508      RET
push_lset:
    014C 93FA      ST	R31,-Y
    014D 93EA      ST	R30,-Y
    014E 93BA      ST	R27,-Y
    014F 93AA      ST	R26,-Y
    0150 939A      ST	R25,-Y
    0151 938A      ST	R24,-Y
    0152 933A      ST	R19,-Y
    0153 932A      ST	R18,-Y
    0154 931A      ST	R17,-Y
    0155 930A      ST	R16,-Y
    0156 929A      ST	R9,-Y
    0157 928A      ST	R8,-Y
    0158 927A      ST	R7,-Y
    0159 926A      ST	R6,-Y
    015A 925A      ST	R5,-Y
    015B 924A      ST	R4,-Y
    015C 923A      ST	R3,-Y
    015D 922A      ST	R2,-Y
    015E 921A      ST	R1,-Y
    015F 920A      ST	R0,-Y
    0160 B60F      IN	R0,0x3F
    0161 920A      ST	R0,-Y
    0162 9508      RET
pop_lset:
    0163 9009      LD	R0,Y+
    0164 BE0F      OUT	0x3F,R0
    0165 9009      LD	R0,Y+
    0166 9019      LD	R1,Y+
    0167 9029      LD	R2,Y+
    0168 9039      LD	R3,Y+
    0169 9049      LD	R4,Y+
    016A 9059      LD	R5,Y+
    016B 9069      LD	R6,Y+
    016C 9079      LD	R7,Y+
    016D 9089      LD	R8,Y+
    016E 9099      LD	R9,Y+
    016F 9109      LD	R16,Y+
    0170 9119      LD	R17,Y+
    0171 9129      LD	R18,Y+
    0172 9139      LD	R19,Y+
    0173 9189      LD	R24,Y+
    0174 9199      LD	R25,Y+
    0175 91A9      LD	R26,Y+
    0176 91B9      LD	R27,Y+
    0177 91E9      LD	R30,Y+
    0178 91F9      LD	R31,Y+
    0179 9508      RET

⌨️ 快捷键说明

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