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

📄 sle4442.lst

📁 万年历挂钟系统源程序,附语句模块功能说明,iccavr环境编程
💻 LST
📖 第 1 页 / 共 5 页
字号:
    031E F430      BCC	0x0325
    031F 2D83      MOV	R24,R3
    0320 508A      SUBI	R24,0xA
    0321 878A      STD	Y+10,R24
    0322 8589      LDD	R24,Y+9
    0323 5F8F      SUBI	R24,0xFF
    0324 8789      STD	Y+9,R24
(0364) 	 
(0365) 	 WriteMainMemory(41,temp[9]);
    0325 8529      LDD	R18,Y+9
    0326 E209      LDI	R16,0x29
    0327 DE3D      RCALL	_WriteMainMemory
(0366) 	 WriteMainMemory(42,temp[10]);
    0328 852A      LDD	R18,Y+10
    0329 E20A      LDI	R16,0x2A
    032A DE3A      RCALL	_WriteMainMemory
(0367) 	 WriteMainMemory(43,temp[11]);
    032B 852B      LDD	R18,Y+11
    032C E20B      LDI	R16,0x2B
    032D DE37      RCALL	_WriteMainMemory
(0368) 	 WriteMainMemory(44,temp[12]);
    032E 852C      LDD	R18,Y+12
    032F E20C      LDI	R16,0x2C
    0330 DE34      RCALL	_WriteMainMemory
(0369)      WriteMainMemory(45,temp[13]);
    0331 852D      LDD	R18,Y+13
    0332 E20D      LDI	R16,0x2D
    0333 DE31      RCALL	_WriteMainMemory
(0370) 	}
(0371) }
    0334 962E      ADIW	R28,0xE
    0335 D2C3      RCALL	pop_gset2
    0336 9508      RET
_Sub_Card:
  i                    --> R22
  B_Flag               --> R22
  temp                 --> Y+0
  p                    --> R20
    0337 D2DE      RCALL	push_gset2
    0338 2F40      MOV	R20,R16
    0339 2F51      MOV	R21,R17
    033A 972E      SBIW	R28,0xE
(0372) 
(0373) //********************减卡函数***********//
(0374) void Sub_Card(uchar *p)
(0375) {uchar i,B_Flag;
(0376)  uchar temp[14];
(0377)  i=Read_Card(temp);
    033B 2F0C      MOV	R16,R28
    033C 2F1D      MOV	R17,R29
    033D DEE9      RCALL	_Read_Card
    033E 2F60      MOV	R22,R16
(0378)  if((i==3)&&(!(temp[9]<p[0])))
    033F 3003      CPI	R16,3
    0340 F009      BEQ	0x0342
    0341 C09E      RJMP	0x03E0
    0342 2FE4      MOV	R30,R20
    0343 2FF5      MOV	R31,R21
    0344 8020      LDD	R2,Z+0
    0345 8439      LDD	R3,Y+9
    0346 1432      CP	R3,R2
    0347 F408      BCC	0x0349
    0348 C097      RJMP	0x03E0
(0379)  	{if(temp[13]<p[4]) {temp[13]=temp[13]+10-p[4];B_Flag=1;}
    0349 8024      LDD	R2,Z+4
    034A 843D      LDD	R3,Y+13
    034B 1432      CP	R3,R2
    034C F448      BCC	0x0356
    034D 2FE4      MOV	R30,R20
    034E 2FF5      MOV	R31,R21
    034F 8024      LDD	R2,Z+4
    0350 2D83      MOV	R24,R3
    0351 5F86      SUBI	R24,0xF6
    0352 1982      SUB	R24,R2
    0353 878D      STD	Y+13,R24
    0354 E061      LDI	R22,1
    0355 C006      RJMP	0x035C
(0380) 	 else temp[13]=temp[13]-p[4];
    0356 2FE4      MOV	R30,R20
    0357 2FF5      MOV	R31,R21
    0358 8024      LDD	R2,Z+4
    0359 843D      LDD	R3,Y+13
    035A 1832      SUB	R3,R2
    035B 863D      STD	Y+13,R3
(0381) 	 //以上处理小数点右边的数字;
(0382) 	 if(B_Flag==1)
    035C 3061      CPI	R22,1
    035D F451      BNE	0x0368
(0383) 	  {if(temp[12]==0) {temp[12]=9;B_Flag=0;}
    035E 842C      LDD	R2,Y+12
    035F 2022      TST	R2
    0360 F421      BNE	0x0365
    0361 E089      LDI	R24,0x9
    0362 878C      STD	Y+12,R24
    0363 2766      CLR	R22
    0364 C003      RJMP	0x0368
(0384) 	   else temp[12]=temp[12]-1;}
    0365 858C      LDD	R24,Y+12
    0366 5081      SUBI	R24,1
    0367 878C      STD	Y+12,R24
(0385) 	 //以上对存在借位情况时对小数点左边第一位进行预处理;
(0386) 	 if(temp[12]<p[3]) {temp[12]=temp[12]+10-p[3];B_Flag=1;}
    0368 2FE4      MOV	R30,R20
    0369 2FF5      MOV	R31,R21
    036A 8023      LDD	R2,Z+3
    036B 843C      LDD	R3,Y+12
    036C 1432      CP	R3,R2
    036D F448      BCC	0x0377
    036E 2FE4      MOV	R30,R20
    036F 2FF5      MOV	R31,R21
    0370 8023      LDD	R2,Z+3
    0371 2D83      MOV	R24,R3
    0372 5F86      SUBI	R24,0xF6
    0373 1982      SUB	R24,R2
    0374 878C      STD	Y+12,R24
    0375 E061      LDI	R22,1
    0376 C006      RJMP	0x037D
(0387) 	 else temp[12]=temp[12]-p[3];
    0377 2FE4      MOV	R30,R20
    0378 2FF5      MOV	R31,R21
    0379 8023      LDD	R2,Z+3
    037A 843C      LDD	R3,Y+12
    037B 1832      SUB	R3,R2
    037C 863C      STD	Y+12,R3
(0388) 	 //以上处理小数点小数点左边第一位数字; 
(0389) 	  if(B_Flag==1)
    037D 3061      CPI	R22,1
    037E F451      BNE	0x0389
(0390) 	  {if(temp[11]==0) {temp[11]=9;B_Flag=0;}
    037F 842B      LDD	R2,Y+11
    0380 2022      TST	R2
    0381 F421      BNE	0x0386
    0382 E089      LDI	R24,0x9
    0383 878B      STD	Y+11,R24
    0384 2766      CLR	R22
    0385 C003      RJMP	0x0389
(0391) 	   else temp[11]=temp[11]-1;}
    0386 858B      LDD	R24,Y+11
    0387 5081      SUBI	R24,1
    0388 878B      STD	Y+11,R24
(0392) 	 //以上对存在借位情况时对小数点左边第二位进行预处理;
(0393) 	  if(temp[11]<p[2]) {temp[11]=temp[11]+10-p[2];B_Flag=1;}
    0389 2FE4      MOV	R30,R20
    038A 2FF5      MOV	R31,R21
    038B 8022      LDD	R2,Z+2
    038C 843B      LDD	R3,Y+11
    038D 1432      CP	R3,R2
    038E F448      BCC	0x0398
    038F 2FE4      MOV	R30,R20
    0390 2FF5      MOV	R31,R21
    0391 8022      LDD	R2,Z+2
    0392 2D83      MOV	R24,R3
    0393 5F86      SUBI	R24,0xF6
    0394 1982      SUB	R24,R2
    0395 878B      STD	Y+11,R24
    0396 E061      LDI	R22,1
    0397 C006      RJMP	0x039E
(0394) 	  else temp[11]=temp[11]-p[2];
    0398 2FE4      MOV	R30,R20
    0399 2FF5      MOV	R31,R21
    039A 8022      LDD	R2,Z+2
    039B 843B      LDD	R3,Y+11
    039C 1832      SUB	R3,R2
    039D 863B      STD	Y+11,R3
(0395) 	 //以上处理小数点小数点左边第二位数字; 
(0396) 	  if(B_Flag==1)
    039E 3061      CPI	R22,1
    039F F451      BNE	0x03AA
(0397) 	  {if(temp[10]==0) {temp[10]=9;B_Flag=0;}
    03A0 842A      LDD	R2,Y+10
    03A1 2022      TST	R2
    03A2 F421      BNE	0x03A7
    03A3 E089      LDI	R24,0x9
    03A4 878A      STD	Y+10,R24
    03A5 2766      CLR	R22
    03A6 C003      RJMP	0x03AA
(0398) 	   else temp[10]=temp[10]-1;}
    03A7 858A      LDD	R24,Y+10
    03A8 5081      SUBI	R24,1
    03A9 878A      STD	Y+10,R24
(0399) 	 //以上对存在借位情况时对小数点左边第三位进行预处理;
(0400) 	  if(temp[10]<p[1]) {temp[10]=temp[10]+10-p[1];B_Flag=1;}
    03AA 2FE4      MOV	R30,R20
    03AB 2FF5      MOV	R31,R21
    03AC 8021      LDD	R2,Z+1
    03AD 843A      LDD	R3,Y+10
    03AE 1432      CP	R3,R2
    03AF F448      BCC	0x03B9
    03B0 2FE4      MOV	R30,R20
    03B1 2FF5      MOV	R31,R21
    03B2 8021      LDD	R2,Z+1
    03B3 2D83      MOV	R24,R3
    03B4 5F86      SUBI	R24,0xF6
    03B5 1982      SUB	R24,R2
    03B6 878A      STD	Y+10,R24
    03B7 E061      LDI	R22,1
    03B8 C006      RJMP	0x03BF
(0401) 	  else temp[10]=temp[10]-p[1];
    03B9 2FE4      MOV	R30,R20
    03BA 2FF5      MOV	R31,R21
    03BB 8021      LDD	R2,Z+1
    03BC 843A      LDD	R3,Y+10
    03BD 1832      SUB	R3,R2
    03BE 863A      STD	Y+10,R3
(0402) 	 //以上处理小数点小数点左边第三位数字;
(0403) 	  if(B_Flag==1)
    03BF 3061      CPI	R22,1
    03C0 F451      BNE	0x03CB
(0404) 	  {if(temp[9]==0) {temp[9]=0;B_Flag=0;}
    03C1 8429      LDD	R2,Y+9
    03C2 2022      TST	R2
    03C3 F421      BNE	0x03C8
    03C4 2422      CLR	R2
    03C5 8629      STD	Y+9,R2
    03C6 2766      CLR	R22
    03C7 C003      RJMP	0x03CB
(0405) 	   else temp[9]=temp[9]-1;}
    03C8 8589      LDD	R24,Y+9
    03C9 5081      SUBI	R24,1
    03CA 8789      STD	Y+9,R24
(0406) 	 //以上对存在借位情况时对小数点左边第二位进行预处理;
(0407) 	  temp[9]=temp[9]-p[0];
    03CB 2FE4      MOV	R30,R20
    03CC 2FF5      MOV	R31,R21
    03CD 8020      LDD	R2,Z+0
    03CE 8439      LDD	R3,Y+9
    03CF 1832      SUB	R3,R2
    03D0 8639      STD	Y+9,R3
(0408) 	 //以上处理小数点小数点左边第二位数字;
(0409)      
(0410) 	 WriteMainMemory(41,temp[9]);
    03D1 2D23      MOV	R18,R3
    03D2 E209      LDI	R16,0x29
    03D3 DD91      RCALL	_WriteMainMemory
(0411) 	 WriteMainMemory(42,temp[10]);
    03D4 852A      LDD	R18,Y+10
    03D5 E20A      LDI	R16,0x2A
    03D6 DD8E      RCALL	_WriteMainMemory
(0412) 	 WriteMainMemory(43,temp[11]);
    03D7 852B      LDD	R18,Y+11
    03D8 E20B      LDI	R16,0x2B
    03D9 DD8B      RCALL	_WriteMainMemory
(0413) 	 WriteMainMemory(44,temp[12]);
    03DA 852C      LDD	R18,Y+12
    03DB E20C      LDI	R16,0x2C
    03DC DD88      RCALL	_WriteMainMemory
(0414)      WriteMainMemory(45,temp[13]);
    03DD 852D      LDD	R18,Y+13
    03DE E20D      LDI	R16,0x2D
    03DF DD85      RCALL	_WriteMainMemory
(0415) 	}
(0416) }
    03E0 962E      ADIW	R28,0xE
    03E1 D217      RCALL	pop_gset2
    03E2 9508      RET
_Display:
  i                    --> R20
  sel                  --> R22
  p                    --> R10
    03E3 D235      RCALL	push_gset3
    03E4 2EA0      MOV	R10,R16
    03E5 2EB1      MOV	R11,R17
(0417)  
(0418) //*****************数码管显示函数********************//
(0419) void Display(uchar *p)
(0420) {uchar sel,i;
(0421)  sel=0x01;
    03E6 E061      LDI	R22,1
(0422)  for(i=0;i<6;i++)
    03E7 2744      CLR	R20
    03E8 C012      RJMP	0x03FB
(0423)    {PORTA=table[p[i]];
    03E9 2FE4      MOV	R30,R20
    03EA 27FF      CLR	R31
    03EB 0DEA      ADD	R30,R10
    03EC 1DFB      ADC	R31,R11
    03ED 81E0      LDD	R30,Z+0
    03EE 27FF      CLR	R31
    03EF E680      LDI	R24,0x60
    03F0 E090      LDI	R25,0
    03F1 0FE8      ADD	R30,R24
    03F2 1FF9      ADC	R31,R25
    03F3 8020      LDD	R2,Z+0
    03F4 BA2B      OUT	0x1B,R2
(0424)     PORTB=sel;
    03F5 BB68      OUT	0x18,R22
(0425) 	DelayMs(2);
    03F6 E002      LDI	R16,2
    03F7 E010      LDI	R17,0
    03F8 DC71      RCALL	_DelayMs
(0426) 	sel=sel<<1;}
    03F9 0F66      LSL	R22
    03FA 9543      INC	R20
    03FB 3046      CPI	R20,6
    03FC F360      BCS	0x03E9
(0427) }
    03FD D1FD      RCALL	pop_gset3
    03FE 9508      RET
_Key_Scan:
  recode               --> R20
  sccode               --> R22
    03FF D216      RCALL	push_gset2
(0428)  
(0429) 
(0430) //****************键盘扫描函数***********************//
(0431) uchar Key_Scan(void)
(0432) {uchar sccode,recode;
(0433)  PORTC=0xf0;
    0400 EF80      LDI	R24,0xF0
    0401 BB85      OUT	0x15,R24
(0434)  if((PINC&0xf0)!=0xf0)
    0402 B383      IN	R24,0x13
    0403 7F80      ANDI	R24,0xF0
    0404 3F80      CPI	R24,0xF0
    0405 F0D9      BEQ	0x0421
(0435)  	{DelayMs(10);
    0406 E00A      LDI	R16,0xA
    0407 E010      LDI	R17,0
    0408 DC61      RCALL	_DelayMs
(0436) 	 if((PINC&0xf0)!=0xf0)
    0409 B383      IN	R24,0x13
    040A 7F80      ANDI	R24,0xF0
    040B 3F80      CPI	R24,0xF0
    040C F0A1      BEQ	0x0421
(0437) 	   {sccode=0xfe;
    040D EF6E      LDI	R22,0xFE
    040E C010      RJMP	0x041F
(0438) 	    while(sccode&0x10!=0x00)
(0439)          {PORTC=sccode; //对第一行键盘测试
    040F BB65      OUT	0x15,R22
(0440) 		  if((PINC&0xf0)!=0xf0)
    0410 B383      IN	R24,0x13
    0411 7F80      ANDI	R24,0xF0
    0412 3F80      CPI	R24,0xF0
    0413 F049      BEQ	0x041D
(0441) 		   {recode=(PINC&0xf0)|0x0f;
    0414 B343      IN	R20,0x13
    0415 7F40      ANDI	R20,0xF0
    0416 604F      ORI	R20,0xF
(0442) 		    return((~sccode)+(~recode));}
    0417 2E24      MOV	R2,R20
    0418 9420      COM	R2
    0419 2F06      MOV	R16,R22
    041A 9500      COM	R16
    041B 0D02      ADD	R16,R2
    041C C005      RJMP	0x0422
(0443) 		  else 
(0444) 		   sccode=(sccode<<1)|0x01;
    041D 0F66      LSL	R22
    041E 6061      ORI	R22,1
    041F FD60      SBRC	R22,0
    0420 CFEE      RJMP	0x040F
(0445) 	     }
(0446) 	   }
(0447) 	 }
(0448)  return(0x00);
    0421 2700      CLR	R16
    0422 D1D6      RCALL	pop_gset2
    0423 9508      RET
_Key_Process:
  value                --> R22
  temp                 --> R22
  p                    --> R20
    0424 D1F1      RCALL	push_gset2
    0425 2F40      MOV	R20,R16
    0426 2F51      MOV	R21,R17
(0449) }
(0450) 		 
(0451) //******************按键处理函数*******************//
(0452) void Key_Process(uchar *p)
(0453) {uchar temp,value;
(0454)  temp=Key_Scan();
    0427 DFD7      RCALL	_Key_Scan
    0428 2F60      MOV	R22,R16
(0455)  switch(temp)
    0429 2777      CLR	R23
    042A 3261      CPI	R22,0x21
    042B E0E0      LDI	R30,0
    042C 077E      CPC	R23,R30
    042D F409      BNE	0x042F
    042E C05C      RJMP	0x048B
    042F 3262      CPI	R22,0x22
    0430 E0E0      LDI	R30,0
    0431 077E      CPC	R23,R30
    0432 F409      BNE	0x0434
    0433 C066      RJMP	0x049A
    0434 3264      CPI	R22,0x24
    0435 E0E0      LDI	R30,0
    0436 077E      CPC	R23,R30
    0437 F409      BNE	0x0439
    0438 C070      RJMP	0x04A9
    0439 3268      CPI	R22,0x28
    043A E0E0      LDI	R30,0
    043B 077E      CPC	R23,R30
    043C F409      BNE	0x043E
    043D C07A      RJMP	0x04B8
    043E E288      LDI	R24,0x28
    043F E090      LDI	R25,0
    0440 1786      CP	R24,R22
    0441 0797      CPC	R25,R23
    0442 F0AC      BLT	0x0458
    0443 3161      CPI	R22,0x11
    0444 E0E0      LDI	R30,0
    0445 077E      CPC	R23,R30
    0446 F409      BNE	0x0448
    0447 C03E      RJMP	0x0486
    0448 3162      CPI	R22,0x12
    0449 E0E0      LDI	R30,0

⌨️ 快捷键说明

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