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

📄 bi2.lst

📁 驱动320240
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0422)   
(0423)   
(0424)   
(0425)   
(0426)   
(0427)   
(0428)   
(0429)   
(0430)   
(0431)   
(0432) void LCD_write_ch(unsigned char X,unsigned char Y,unsigned char z,unsigned int s)
(0433)   {unsigned char k;
(0434)   unsigned char p[6]="0";
    0245 EA88      LDI	R24,0xA8
    0246 E090      LDI	R25,0
    0247 01FE      MOVW	R30,R28
    0248 E006      LDI	R16,6
    0249 E010      LDI	R17,0
    024A 93FA      ST	R31,-Y
    024B 93EA      ST	R30,-Y
    024C 939A      ST	R25,-Y
    024D 938A      ST	R24,-Y
    024E 940E0774  CALL	asgncblk
(0435)   unsigned char i=0;
    0250 2744      CLR	R20
(0436)      //写地址
(0437) 	  LCD_set_xy( X, Y );
    0251 2D2E      MOV	R18,R14
    0252 2D0C      MOV	R16,R12
    0253 D056      RCALL	_LCD_set_xy
(0438) for(i=0;i<z;i++)
    0254 C012      RJMP	0x0267
(0439) {
(0440) 	  p[i]=s%10;
    0255 E02A      LDI	R18,0xA
    0256 E030      LDI	R19,0
    0257 018B      MOVW	R16,R22
    0258 940E06E7  CALL	mod16u
    025A 01CE      MOVW	R24,R28
    025B 2FE4      MOV	R30,R20
    025C 27FF      CLR	R31
    025D 0FE8      ADD	R30,R24
    025E 1FF9      ADC	R31,R25
    025F 8300      STD	Z+0,R16
(0441) 	  s=s/10;
    0260 E02A      LDI	R18,0xA
    0261 E030      LDI	R19,0
    0262 018B      MOVW	R16,R22
    0263 940E06E9  CALL	div16u
    0265 01B8      MOVW	R22,R16
    0266 9543      INC	R20
    0267 154A      CP	R20,R10
    0268 F360      BCS	0x0255
(0442) 		
(0443) 	      }
(0444) 		i--;
    0269 954A      DEC	R20
(0445) 		/*
(0446) 		while(!(p[i]))
(0447) 		{ 
(0448) 		  if(i==0)
(0449) 		  {LCD_write_char( 0, 0b00110000 );i--;}
(0450) 		  else
(0451) 		  {i--;LCD_write_char( 0, 0b10000000 );}		
(0452) 
(0453) 		}
(0454) */
(0455) 		 for(;i<255;i--)
    026A C00D      RJMP	0x0278
(0456) 		 {	
(0457)     LCD_write_char( 0, p[i]+0b00110000 );
    026B 01CE      MOVW	R24,R28
    026C 2FE4      MOV	R30,R20
    026D 27FF      CLR	R31
    026E 0FE8      ADD	R30,R24
    026F 1FF9      ADC	R31,R25
    0270 8120      LDD	R18,Z+0
    0271 2733      CLR	R19
    0272 5D20      SUBI	R18,0xD0
    0273 4F3F      SBCI	R19,0xFF
    0274 2700      CLR	R16
    0275 2711      CLR	R17
    0276 D04C      RCALL	_LCD_write_char
    0277 954A      DEC	R20
    0278 3F4F      CPI	R20,0xFF
    0279 F388      BCS	0x026B
    027A 9626      ADIW	R28,6
    027B 940E0724  CALL	pop_gset5
    027D 9508      RET
(0458)   }}
(0459) 
(0460)   
(0461) 
(0462) 
(0463) 
(0464) void LCD_init(void)       //液晶初始化
(0465) {
(0466)  delay_nms(15);
_LCD_init:
    027E E00F      LDI	R16,0xF
    027F E010      LDI	R17,0
    0280 DE78      RCALL	_delay_nms
(0467)  LCD_write_char(0x28,0);  //4位显示
    0281 2722      CLR	R18
    0282 2733      CLR	R19
    0283 E208      LDI	R16,0x28
    0284 E010      LDI	R17,0
    0285 D03D      RCALL	_LCD_write_char
(0468)  LCD_write_char(0x0c,0);  //显示开
    0286 2722      CLR	R18
    0287 2733      CLR	R19
    0288 E00C      LDI	R16,0xC
    0289 E010      LDI	R17,0
    028A D038      RCALL	_LCD_write_char
(0469)  LCD_write_char(0x01,0);  //清屏
    028B 2722      CLR	R18
    028C 2733      CLR	R19
    028D E001      LDI	R16,1
    028E E010      LDI	R17,0
    028F D033      RCALL	_LCD_write_char
    0290 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    0291 940E072B  CALL	push_gset3
    0293 2EA2      MOV	R10,R18
    0294 2F60      MOV	R22,R16
    0295 814E      LDD	R20,Y+6
    0296 815F      LDD	R21,Y+7
(0470) }
(0471) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0472)   {
(0473)     LCD_set_xy( X, Y ); //写地址
    0297 2D2A      MOV	R18,R10
    0298 2F06      MOV	R16,R22
    0299 D010      RCALL	_LCD_set_xy
    029A C008      RJMP	0x02A3
(0474)     
(0475)     while (*s)  // 写显示字符
(0476)       {
(0477)         LCD_write_char( 0, *s );
    029B 01FA      MOVW	R30,R20
    029C 8120      LDD	R18,Z+0
    029D 2733      CLR	R19
    029E 2700      CLR	R16
    029F 2711      CLR	R17
    02A0 D022      RCALL	_LCD_write_char
(0478) 	s ++;
    02A1 5F4F      SUBI	R20,0xFF
    02A2 4F5F      SBCI	R21,0xFF
    02A3 01FA      MOVW	R30,R20
    02A4 8020      LDD	R2,Z+0
    02A5 2022      TST	R2
    02A6 F7A1      BNE	0x029B
    02A7 940E071E  CALL	pop_gset3
    02A9 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R20
  x                    --> R22
    02AA 940E072D  CALL	push_gset2
    02AC 2F42      MOV	R20,R18
    02AD 2F60      MOV	R22,R16
(0479)       }
(0480)   }
(0481)   void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0482)   {
(0483)     unsigned char address;
(0484)     if (y == 0) address = 0x80 + x;
    02AE 2344      TST	R20
    02AF F419      BNE	0x02B3
    02B0 2F46      MOV	R20,R22
    02B1 5840      SUBI	R20,0x80
    02B2 C002      RJMP	0x02B5
(0485)     else 
(0486)        address = 0xc0 + x;
    02B3 2F46      MOV	R20,R22
    02B4 5440      SUBI	R20,0x40
(0487)     LCD_write_char( address, 0 );
    02B5 2722      CLR	R18
    02B6 2733      CLR	R19
    02B7 2F04      MOV	R16,R20
    02B8 2711      CLR	R17
    02B9 D009      RCALL	_LCD_write_char
    02BA 940E071B  CALL	pop_gset2
    02BC 9508      RET
(0488)   }
(0489) void LCD_en_write(void)  //液晶使能
(0490) {
(0491)   LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
    02BD 9A94      SBI	0x12,4
(0492)   delay_nus(1);
    02BE E001      LDI	R16,1
    02BF E010      LDI	R17,0
    02C0 DE1F      RCALL	_delay_nus
(0493)   LCD_EN_PORT&=~LCD_EN;
    02C1 9894      CBI	0x12,4
    02C2 9508      RET
_LCD_write_char:
  data_temp            --> R22
  command_temp         --> R20
  data                 --> R12
  command              --> R10
    02C3 940E0729  CALL	push_gset4
    02C5 0169      MOVW	R12,R18
    02C6 0158      MOVW	R10,R16
(0494) }
(0495) void LCD_write_char(unsigned command,unsigned data) // 写数据
(0496) {
(0497)  unsigned command_temp,data_temp;
(0498)  command_temp=command;
    02C7 01A5      MOVW	R20,R10
(0499)  data_temp=data;
    02C8 01B6      MOVW	R22,R12
(0500)  delay_nus(16);
    02C9 E100      LDI	R16,0x10
    02CA E010      LDI	R17,0
    02CB DE14      RCALL	_delay_nus
(0501)  if(command==0)
    02CC 3040      CPI	R20,0
    02CD 0745      CPC	R20,R21
    02CE F511      BNE	0x02F1
(0502)  {
(0503)   LCD_RS_PORT|=LCD_RS;  //RS=1
    02CF 9A96      SBI	0x12,6
(0504)   LCD_DATA_PORT&=0XF0;
    02D0 B382      IN	R24,0x12
    02D1 7F80      ANDI	R24,0xF0
    02D2 BB82      OUT	0x12,R24
(0505)   LCD_DATA_PORT|=(data_temp>>4)&0x0F;  //写高四位
    02D3 01CB      MOVW	R24,R22
    02D4 9596      LSR	R25
    02D5 9587      ROR	R24
    02D6 9596      LSR	R25
    02D7 9587      ROR	R24
    02D8 9596      LSR	R25
    02D9 9587      ROR	R24
    02DA 9596      LSR	R25
    02DB 9587      ROR	R24
    02DC 708F      ANDI	R24,0xF
    02DD 7090      ANDI	R25,0
    02DE B222      IN	R2,0x12
    02DF 2433      CLR	R3
    02E0 2A28      OR	R2,R24
    02E1 2A39      OR	R3,R25
    02E2 BA22      OUT	0x12,R2
(0506)   LCD_en_write();
    02E3 DFD9      RCALL	_LCD_en_write
(0507)   //data_temp=data_temp<<4;  
(0508)   LCD_DATA_PORT&=0XF0;
    02E4 B382      IN	R24,0x12
    02E5 7F80      ANDI	R24,0xF0
    02E6 BB82      OUT	0x12,R24
(0509)   LCD_DATA_PORT|=data_temp&0x0F;   //写低四位
    02E7 01CB      MOVW	R24,R22
    02E8 708F      ANDI	R24,0xF
    02E9 7090      ANDI	R25,0
    02EA B222      IN	R2,0x12
    02EB 2433      CLR	R3
    02EC 2A28      OR	R2,R24
    02ED 2A39      OR	R3,R25
    02EE BA22      OUT	0x12,R2
(0510)   LCD_en_write();
    02EF DFCD      RCALL	_LCD_en_write
(0511)  }
    02F0 C021      RJMP	0x0312
(0512)  else
(0513)  {
(0514)   LCD_RS_PORT&=~LCD_RS;   //RS=0
    02F1 9896      CBI	0x12,6
(0515)   LCD_DATA_PORT&=0XF0;
    02F2 B382      IN	R24,0x12
    02F3 7F80      ANDI	R24,0xF0
    02F4 BB82      OUT	0x12,R24
(0516)   LCD_DATA_PORT|=(command_temp>>4)&0x0F; //写高四位
    02F5 01CA      MOVW	R24,R20
    02F6 9596      LSR	R25
    02F7 9587      ROR	R24
    02F8 9596      LSR	R25
    02F9 9587      ROR	R24
    02FA 9596      LSR	R25
    02FB 9587      ROR	R24
    02FC 9596      LSR	R25
    02FD 9587      ROR	R24
    02FE 708F      ANDI	R24,0xF
    02FF 7090      ANDI	R25,0
    0300 B222      IN	R2,0x12
    0301 2433      CLR	R3
    0302 2A28      OR	R2,R24
    0303 2A39      OR	R3,R25
    0304 BA22      OUT	0x12,R2
(0517)   LCD_en_write();
    0305 DFB7      RCALL	_LCD_en_write
(0518)  // command_temp=command_temp<<4;
(0519)   LCD_DATA_PORT&=0xF0;
    0306 B382      IN	R24,0x12
    0307 7F80      ANDI	R24,0xF0
    0308 BB82      OUT	0x12,R24
(0520)   LCD_DATA_PORT|=command_temp&0x0F;  //写低四位
    0309 01CA      MOVW	R24,R20
    030A 708F      ANDI	R24,0xF
    030B 7090      ANDI	R25,0
    030C B222      IN	R2,0x12
    030D 2433      CLR	R3
    030E 2A28      OR	R2,R24
    030F 2A39      OR	R3,R25
    0310 BA22      OUT	0x12,R2
(0521)   LCD_en_write();
    0311 DFAB      RCALL	_LCD_en_write
(0522)   }
    0312 940E0721  CALL	pop_gset4
    0314 9508      RET
(0523) }
(0524) /***************************************
(0525)            T2初始化,中断
(0526) ****************************************/
(0527) 
(0528) 
(0529) 
(0530) 
(0531) void time_change(void)
(0532) {
(0533) if(time[0][0]<60)
_time_change:
    0315 91800062  LDS	R24,time
    0317 338C      CPI	R24,0x3C
    0318 F408      BCC	0x031A
(0534)   return;
    0319 C01B      RJMP	0x0335
(0535)   else
(0536)   {time[0][0]-=60;
    031A 91800062  LDS	R24,time
    031C 538C      SUBI	R24,0x3C
    031D 93800062  STS	time,R24
(0537)   if(time[0][1]<59)
    031F 91800063  LDS	R24,time+1
    0321 338B      CPI	R24,0x3B
    0322 F420      BCC	0x0327
(0538)   time[0][1]++;
    0323 5F8F      SUBI	R24,0xFF
    0324 93800063  STS	time+1,R24
    0326 C00E      RJMP	0x0335
(0539)   else
(0540)   {
(0541)     time[0][1]=0;
    0327 2422      CLR	R2
    0328 92200063  STS	time+1,R2
(0542) 	if(time[0][2]<23)
    032A 91800064  LDS	R24,time+2
    032C 3187      CPI	R24,0x17
    032D F420      BCC	0x0332
(0543) 	time[0][2]++;
    032E 5F8F      SUBI	R24,0xFF
    032F 93800064  STS	time+2,R24
    0331 C003      RJMP	0x0335
(0544) 	else
(0545) 	time[0][2]=0;
    0332 2422      CLR	R2
    0333 92200064  STS	time+2,R2
(0546) 	}
(0547)     }
    0335 9508      RET
(0548) 
(0549) }
(0550) 
(0551) void t2_init()
(0552) {
(0553) ASSR=(1<<AS2);
_t2_init:
    0336 E088      LDI	R24,0x8
    0337 BD82      OUT	0x22,R24
(0554) TCNT2=0XE0;
    0338 EE80      LDI	R24,0xE0
    0339 BD84      OUT	0x24,R24
(0555) TCCR2=(7<<CS20);
    033A E087      LDI	R24,7
    033B BD85      OUT	0x25,R24
(0556) TIMSK|=(1<<TOIE2);									 
    033C B789      IN	R24,0x39
    033D 6480      ORI	R24,0x40
    033E BF89      OUT	0x39,R24
    033F 9508      RET
_t2_iov:
    0340 940E0746  CALL	push_lset
(0557) }
(0558) #pragma interrupt_handler t2_iov:5
(0559) void t2_iov(void)
(0560) {
(0561) TCNT2=0XE0;
    0342 EE80      LDI	R24,0xE0
    0343 BD84      OUT	0x24,R24
(0562) time[0][0]++;
    0344 91800062  LDS	R24,time
    0346 5F8F      SUBI	R24,0xFF
    0347 93800062  STS	time,R24
(0563) time_change();
    0349 DFCB      RCALL	_time_change
    034A 940E075D  CALL	pop_lset
    034C 9518      RETI
_disp_temp:
  q                    --> Y+8
  y                    --> R20
  x                    --> R22
    034D 940E072D  CALL	push_gset2
    034F 2F42      MOV	R20,R18
    0350 2F60      MOV	R22,R16
    0351 9724      SBIW	R28,4
(0564) }
(0565) 
(0566) 
(0567) 
(0568) void disp_temp(unsigned char x,unsigned char y,unsigned char q)
(0569) {

⌨️ 快捷键说明

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