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

📄 lcd_icc.lst

📁 用AVR及1602LCD在PROTEUS环境下仿真
💻 LST
📖 第 1 页 / 共 4 页
字号:
    02A7 F471      BNE	0x02B6
(0192)   {
(0193)    if((flash_flag)%2==0)
    02A8 E012      LDI	R17,2
    02A9 91000067  LDS	R16,flash_flag
    02AB 940E05BC  CALL	mod8u
    02AD 2300      TST	R16
    02AE F421      BNE	0x02B3
(0194)    {
(0195)     Print(&Month[0]);
    02AF E80E      LDI	R16,0x8E
    02B0 E010      LDI	R17,0
    02B1 DE4D      RCALL	_Print
(0196)    }
    02B2 C003      RJMP	0x02B6
(0197)    else
(0198)    {
(0199)     Print("  ");
    02B3 E700      LDI	R16,0x70
    02B4 E010      LDI	R17,0
    02B5 DE49      RCALL	_Print
(0200)    }
(0201)   }  
(0202)   //********************************************************
(0203)   IntToStr1(year,&Year[0]);//转换年位,显示
    02B6 E920      LDI	R18,0x90
    02B7 E030      LDI	R19,0
    02B8 91000063  LDS	R16,year
    02BA 91100064  LDS	R17,year+1
    02BC DEC5      RCALL	_IntToStr1
(0204)   GotoXY(6,0);
    02BD 2722      CLR	R18
    02BE E006      LDI	R16,6
    02BF DE50      RCALL	_GotoXY
(0205)   if(time_set!=6)//按下时间设定键,第6下为年设置
    02C0 91800068  LDS	R24,time_set
    02C2 3086      CPI	R24,6
    02C3 F021      BEQ	0x02C8
(0206)   {   
(0207)    Print(&Year[0]);
    02C4 E900      LDI	R16,0x90
    02C5 E010      LDI	R17,0
    02C6 DE38      RCALL	_Print
(0208)   }
    02C7 C012      RJMP	0x02DA
(0209)   else if(time_set==6)
    02C8 91800068  LDS	R24,time_set
    02CA 3086      CPI	R24,6
    02CB F471      BNE	0x02DA
(0210)   {
(0211)    if((flash_flag)%2==0)
    02CC E012      LDI	R17,2
    02CD 91000067  LDS	R16,flash_flag
    02CF 940E05BC  CALL	mod8u
    02D1 2300      TST	R16
    02D2 F421      BNE	0x02D7
(0212)    {
(0213)     Print(&Year[0]);
    02D3 E900      LDI	R16,0x90
    02D4 E010      LDI	R17,0
    02D5 DE29      RCALL	_Print
(0214)    }
    02D6 C003      RJMP	0x02DA
(0215)    else
(0216)    {
(0217)     Print("    ");
    02D7 E609      LDI	R16,0x69
    02D8 E010      LDI	R17,0
    02D9 DE25      RCALL	_Print
(0218)    }
(0219)   }  
(0220)   WDR();
    02DA 95A8      WDR
    02DB CF0F      RJMP	0x01EB
    02DC 9508      RET
_timer1_ovf_isr:
    02DD 922A      ST	R2,-Y
    02DE 930A      ST	R16,-Y
    02DF 931A      ST	R17,-Y
    02E0 932A      ST	R18,-Y
    02E1 933A      ST	R19,-Y
    02E2 938A      ST	R24,-Y
    02E3 939A      ST	R25,-Y
    02E4 B62F      IN	R2,0x3F
    02E5 922A      ST	R2,-Y
(0221)  }
(0222) }
(0223) 
(0224) //******************************************************************
(0225) //每次延时500MS,经过两次延时后,秒位加1;
(0226) #pragma interrupt_handler timer1_ovf_isr:9
(0227) void timer1_ovf_isr(void)
(0228) {
(0229)  //TIMER1 has overflowed
(0230)   WDR();
    02E6 95A8      WDR
(0231)   flash_flag++;
    02E7 91800067  LDS	R24,flash_flag
    02E9 5F8F      SUBI	R24,0xFF
    02EA 93800067  STS	flash_flag,R24
(0232)   if((flash_flag%2)==0)//判断是否是一秒
    02EC E012      LDI	R17,2
    02ED 2F08      MOV	R16,R24
    02EE 940E05BC  CALL	mod8u
    02F0 2300      TST	R16
    02F1 F009      BEQ	0x02F3
    02F2 C13B      RJMP	0x042E
(0233)   {
(0234)    
(0235)    sec++;   
    02F3 91800060  LDS	R24,sec
    02F5 5F8F      SUBI	R24,0xFF
    02F6 93800060  STS	sec,R24
(0236)    if(sec==60)  //超过60秒,分加1;秒清0
    02F8 338C      CPI	R24,0x3C
    02F9 F441      BNE	0x0302
(0237)    {
(0238)     min++;
    02FA 91800061  LDS	R24,min
    02FC 5F8F      SUBI	R24,0xFF
    02FD 93800061  STS	min,R24
(0239)     sec=0;   
    02FF 2422      CLR	R2
    0300 92200060  STS	sec,R2
(0240)    }
(0241)    if(min==60)            //超过60分,小时位进1,
    0302 91800061  LDS	R24,min
    0304 338C      CPI	R24,0x3C
    0305 F441      BNE	0x030E
(0242)    {
(0243)     hou++;
    0306 91800062  LDS	R24,hou
    0308 5F8F      SUBI	R24,0xFF
    0309 93800062  STS	hou,R24
(0244)     min=0;   
    030B 2422      CLR	R2
    030C 92200061  STS	min,R2
(0245)    }
(0246)    if(hou==24)  	  		 //小时位超过24,则清0         
    030E 91800062  LDS	R24,hou
    0310 3188      CPI	R24,0x18
    0311 F441      BNE	0x031A
(0247)    {
(0248)     hou=0;
    0312 2422      CLR	R2
    0313 92200062  STS	hou,R2
(0249) 	day++;
    0315 91800066  LDS	R24,day
    0317 5F8F      SUBI	R24,0xFF
    0318 93800066  STS	day,R24
(0250)    }
(0251)    if(((year%4==0)&&(year%100!=0))||(year%400==0))  	 //判断是否为闰年 1为闰年        
    031A 91800063  LDS	R24,year
    031C 91900064  LDS	R25,year+1
    031E 7083      ANDI	R24,3
    031F 7090      ANDI	R25,0
    0320 3080      CPI	R24,0
    0321 0789      CPC	R24,R25
    0322 F459      BNE	0x032E
    0323 E624      LDI	R18,0x64
    0324 E030      LDI	R19,0
    0325 91000063  LDS	R16,year
    0327 91100064  LDS	R17,year+1
    0329 940E05A0  CALL	mod16u
    032B 3000      CPI	R16,0
    032C 0701      CPC	R16,R17
    032D F461      BNE	0x033A
    032E E920      LDI	R18,0x90
    032F E031      LDI	R19,1
    0330 91000063  LDS	R16,year
    0332 91100064  LDS	R17,year+1
    0334 940E05A0  CALL	mod16u
    0336 3000      CPI	R16,0
    0337 0701      CPC	R16,R17
    0338 F009      BEQ	0x033A
    0339 C074      RJMP	0x03AE
(0252)    {
(0253)     if((month==2)&&(day==30))//闰年2月份是29天
    033A 91800065  LDS	R24,month
    033C 3082      CPI	R24,2
    033D F469      BNE	0x034B
    033E 91800066  LDS	R24,day
    0340 318E      CPI	R24,0x1E
    0341 F449      BNE	0x034B
(0254) 	{
(0255) 	 month++;
    0342 91800065  LDS	R24,month
    0344 5F8F      SUBI	R24,0xFF
    0345 93800065  STS	month,R24
(0256) 	 day=0;	 	 
    0347 2422      CLR	R2
    0348 92200066  STS	day,R2
(0257) 	}
    034A C0D3      RJMP	0x041E
(0258) 	else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
    034B E087      LDI	R24,7
    034C 90200065  LDS	R2,month
    034E 1582      CP	R24,R2
    034F F098      BCS	0x0363
    0350 E012      LDI	R17,2
    0351 2D02      MOV	R16,R2
    0352 940E05BC  CALL	mod8u
    0354 2300      TST	R16
    0355 F469      BNE	0x0363
    0356 91800066  LDS	R24,day
    0358 318F      CPI	R24,0x1F
    0359 F449      BNE	0x0363
(0259) 	{
(0260) 	 month++;
    035A 91800065  LDS	R24,month
    035C 5F8F      SUBI	R24,0xFF
    035D 93800065  STS	month,R24
(0261) 	 day=0;	  
    035F 2422      CLR	R2
    0360 92200066  STS	day,R2
(0262) 	}
    0362 C0BB      RJMP	0x041E
(0263) 	else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
    0363 E087      LDI	R24,7
    0364 90200065  LDS	R2,month
    0366 1582      CP	R24,R2
    0367 F098      BCS	0x037B
    0368 E012      LDI	R17,2
    0369 2D02      MOV	R16,R2
    036A 940E05BC  CALL	mod8u
    036C 2300      TST	R16
    036D F069      BEQ	0x037B
    036E 91800066  LDS	R24,day
    0370 3280      CPI	R24,0x20
    0371 F449      BNE	0x037B
(0264) 	{
(0265) 	 month++;
    0372 91800065  LDS	R24,month
    0374 5F8F      SUBI	R24,0xFF
    0375 93800065  STS	month,R24
(0266) 	 day=0;
    0377 2422      CLR	R2
    0378 92200066  STS	day,R2
(0267) 	}
    037A C0A3      RJMP	0x041E
(0268) 	else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
    037B E087      LDI	R24,7
    037C 90200065  LDS	R2,month
    037E 1582      CP	R24,R2
    037F F498      BCC	0x0393
    0380 E012      LDI	R17,2
    0381 2D02      MOV	R16,R2
    0382 940E05BC  CALL	mod8u
    0384 2300      TST	R16
    0385 F469      BNE	0x0393
    0386 91800066  LDS	R24,day
    0388 3280      CPI	R24,0x20
    0389 F449      BNE	0x0393
(0269) 	{
(0270) 	 month++;
    038A 91800065  LDS	R24,month
    038C 5F8F      SUBI	R24,0xFF
    038D 93800065  STS	month,R24
(0271) 	 day=0;	  
    038F 2422      CLR	R2
    0390 92200066  STS	day,R2
(0272) 	}
    0392 C08B      RJMP	0x041E
(0273) 	else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
    0393 E087      LDI	R24,7
    0394 90200065  LDS	R2,month
    0396 1582      CP	R24,R2
    0397 F008      BCS	0x0399
    0398 C085      RJMP	0x041E
    0399 E012      LDI	R17,2
    039A 2D02      MOV	R16,R2
    039B 940E05BC  CALL	mod8u
    039D 2300      TST	R16
    039E F409      BNE	0x03A0
    039F C07E      RJMP	0x041E
    03A0 91800066  LDS	R24,day
    03A2 318F      CPI	R24,0x1F
    03A3 F009      BEQ	0x03A5
    03A4 C079      RJMP	0x041E
(0274) 	{
(0275) 	 month++;
    03A5 91800065  LDS	R24,month
    03A7 5F8F      SUBI	R24,0xFF
    03A8 93800065  STS	month,R24
(0276) 	 day=0;
    03AA 2422      CLR	R2
    03AB 92200066  STS	day,R2
(0277) 	}	
(0278)    }
    03AD C070      RJMP	0x041E
(0279)    else if((month==2)&&(day==29))//不是闰年二月份是28天;
    03AE 91800065  LDS	R24,month
    03B0 3082      CPI	R24,2
    03B1 F469      BNE	0x03BF
    03B2 91800066  LDS	R24,day
    03B4 318D      CPI	R24,0x1D
    03B5 F449      BNE	0x03BF
(0280)    {
(0281)     month++;
    03B6 91800065  LDS	R24,month
    03B8 5F8F      SUBI	R24,0xFF
    03B9 93800065  STS	month,R24
(0282)     day=0;
    03BB 2422      CLR	R2
    03BC 92200066  STS	day,R2
(0283)    }
    03BE C05F      RJMP	0x041E
(0284)    else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
    03BF E087      LDI	R24,7
    03C0 90200065  LDS	R2,month
    03C2 1582      CP	R24,R2
    03C3 F098      BCS	0x03D7
    03C4 E012      LDI	R17,2
    03C5 2D02      MOV	R16,R2
    03C6 940E05BC  CALL	mod8u
    03C8 2300      TST	R16
    03C9 F469      BNE	0x03D7
    03CA 91800066  LDS	R24,day
    03CC 318F      CPI	R24,0x1F
    03CD F449      BNE	0x03D7
(0285)    {
(0286)     month++;
    03CE 91800065  LDS	R24,month
    03D0 5F8F      SUBI	R24,0xFF
    03D1 93800065  STS	month,R24
(0287)     day=0;	  
    03D3 2422      CLR	R2
    03D4 92200066  STS	day,R2
(0288)    }
    03D6 C047      RJMP	0x041E
(0289)    else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
    03D7 E087      LDI	R24,7
    03D8 90200065  LDS	R2,month
    03DA 1582      CP	R24,R2
    03DB F098      BCS	0x03EF
    03DC E012      LDI	R17,2
    03DD 2D02      MOV	R16,R2
    03DE 940E05BC  CALL	mod8u
    03E0 2300      TST	R16
    03E1 F069      BEQ	0x03EF
    03E2 91800066  LDS	R24,day
    03E4 3280      CPI	R24,0x20
    03E5 F449      BNE	0x03EF
(0290)    {
(0291)     month++;
    03E6 91800065  LDS	R24,month
    03E8 5F8F      SUBI	R24,0xFF
    03E9 93800065  STS	month,R24
(0292)     day=0;
    03EB 2422      CLR	R2
    03EC 92200066  STS	day,R2
(0293)    }
    03EE C02F      RJMP	0x041E
(0294)    else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
    03EF E087      LDI	R24,7
    03F0 90200065  LDS	R2,month
    03F2 1582      CP	R24,R2
    03F3 F498      BCC	0x0407
    03F4 E012      LDI	R17,2
    03F5 2D02      MOV	R16,R2
    03F6 940E05BC  CALL	mod8u
    03F8 2300      TST	R16
    03F9 F469      BNE	0x0407
    03FA 91800066  LDS	R24,day
    03FC 3280      CPI	R24,0x20
    03FD F449      BNE	0x0407
(0295)    {
(0296)     month++;
    03FE 91800065  LDS	R24,month
    0400 5F8F      SUBI	R24,0xFF
    0401 93800065  STS	month,R24
(0297)     day=0;	  
    0403 2422      CLR	R2
    0404 92200066  STS	day,R2
(0298)    }
    0406 C017      RJMP	0x041E
(0299)    else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
    0407 E087      LDI	R24,7
    0408 90200065  LDS	R2,month
    040A 1582      CP	R24,R2
    040B F490      BCC	0x041E
    040C E012      LDI	R17,2
    040D 2D02      MOV	R16,R2
    040E 940E05BC  CALL	mod8u
    0410 2300      TST	R16
    0411 F061      BEQ	0x041E
    0412 91800066  LDS	R24,day
    0414 318F      CPI	R24,0x1F
    0415 F441      BNE	0x041E
(0300)    {
(0301)     month++;
    0416 91800065  LDS	R24,month
    0418 5F8F      SUBI	R24,0xFF
    0419 93800065  STS	month,R24
(0302)     day=0;
    041B 2422      CLR	R2
    041C 92200066  STS	day,R2
(0303)    }
(0304)    if(month==13)
    041E 91800065  LDS	R24,month
    0420 308D      CPI	R24,0xD
    0421 F461      BNE	0x042E
(0305)    {
(0306)     year++;
    0422 91800063  LDS	R24,year
    0424 91900064  LDS	R25,year+1
    0426 9601      ADIW	R24,1
    0427 93900064  STS	year+1,R25
    0429 93800063  STS	year,R24
(0307)     month=0;
    042B 2422      CLR	R2
    042C 92200065  STS	month,R2
(0308)    }
(0309)    
(0310)   }
(0311)   
(0312)  
(0313)  TCNT1H = 0xC2; //reload counter high value
    042E EC82      LDI	R24,0xC2
    042F BD8D      OUT	0x2D,R24
(0314)  TCNT1L = 0xF7; //reload counter low value
    0430 EF87      LDI	R24,0xF7
    0431 BD8C      OUT	0x2C,R24
(0315)  WDR();
    0432 95A8      WDR
    0433 9029      LD	R2,Y+
    0434 BE2F      OUT	0x3F,R2
    0435 9199      LD	R25,Y+
    0436 9189      LD	R24,Y+
    0437 9139      LD	R19,Y+
    0438 9129      LD	R18,Y+
    0439 9119      LD	R17,Y+
    043A 9109      LD	R16,Y+
    043B 9029      LD	R2,Y+
    043C 9518      RETI
_int0_isr:
    043D 940E05F6  CALL	push_lset
(0316) }
(0317) //******************************************************************
(0318) //每按一次时间设定键,其值加1,在正常情况下为0,每加1代表要修改的位置变化一次;
(0319) #pragma interrupt_handler int0_isr:2
(0320) void int0_isr(void)
(0321) {
(0322)  //external interupt on INT0 
(0323)  WDR();
    043F 95A8      WDR
(0324)  GICR=0X40;     //清除INT0中断,延时20MS判断是否为干扰;
    0440 E480      LDI	R24,0x40
    0441 BF8B      OUT	0x3B,R24
(0325)  delay_ms(20); 
    0442 E104      LDI	R16,0x14
    0443 E010      LDI	R17,0
    0444 DC54      RCALL	_delay_ms
(0326)  if((PIND&0x04)==0x00)
    0445 9982      SBIC	0x10,2
    0446 C00C      RJMP	0x0453
(0327)  {
(0328)   time_set++;         //不是干扰,加1
    0447 91800068  LDS	R24,time_set
    0449 5F8F      SUBI	R24,0xFF
    044A 93800068  STS	time_set,R24
(0329)   if(time_set==7)//超过6次就返回正常状态;
    044C 3087      CPI	R24,7
    044D F429      BNE	0x0453
(0330)   {
(0331)    time_set=0;
    044E 2422      CLR	R2
    044F 92200068  STS	time_set,R2
(0332)   }
(0333)  }
    0451 C001      RJMP	0x0453
(0334)  while((PIND&0x04)==0x00)//判断按键是否释放;
(0335)  {
(0336)   WDR();      //一定要在判断按键释放循环中喂狗;
    0452 95A8      WDR
    0453 9B82      SBIS	0x10,2
    0454 CFFD      RJMP	0x0452
(0337)  }
(0338)  GICR=0XC0;//恢复中断INT0
    0455 EC80      LDI	R24,0xC0
    0456 BF8B      OUT	0x3B,R24
    0457 940E060D  CALL	pop_lset
    0459 9518      RETI
_int1_isr:
    045A 940E05F6  CALL	push_lset
    045C 940E05DF  CALL	push_gset1
(0339) }
(0340) //******************************************************************
(0341) //当time_set在某位时,单击此按键加一;
(0342) #pragma interrupt_handler int1_isr:3
(0343) void int1_isr(void)
(0344) {
(0345)  //external interupt on INT1
(0346)  WDR();
    045E 95A8      WDR
(0347)  GICR=0X80;
    045F E880      LDI	R24,0x80
    0460 BF8B      OUT	0x3B,R24
(0348)  delay_ms(20); 
    0461 E104      LDI	R16,0x14
    0462 E010      LDI	R17,0
    0463 DC35      RCALL	_delay_ms
(0349)  if((PIND&0x08)==0x00)
    0464 9983      SBIC	0x10,3
    0465 C131      RJMP	0x0597

⌨️ 快捷键说明

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