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

📄 ds12887.lst

📁 高精度时钟芯片。avr驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0364)     write_ds(chRegB,chRegB | MASK_SETB_SET);        /* 禁止刷新 */
    01B0 E82B      LDI	R18,0x8B
    01B1 E00B      LDI	R16,0xB
    01B2 DF8E      RCALL	_write_ds
(0365) 	write_ds(chDateChannel,chDate);
    01B3 2F26      MOV	R18,R22
    01B4 E007      LDI	R16,7
    01B5 DF8B      RCALL	_write_ds
(0366)     write_ds(chMonthChannel,chMonth);
    01B6 2F24      MOV	R18,R20
    01B7 E008      LDI	R16,0x8
    01B8 DF88      RCALL	_write_ds
(0367)     write_ds(chYearChannel,chYear);
    01B9 812C      LDD	R18,4+Y
    01BA E009      LDI	R16,0x9
    01BB DF85      RCALL	_write_ds
(0368)     write_ds(chRegB,chRegB & MASK_CLR_SET);           /* 使能刷新 */
    01BC E02B      LDI	R18,0xB
    01BD E00B      LDI	R16,0xB
    01BE DF82      RCALL	_write_ds
(0369) }     
    01BF 940E02EA  CALL	pop_gset2
    01C1 9508      RET
(0370) 
(0371) /*******************************************************************/
(0372) /*                                                                 */
(0373) /* 时间 正常显示菜单                                            */
(0374) /*                                                                 */
(0375) /*******************************************************************/
(0376) void  Natural_Menu ()
(0377) {
(0378)    uchar  m;
(0379)    LCD1602_initial();                //初始化LCD 
_Natural_Menu:
  m                    --> Y+1
    01C2 DF67      RCALL	_LCD1602_initial
(0380)    LCD1602_gotoXY(1,0);          //设置显示位置为第一行的第1个字符
    01C3 2722      CLR	R18
    01C4 E001      LDI	R16,1
    01C5 DF4E      RCALL	_LCD1602_gotoXY
(0381)    LCD1602_sendstr("DATE: 2008-08-08");
    01C6 E801      LDI	R16,0x81
    01C7 E010      LDI	R17,0
    01C8 DF27      RCALL	_LCD1602_sendstr
(0382) //   for(m=0;m<16;m++) 
(0383) //   LCD1602_sendbyte(iDat,cdis1[m]);
(0384) 
(0385)    LCD1602_gotoXY(2,0);             //设置显示位置为第二行第1个字符
    01C9 2722      CLR	R18
    01CA E002      LDI	R16,2
    01CB DF48      RCALL	_LCD1602_gotoXY
(0386)    LCD1602_sendstr("TIME: 08: 08: 08");
    01CC E700      LDI	R16,0x70
    01CD E010      LDI	R17,0
(0387) //   for(m=0;m<16;m++) 
(0388) //   LCD1602_sendbyte(iDat,cdis2[m]);        //显示字符
(0389) } 
    01CE CF21      RJMP	_LCD1602_sendstr
(0390) /*******************************************************************/
(0391) /*                                                                 */
(0392) /* 日期 正常显示数据                                            */
(0393) /*                                                                 */
(0394) /*******************************************************************/
(0395) void daydis()
(0396) {
(0397) 	display[0]=(temp_data1[0]>>4)+0x30;
_daydis:
    01CF 91800060  LDS	R24,__idata_start
    01D1 9582      SWAP	R24
    01D2 708F      ANDI	R24,0xF
    01D3 5D80      SUBI	R24,0xD0
    01D4 93800066  STS	R24,0x66
(0398) 	display[1]=(temp_data1[0]&0x0F)+0x30;
    01D6 91800060  LDS	R24,__idata_start
    01D8 708F      ANDI	R24,0xF
    01D9 5D80      SUBI	R24,0xD0
    01DA 93800067  STS	R24,0x67
(0399) 	display[2]=(temp_data1[1]>>4)+0x30;
    01DC 91800061  LDS	R24,__idata_start+1
    01DE 9582      SWAP	R24
    01DF 708F      ANDI	R24,0xF
    01E0 5D80      SUBI	R24,0xD0
    01E1 93800068  STS	R24,0x68
(0400) 	display[3]=(temp_data1[1]&0x0F)+0x30;
    01E3 91800061  LDS	R24,__idata_start+1
    01E5 708F      ANDI	R24,0xF
    01E6 5D80      SUBI	R24,0xD0
    01E7 93800069  STS	R24,0x69
(0401) 	display[4]=(temp_data1[2]>>4)+0x30;
    01E9 91800062  LDS	R24,__idata_start+2
    01EB 9582      SWAP	R24
    01EC 708F      ANDI	R24,0xF
    01ED 5D80      SUBI	R24,0xD0
    01EE 9380006A  STS	R24,0x6A
(0402) 	display[5]=(temp_data1[2]&0x0F)+0x30;
    01F0 91800062  LDS	R24,__idata_start+2
    01F2 708F      ANDI	R24,0xF
    01F3 5D80      SUBI	R24,0xD0
    01F4 9380006B  STS	R24,0x6B
(0403) 	
(0404) 	LCD1602_gotoXY(1,8);
    01F6 E028      LDI	R18,0x8
    01F7 E001      LDI	R16,1
    01F8 DF1B      RCALL	_LCD1602_gotoXY
(0405) 	LCD1602_sendbyte(iDat,display[0]); 
    01F9 91200066  LDS	R18,0x66
    01FB E001      LDI	R16,1
    01FC DEE0      RCALL	_LCD1602_sendbyte
(0406) 	LCD1602_sendbyte(iDat,display[1]);
    01FD 91200067  LDS	R18,0x67
    01FF E001      LDI	R16,1
    0200 DEDC      RCALL	_LCD1602_sendbyte
(0407) 	LCD1602_gotoXY(1,11);
    0201 E02B      LDI	R18,0xB
    0202 E001      LDI	R16,1
    0203 DF10      RCALL	_LCD1602_gotoXY
(0408) 	LCD1602_sendbyte(iDat,display[2]);
    0204 91200068  LDS	R18,0x68
    0206 E001      LDI	R16,1
    0207 DED5      RCALL	_LCD1602_sendbyte
(0409) 	LCD1602_sendbyte(iDat,display[3]);
    0208 91200069  LDS	R18,0x69
    020A E001      LDI	R16,1
    020B DED1      RCALL	_LCD1602_sendbyte
(0410) 	LCD1602_gotoXY(1,14);
    020C E02E      LDI	R18,0xE
    020D E001      LDI	R16,1
    020E DF05      RCALL	_LCD1602_gotoXY
(0411) 	LCD1602_sendbyte(iDat,display[4]);
    020F 9120006A  LDS	R18,0x6A
    0211 E001      LDI	R16,1
    0212 DECA      RCALL	_LCD1602_sendbyte
(0412) 	LCD1602_sendbyte(iDat,display[5]);
    0213 9120006B  LDS	R18,0x6B
    0215 E001      LDI	R16,1
(0413) 
(0414) }
    0216 CEC6      RJMP	_LCD1602_sendbyte
(0415) /*******************************************************************/
(0416) /*                                                                 */
(0417) /* 时间 正常显示数据                                            */
(0418) /*                                                                 */
(0419) /*******************************************************************/
(0420) void timedis()
(0421) {
(0422) 	display[0]=(temp_data2[0]>>4)+0x30;
_timedis:
    0217 91800063  LDS	R24,__idata_start+3
    0219 9582      SWAP	R24
    021A 708F      ANDI	R24,0xF
    021B 5D80      SUBI	R24,0xD0
    021C 93800066  STS	R24,0x66
(0423) 	display[1]=(temp_data2[0]&0x0F)+0x30;
    021E 91800063  LDS	R24,__idata_start+3
    0220 708F      ANDI	R24,0xF
    0221 5D80      SUBI	R24,0xD0
    0222 93800067  STS	R24,0x67
(0424) 	display[2]=(temp_data2[1]>>4)+0x30;
    0224 91800064  LDS	R24,0x64
    0226 9582      SWAP	R24
    0227 708F      ANDI	R24,0xF
    0228 5D80      SUBI	R24,0xD0
    0229 93800068  STS	R24,0x68
(0425) 	display[3]=(temp_data2[1]&0x0F)+0x30;
    022B 91800064  LDS	R24,0x64
    022D 708F      ANDI	R24,0xF
    022E 5D80      SUBI	R24,0xD0
    022F 93800069  STS	R24,0x69
(0426) 	display[4]=(temp_data2[2]>>4)+0x30;
    0231 91800065  LDS	R24,0x65
    0233 9582      SWAP	R24
    0234 708F      ANDI	R24,0xF
    0235 5D80      SUBI	R24,0xD0
    0236 9380006A  STS	R24,0x6A
(0427) 	display[5]=(temp_data2[2]&0x0F)+0x30;
    0238 91800065  LDS	R24,0x65
    023A 708F      ANDI	R24,0xF
    023B 5D80      SUBI	R24,0xD0
    023C 9380006B  STS	R24,0x6B
(0428) 	LCD1602_gotoXY(2,6); 
    023E E026      LDI	R18,6
    023F E002      LDI	R16,2
    0240 DED3      RCALL	_LCD1602_gotoXY
(0429) 	LCD1602_sendbyte(iDat,display[0]); 
    0241 91200066  LDS	R18,0x66
    0243 E001      LDI	R16,1
    0244 DE98      RCALL	_LCD1602_sendbyte
(0430) 	LCD1602_sendbyte(iDat,display[1]);
    0245 91200067  LDS	R18,0x67
    0247 E001      LDI	R16,1
    0248 DE94      RCALL	_LCD1602_sendbyte
(0431) 	LCD1602_gotoXY(2,10);
    0249 E02A      LDI	R18,0xA
    024A E002      LDI	R16,2
    024B DEC8      RCALL	_LCD1602_gotoXY
(0432) 	LCD1602_sendbyte(iDat,display[2]);
    024C 91200068  LDS	R18,0x68
    024E E001      LDI	R16,1
    024F DE8D      RCALL	_LCD1602_sendbyte
(0433) 	LCD1602_sendbyte(iDat,display[3]);
    0250 91200069  LDS	R18,0x69
    0252 E001      LDI	R16,1
    0253 DE89      RCALL	_LCD1602_sendbyte
(0434) 	LCD1602_gotoXY(2,14);
    0254 E02E      LDI	R18,0xE
    0255 E002      LDI	R16,2
    0256 DEBD      RCALL	_LCD1602_gotoXY
(0435) 	LCD1602_sendbyte(iDat,display[4]);
    0257 9120006A  LDS	R18,0x6A
    0259 E001      LDI	R16,1
    025A DE82      RCALL	_LCD1602_sendbyte
(0436) 	LCD1602_sendbyte(iDat,display[5]);
    025B 9120006B  LDS	R18,0x6B
    025D E001      LDI	R16,1
(0437) 	
(0438) 
(0439) }
    025E CE7E      RJMP	_LCD1602_sendbyte
_main:
  sec_bak              --> R20
  sec                  --> R22
    025F 9721      SBIW	R28,1
(0440) 
(0441) /************************************************************* 
(0442) 函数功能:主函数
(0443) 应用范围:
(0444) 入口参数:
(0445) 出口参数:
(0446) *************************************************************/  
(0447) void main(void)
(0448) {
(0449) 	unsigned char sec,sec_bak=sec;
    0260 2F46      MOV	R20,R22
(0450) 	Board_init();
    0261 DE36      RCALL	_Board_init
(0451) 	PORTA=0XFF;
    0262 EF8F      LDI	R24,0xFF
    0263 BB8B      OUT	P1B,R24
(0452) 	PORTC=0X1F;
    0264 E18F      LDI	R24,0x1F
    0265 BB85      OUT	P15,R24
(0453) 	InitDs12c887();
    0266 DF14      RCALL	_InitDs12c887
(0454) 	SetDate(0x15,0x10,0x08);
    0267 E088      LDI	R24,0x8
    0268 8388      STD	R24,0+Y
    0269 E120      LDI	R18,0x10
    026A E105      LDI	R16,0x15
    026B DF40      RCALL	_SetDate
(0455) 	SetTime(0x10,0x10,0x11);	
    026C E181      LDI	R24,0x11
    026D 8388      STD	R24,0+Y
    026E E120      LDI	R18,0x10
    026F E100      LDI	R16,0x10
    0270 DF25      RCALL	_SetTime
(0456) 	Natural_Menu ();
    0271 DF50      RCALL	_Natural_Menu
(0457) 	PORTD=0xFF;
    0272 EF8F      LDI	R24,0xFF
    0273 BB82      OUT	P12,R24
    0274 C033      RJMP	0x02A8
(0458) 
(0459) 	
(0460) 	while(1)
(0461) 	{
(0462) 		PORTC&=0X1F;
    0275 B385      IN	R24,P15
    0276 718F      ANDI	R24,0x1F
    0277 BB85      OUT	P15,R24
(0463) 		sec=GetSeconds();
    0278 DF0F      RCALL	_GetSeconds
    0279 2F60      MOV	R22,R16
(0464) 
(0465) 		if(sec!=sec_bak)
    027A 1704      CP	R16,R20
    027B F161      BEQ	0x02A8
(0466) 		{
(0467) 		 				
(0468) 			sec_bak=sec;
    027C 2F46      MOV	R20,R22
(0469) 			temp_data1[0]=GetYear();
    027D DF14      RCALL	_GetYear
    027E 93000060  STS	R16,__idata_start
(0470) 			temp_data1[1]=GetMonth();
    0280 DF0F      RCALL	_GetMonth
    0281 93000061  STS	R16,__idata_start+1
(0471) 			temp_data1[2]=GetDate();
    0283 DF0A      RCALL	_GetDate
    0284 93000062  STS	R16,__idata_start+2
(0472) 			temp_data2[0]=GetHours();
    0286 DF05      RCALL	_GetHours
    0287 93000063  STS	R16,__idata_start+3
(0473) 			temp_data2[1]=GetMinutes();
    0289 DF00      RCALL	_GetMinutes
    028A 93000064  STS	R16,0x64
(0474) 			temp_data2[2]=GetSeconds();
    028C DEFB      RCALL	_GetSeconds
    028D 93000065  STS	R16,0x65
(0475) 			daydis();
    028F DF3F      RCALL	_daydis
(0476) 			timedis();
    0290 DF86      RCALL	_timedis
(0477) 			if(sec%2)
    0291 E012      LDI	R17,2
    0292 2F06      MOV	R16,R22
    0293 940E02AB  CALL	mod8u
    0295 2300      TST	R16
    0296 F041      BEQ	0x029F
(0478) 			{
(0479) 				LCD1602_gotoXY(2,12);
    0297 E02C      LDI	R18,0xC
    0298 E002      LDI	R16,2
    0299 DE7A      RCALL	_LCD1602_gotoXY
(0480) 				LCD1602_sendstr(" ");
    029A E60E      LDI	R16,0x6E
    029B E010      LDI	R17,0
    029C DE53      RCALL	_LCD1602_sendstr
(0481) 				PORTC|=BIT(PC3);
    029D 9AAB      SBI	P15,3
(0482) 			}
    029E C007      RJMP	0x02A6
(0483) 			else
(0484) 			{
(0485) 				LCD1602_gotoXY(2,12);
    029F E02C      LDI	R18,0xC
    02A0 E002      LDI	R16,2
    02A1 DE72      RCALL	_LCD1602_gotoXY
(0486) 				LCD1602_sendstr(":");
    02A2 E60C      LDI	R16,0x6C
    02A3 E010      LDI	R17,0
    02A4 DE4B      RCALL	_LCD1602_sendstr
(0487) 				PORTC&=~BIT(PC3);
    02A5 98AB      CBI	P15,3
(0488) 			}
(0489) 			PORTD=0xFF;
    02A6 EF8F      LDI	R24,0xFF
    02A7 BB82      OUT	P12,R24
    02A8 CFCC      RJMP	0x0275
(0490) 		}
(0491) 	}
(0492) 
(0493) 
(0494) }
FILE: <library>
    02A9 9621      ADIW	R28,1
    02AA 9508      RET
mod8u:
    02AB 9468      BSET	6
    02AC C001      RJMP	xdiv8u
div8u:
    02AD 94E8      BCLR	6
xdiv8u:
    02AE 932A      ST	R18,-Y
    02AF 92FA      ST	R15,-Y
    02B0 24FF      CLR	R15
    02B1 E028      LDI	R18,0x8
    02B2 0F00      LSL	R16
    02B3 1CFF      ROL	R15
    02B4 16F1      CP	R15,R17
    02B5 F010      BCS	0x02B8
    02B6 1AF1      SUB	R15,R17
    02B7 9503      INC	R16
    02B8 952A      DEC	R18
    02B9 F7C1      BNE	0x02B2
    02BA F40E      BRTC	0x02BC
    02BB 2D0F      MOV	R16,R15
    02BC 90F9      LD	R15,Y+
    02BD 9129      LD	R18,Y+
    02BE 9508      RET
empy16s:
    02BF 920A      ST	R0,-Y
    02C0 921A      ST	R1,-Y
    02C1 938A      ST	R24,-Y
    02C2 939A      ST	R25,-Y
    02C3 9F02      MUL	R16,R18
    02C4 01C0      MOVW	R24,R0
    02C5 9F12      MUL	R17,R18
    02C6 0D90      ADD	R25,R0
    02C7 9F03      MUL	R16,R19
    02C8 0D90      ADD	R25,R0
    02C9 018C      MOVW	R16,R24
    02CA 9199      LD	R25,Y+
    02CB 9189      LD	R24,Y+
    02CC 9019      LD	R1,Y+
    02CD 9009      LD	R0,Y+
    02CE 9508      RET
push_gset1:
    02CF 935A      ST	R21,-Y
    02D0 934A      ST	R20,-Y
    02D1 9508      RET
pop_gset1:
    02D2 E0E1      LDI	R30,1
pop:
    02D3 9149      LD	R20,Y+
    02D4 9159      LD	R21,Y+
    02D5 FDE0      SBRC	R30,0
    02D6 9508      RET
    02D7 9169      LD	R22,Y+
    02D8 9179      LD	R23,Y+
    02D9 FDE1      SBRC	R30,1
    02DA 9508      RET
    02DB 90A9      LD	R10,Y+
    02DC 90B9      LD	R11,Y+
    02DD FDE2      SBRC	R30,2
    02DE 9508      RET
    02DF 90C9      LD	R12,Y+
    02E0 90D9      LD	R13,Y+
    02E1 FDE3      SBRC	R30,3
    02E2 9508      RET
    02E3 90E9      LD	R14,Y+
    02E4 90F9      LD	R15,Y+
    02E5 9508      RET
push_gset2:
    02E6 937A      ST	R23,-Y
    02E7 936A      ST	R22,-Y
    02E8 940C02CF  JMP	push_gset1
pop_gset2:
    02EA E0E2      LDI	R30,2
    02EB 940C02D3  JMP	pop

⌨️ 快捷键说明

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