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

📄 no2.lst

📁 12864LCD液晶仿真
💻 LST
📖 第 1 页 / 共 3 页
字号:
     164 92AA      ST	R10,-Y
     165 92CA      ST	R12,-Y
     166 2EC2      MOV	R12,R18
     167 2EA0      MOV	R10,R16
(0153) }
(0154) 
(0155) 
(0156) /********************************************************************************************
(0157) * 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
(0158) * 功    能:LCD设置x y坐标
(0159) * 入口参数:x y
(0160) * 出口参数:无
(0161) *********************************************************************************************/
(0162) void Lcd_Set_X_Y(uchar x, uchar y)
(0163) {   
(0164)    if(y<64)
     168 2D8C      MOV	R24,R12
     169 3480      CPI	R24,0x40
     16A F428      BCC	0x0170
(0165)       {   PORTB&=~BIT(3);
     16B 98C3      CBI	0x18,3
(0166) 	      PORTB|=BIT(2);
     16C 9AC2      SBI	0x18,2
(0167) 	   
(0168) 		set_col_addr_L(y);
     16D 2F08      MOV	R16,R24
     16E DFE7      RCALL	_set_col_addr_L
(0169) 	  }
     16F C004      RJMP	0x0174
(0170)    else
(0171)       {   
(0172) 		   PORTB|=BIT(3);
     170 9AC3      SBI	0x18,3
(0173) 	    PORTB&=~BIT(2);
     171 98C2      CBI	0x18,2
(0174) 		set_col_addr_R(y);
     172 2D0C      MOV	R16,R12
     173 DFE9      RCALL	_set_col_addr_R
(0175) 	  }
(0176)    set_page_L( x);
     174 2D0A      MOV	R16,R10
     175 DFD2      RCALL	_set_page_L
(0177)    set_page_R( x);
     176 2D0A      MOV	R16,R10
     177 DFD7      RCALL	_set_page_R
     178 90C9      LD	R12,Y+
     179 90A9      LD	R10,Y+
     17A 9508      RET
_Lcd_Character_16X16:
  temp                 --> Y,+0
  i                    --> R10
  j                    --> R12
  point                --> Y,+11
  y                    --> R14
  x                    --> Y,+7
  bit_flag             --> R10
     17B 933A      ST	R19,-Y
     17C 932A      ST	R18,-Y
     17D 940E 0318 CALL	push_xgset00FC
     17F 2EA0      MOV	R10,R16
     180 9721      SBIW	R28,1
     181 84E9      LDD	R14,Y+9
(0178) }
(0179) 
(0180) /****************************************************************************
(0181) * 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
(0182) * 功能:显示16*16字符(汉字)       
(0183) * 入口参数:x y data
(0184) * 出口参数:无
(0185) *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
(0186) ****************************************************************************/
(0187) void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar  *point )
(0188) {
(0189)    uchar i,j,temp ;
(0190)    temp=y;
     182 82E8      STD	Y+0,R14
(0191)    if( bit_flag )
     183 20AA      TST	R10
     184 F111      BEQ	0x01A7
(0192)    {
(0193)       for( i=0; i<2; i++ )
     185 24AA      CLR	R10
     186 C01C      RJMP	0x01A3
(0194)       {
(0195)          x+=i;
     187 800F      LDD	R0,Y+7
     188 0C0A      ADD	R0,R10
     189 820F      STD	Y+7,R0
(0196) 	     y=temp;
     18A 80E8      LDD	R14,Y+0
(0197)          for( j=0;j<16;j++ )
     18B 24CC      CLR	R12
     18C C012      RJMP	0x019F
(0198)          {
(0199)             Lcd_Set_X_Y( x, y ); y++;
     18D 2D2E      MOV	R18,R14
     18E 810F      LDD	R16,Y+7
     18F DFD4      RCALL	_Lcd_Set_X_Y
     190 94E3      INC	R14
(0200)             Lcd_Write_Byte( point[ i*16 + j] );  
     191 E180      LDI	R24,0x10
     192 9D8A      MUL	R24,R10
     193 01F0      MOVW	R30,R0
     194 2C2C      MOV	R2,R12
     195 2433      CLR	R3
     196 0DE2      ADD	R30,R2
     197 1DF3      ADC	R31,R3
     198 840B      LDD	R0,Y+11
     199 841C      LDD	R1,Y+12
     19A 0DE0      ADD	R30,R0
     19B 1DF1      ADC	R31,R1
     19C 8100      LDD	R16,Z+0
     19D DF91      RCALL	_Lcd_Write_Byte
     19E 94C3      INC	R12
     19F 2D8C      MOV	R24,R12
     1A0 3180      CPI	R24,0x10
     1A1 F358      BCS	0x018D
     1A2 94A3      INC	R10
     1A3 2D8A      MOV	R24,R10
     1A4 3082      CPI	R24,2
     1A5 F308      BCS	0x0187
(0201)          } 
(0202)       }
(0203)    }
     1A6 C022      RJMP	0x01C9
(0204)    else
(0205)    {
(0206)       for( i =0; i<2; i++ )
     1A7 24AA      CLR	R10
     1A8 C01D      RJMP	0x01C6
(0207)       {
(0208)          x+=i;
     1A9 800F      LDD	R0,Y+7
     1AA 0C0A      ADD	R0,R10
     1AB 820F      STD	Y+7,R0
(0209)          y=temp;
     1AC 80E8      LDD	R14,Y+0
(0210)          for( j = 0; j < 16; j++ )
     1AD 24CC      CLR	R12
     1AE C013      RJMP	0x01C2
(0211)          {
(0212)             Lcd_Set_X_Y( x, y );
     1AF 2D2E      MOV	R18,R14
     1B0 810F      LDD	R16,Y+7
     1B1 DFB2      RCALL	_Lcd_Set_X_Y
(0213) 			y++;
     1B2 94E3      INC	R14
(0214)             Lcd_Write_Byte( ~ point[ i * 16 + j ] );
     1B3 E180      LDI	R24,0x10
     1B4 9D8A      MUL	R24,R10
     1B5 01F0      MOVW	R30,R0
     1B6 2C2C      MOV	R2,R12
     1B7 2433      CLR	R3
     1B8 0DE2      ADD	R30,R2
     1B9 1DF3      ADC	R31,R3
     1BA 840B      LDD	R0,Y+11
     1BB 841C      LDD	R1,Y+12
     1BC 0DE0      ADD	R30,R0
     1BD 1DF1      ADC	R31,R1
     1BE 8100      LDD	R16,Z+0
     1BF 9500      COM	R16
     1C0 DF6E      RCALL	_Lcd_Write_Byte
     1C1 94C3      INC	R12
     1C2 2D8C      MOV	R24,R12
     1C3 3180      CPI	R24,0x10
     1C4 F350      BCS	0x01AF
     1C5 94A3      INC	R10
     1C6 2D8A      MOV	R24,R10
     1C7 3082      CPI	R24,2
     1C8 F300      BCS	0x01A9
(0215) 			
(0216)          }
(0217) 		
(0218)       }
(0219)    }
     1C9 9621      ADIW	R28,1
     1CA 940E 030D CALL	pop_xgset00FC
     1CC 9622      ADIW	R28,2
     1CD 9508      RET
(0220) }
(0221) uchar key_press()
(0222) {
(0223)     uchar j;
(0224)     DDRD|=0X0F;
_key_press:
  j                    --> R16
     1CE B381      IN	R24,0x11
     1CF 608F      ORI	R24,0xF
     1D0 BB81      OUT	0x11,R24
(0225) 	PORTD|=0X0F;
     1D1 B382      IN	R24,0x12
     1D2 608F      ORI	R24,0xF
     1D3 BB82      OUT	0x12,R24
(0226) 	
(0227) 	DDRD&=0XF0;
     1D4 B381      IN	R24,0x11
     1D5 7F80      ANDI	R24,0xF0
     1D6 BB81      OUT	0x11,R24
(0228) 	
(0229) 	j=PIND;
     1D7 B300      IN	R16,0x10
(0230) 	j=j&0X0F;//00001111
     1D8 700F      ANDI	R16,0xF
(0231) 	if(j==0X0F)
     1D9 300F      CPI	R16,0xF
     1DA F411      BNE	0x01DD
(0232) 	{
(0233) 	  return 0;
     1DB 2700      CLR	R16
     1DC C001      RJMP	0x01DE
(0234) 	}
(0235) 	else
(0236) 	{
(0237) 	 return 1;
     1DD E001      LDI	R16,1
     1DE 9508      RET
_key_scan:
  key                  --> R10
     1DF 940E 031A CALL	push_xgset003C
(0238) 	}
(0239) 	
(0240) }
(0241) 
(0242) uchar key_scan()
(0243) {
(0244)     uchar key;
(0245)     delay(10);
     1E1 E00A      LDI	R16,0xA
     1E2 E010      LDI	R17,0
     1E3 DF33      RCALL	_delay
(0246) 	if(key_press())
     1E4 DFE9      RCALL	_key_press
     1E5 2300      TST	R16
     1E6 F151      BEQ	0x0211
(0247) 	{
(0248) 	key=PIND;
     1E7 B2A0      IN	R10,0x10
(0249) 	key&=0X0F;
     1E8 2D8A      MOV	R24,R10
     1E9 708F      ANDI	R24,0xF
     1EA 2EA8      MOV	R10,R24
(0250) 	switch(key)
     1EB 2EC8      MOV	R12,R24
     1EC 24DD      CLR	R13
     1ED 01C6      MOVW	R24,R12
     1EE 3087      CPI	R24,7
     1EF E0E0      LDI	R30,0
     1F0 079E      CPC	R25,R30
     1F1 F0B1      BEQ	0x0208
     1F2 308B      CPI	R24,0xB
     1F3 E0E0      LDI	R30,0
     1F4 079E      CPC	R25,R30
     1F5 F079      BEQ	0x0205
     1F6 308D      CPI	R24,0xD
     1F7 E0E0      LDI	R30,0
     1F8 079E      CPC	R25,R30
     1F9 F041      BEQ	0x0202
     1FA 308E      CPI	R24,0xE
     1FB E0E0      LDI	R30,0
     1FC 079E      CPC	R25,R30
     1FD F009      BEQ	0x01FF
     1FE C00C      RJMP	0x020B
(0251) 	{
(0252) 	   case 0X0E: 
(0253) 	       key=1;
     1FF 24AA      CLR	R10
     200 94A3      INC	R10
(0254) 		   break;
     201 C00B      RJMP	0x020D
(0255) 	   case 0X0D:
(0256) 	       key=2;
     202 E082      LDI	R24,2
     203 2EA8      MOV	R10,R24
(0257) 		   break;
     204 C008      RJMP	0x020D
(0258) 	   	 case 0X0B: 
(0259) 	       key=3;
     205 E083      LDI	R24,3
     206 2EA8      MOV	R10,R24
(0260) 		   break;
     207 C005      RJMP	0x020D
(0261) 	   case 0X07:
(0262) 	       key=4;
     208 E084      LDI	R24,4
     209 2EA8      MOV	R10,R24
(0263) 		   break; 
     20A C002      RJMP	0x020D
(0264) 	   default:	
(0265) 	       key=16;     	   
     20B E180      LDI	R24,0x10
     20C 2EA8      MOV	R10,R24
(0266) 	}
(0267) 	  while(key_press());
     20D DFC0      RCALL	_key_press
     20E 2300      TST	R16
     20F F7E9      BNE	0x020D
(0268) 	}
     210 C002      RJMP	0x0213
(0269) 	else
(0270) 	{
(0271) 	  key=16;
     211 E180      LDI	R24,0x10
     212 2EA8      MOV	R10,R24
(0272) 	}
(0273) 	return key;
     213 2D0A      MOV	R16,R10
     214 940C 0308 JMP	pop_xgset003C
_Lcd_Function:
  n                    --> R10
  m                    --> R12
  alarm_flag           --> Y,+5
  time_flag            --> Y,+4
  temp                 --> R14
     216 940E 0318 CALL	push_xgset00FC
     218 2EE0      MOV	R14,R16
     219 9726      SBIW	R28,6
(0274) }
(0275) 
(0276) void Lcd_Function( uchar temp )
(0277) {
(0278)    uchar time_flag = 0;
     21A 2400      CLR	R0
     21B 820C      STD	Y+4,R0
(0279)    uchar alarm_flag = 0;
     21C 820D      STD	Y+5,R0
(0280)    uchar m=0;
     21D 24CC      CLR	R12
(0281)    uchar n=0;
     21E 24AA      CLR	R10
(0282)     switch(temp)
     21F 24FF      CLR	R15

⌨️ 快捷键说明

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