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

📄 ds1302.s

📁 DS1302
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 304
; 			if(WriteTime[i]==0x40)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,64
	brne L154
	.dbline 305
; 			{WriteTime[i]=0x3a;
	.dbline 305
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,58
	std z+0,R24
	.dbline 306
; 				} 
L154:
	.dbline 307
; 			if(WriteTime[i]==0x50)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,80
	brne L156
	.dbline 308
; 			{WriteTime[i]=0x4a;
	.dbline 308
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,74
	std z+0,R24
	.dbline 309
; 				} 
L156:
	.dbline 310
; 			if(WriteTime[i]==0x60)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,96
	brne L158
	.dbline 311
; 		    {WriteTime[i]=0x5a;
	.dbline 311
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,90
	std z+0,R24
	.dbline 312
; 			} 
L158:
	.dbline 313
; 			if(WriteTime[i]==0x70)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,112
	brne L160
	.dbline 314
; 			{WriteTime[i]=0x6a;
	.dbline 314
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,106
	std z+0,R24
	.dbline 315
; 				} 
L160:
	.dbline 316
; 			if(WriteTime[i]==0x80)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,128
	brne L162
	.dbline 317
; 			{WriteTime[i]=0x7a;
	.dbline 317
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,122
	std z+0,R24
	.dbline 318
; 				} 
L162:
	.dbline 319
; 				if(WriteTime[i]==0x90)
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,144
	brne L164
	.dbline 320
; 		    {WriteTime[i]=0x89;
	.dbline 320
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldi R24,137
	std z+0,R24
	.dbline 321
; 			} 
	rjmp L165
L164:
	.dbline 323
	ldi R24,<_WriteTime
	ldi R25,>_WriteTime
	movw R2,R16
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,1
	std z+0,R24
L165:
	.dbline -2
L145:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 I
	.dbend
	.dbfunc e keypress _keypress fV
;         NoGong -> R20,R21
;           move -> R22,R23
	.even
_keypress::
	rcall push_gset2
	sbiw R28,1
	.dbline -1
	.dbline 329
; 			else
; 			WriteTime[i]=WriteTime[i]-1;
; }
; /*ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;      按键检测主程序
; cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc*/
;  void keypress(void)//按键检测程序
;  {
	.dbline 330
;   	  if(!(PINC&0X08))
	sbic 0x13,3
	rjmp L167
	.dbline 331
;  	  {int NoGong=0,move=0;
	.dbline 331
	clr R20
	clr R21
	.dbline 331
	clr R22
	clr R23
L169:
	.dbline 332
L170:
	.dbline 332
; 	   while(!(PINC&0X08));//检测按键释放
	sbis 0x13,3
	rjmp L169
	.dbline 333
; 	    NoGong=1;
	ldi R20,1
	ldi R21,0
	rjmp L173
L172:
	.dbline 335
; 	    while(NoGong==1)//功能键按下
; 		{
	.dbline 336
; 	             black(13,0);//闪烁时的背景线
	clr R18
	clr R19
	ldi R16,13
	ldi R17,0
	rcall _black
	.dbline 337
; 				 LCD_write_char(13,0,secondtl+48);//初始状态second闪烁
	lds R24,_secondtl
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,13
	rcall _LCD_write_char
	.dbline 338
; 				               DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 339
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 341
; //cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
;                             if(!(PINC&0x20))  //检测加一按键
	sbic 0x13,5
	rjmp L175
	.dbline 342
;                               {delay_nus(30);
	.dbline 342
	ldi R16,30
	ldi R17,0
	rcall _delay_nus
L177:
	.dbline 343
L178:
	.dbline 343
; 							    while(!(PINC&0X20));
	sbis 0x13,5
	rjmp L177
	.dbline 344
; 							    PlusForSET(5);//设置秒
	ldi R16,5
	ldi R17,0
	rcall _PlusForSET
	.dbline 345
; 							   DS1302_WriteTime();  	
	rcall _DS1302_WriteTime
	.dbline 346
; 		                       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 347
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 348
; 					          } 
L175:
	.dbline 349
; 						    if(!(PINB&0x01))//检测减一按键
	sbic 0x16,0
	rjmp L180
	.dbline 350
L182:
	.dbline 350
L183:
	.dbline 350
;                               {while(!(PINB&0X01));
	sbis 0x16,0
	rjmp L182
	.dbline 351
; 							   SubForSET(5);//设置秒
	ldi R16,5
	ldi R17,0
	rcall _SubForSET
	.dbline 352
; 							   DS1302_WriteTime();  	
	rcall _DS1302_WriteTime
	.dbline 353
; 		                       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 354
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 355
; 					          }
L180:
	.dbline 358
; //cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc			 
; 	             
;                   if(!(PINC&0x10))//检测移位按键
	sbic 0x13,4
	rjmp L185
	.dbline 359
L187:
	.dbline 359
L188:
	.dbline 359
;                    {while(!(PINC&0X10));
	sbis 0x13,4
	rjmp L187
	.dbline 360
;     				move=1;
	ldi R22,1
	ldi R23,0
	rjmp L191
L190:
	.dbline 362
; 	                 while(NoGong==1)
; 				      {
	.dbline 364
; 					  
; 					           DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 365
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	rjmp L194
L193:
	.dbline 368
; //cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc					   
; 					   while(move==1) //设置分钟位置
; 					    {  black(10,0);
	.dbline 368
	clr R18
	clr R19
	ldi R16,10
	ldi R17,0
	rcall _black
	.dbline 369
; 						   LCD_write_char(10,0,minutetl+48);
	lds R24,_minutetl
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,10
	rcall _LCD_write_char
	.dbline 370
; 						       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 371
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 373
; 							//cccccccccccccccccccccccccccccccccccc   
; 						      if(!(PINC&0x20))  //检测加一按键
	sbic 0x13,5
	rjmp L196
	.dbline 374
L198:
	.dbline 374
L199:
	.dbline 374
;                               {while(!(PINC&0X20));						  
	sbis 0x13,5
	rjmp L198
	.dbline 375
; 						       PlusForSET(4);//设置分钟
	ldi R16,4
	ldi R17,0
	rcall _PlusForSET
	.dbline 376
; 							   DS1302_WriteTime();  	
	rcall _DS1302_WriteTime
	.dbline 377
; 		                       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 378
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 379
; 					          } 
L196:
	.dbline 380
; 							  if(!(PINB&0x01))//检测减一按键
	sbic 0x16,0
	rjmp L201
	.dbline 381
L203:
	.dbline 381
L204:
	.dbline 381
;                               {while(!(PINB&0X01));
	sbis 0x16,0
	rjmp L203
	.dbline 382
; 								SubForSET(4);				   
	ldi R16,4
	ldi R17,0
	rcall _SubForSET
	.dbline 383
; 							   DS1302_WriteTime();
	rcall _DS1302_WriteTime
	.dbline 384
; 							   DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 385
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 386
; 					          }
L201:
	.dbline 387
; 							   if(!(PINC&0x08))   //检测功能键
	sbic 0x13,3
	rjmp L206
	.dbline 388
L208:
	.dbline 388
L209:
	.dbline 388
;                                 {while(!(PINC&0X08));
	sbis 0x13,3
	rjmp L208
	.dbline 389
;                                  NoGong=2;
	ldi R20,2
	ldi R21,0
	.dbline 390
; 								 move=6;//使此值与所有的判断值都不相等
	ldi R22,6
	ldi R23,0
	.dbline 391
;                                 }
L206:
	.dbline 393
; 						   
; 					     if(!(PINC&0x10))//检测移位按键
	sbic 0x13,4
	rjmp L211
	.dbline 394
L213:
	.dbline 394
L214:
	.dbline 394
;                          {while(!(PINC&0X10));
	sbis 0x13,4
	rjmp L213
	.dbline 395
; 					      move=2;
	ldi R22,2
	ldi R23,0
	.dbline 396
; 					     }						 
L211:
	.dbline 397
L194:
	.dbline 367
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne X2
	rjmp L193
X2:
	rjmp L217
L216:
	.dbline 400
; 					   }//move=1
; //cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc					   
; 					   while(move==2)//设置小时位置
; 					    {  black(7,0);
	.dbline 400
	clr R18
	clr R19
	ldi R16,7
	ldi R17,0
	rcall _black
	.dbline 401
; 						   LCD_write_char(7,0,hourtl+48);
	lds R24,_hourtl
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,7
	rcall _LCD_write_char
	.dbline 402
; 						       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 403
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 405
; 						   //cccccccccccccccccccccccccccccccccccccccccc
; 						      if(!(PINC&0x20))  //检测加一按键
	sbic 0x13,5
	rjmp L219
	.dbline 406
L221:
	.dbline 406
L222:
	.dbline 406
;                               {while(!(PINC&0X20));
	sbis 0x13,5
	rjmp L221
	.dbline 407
; 							      PlusHour(3);
	ldi R16,3
	ldi R17,0
	rcall _PlusHour
	.dbline 408
; 							      DS1302_WriteTime();
	rcall _DS1302_WriteTime
	.dbline 409
; 							      DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 410
; 							      SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 411
; 					          } 
L219:
	.dbline 412
; 							  if(!(PINB&0x01))//检测减一按键
	sbic 0x16,0
	rjmp L224
	.dbline 413
L226:
	.dbline 413
L227:
	.dbline 413
;                               {while(!(PINB&0X01));
	sbis 0x16,0
	rjmp L226
	.dbline 414
; 							      SubHour(3);
	ldi R16,3
	ldi R17,0
	rcall _SubHour
	.dbline 415
; 							      DS1302_WriteTime();
	rcall _DS1302_WriteTime
	.dbline 416
; 							      DS1302_ReadTime(); //读取当前时间							      
	rcall _DS1302_ReadTime
	.dbline 417
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 418
; 					          }
L224:
	.dbline 419
; 							  if(!(PINC&0x08))   //检测功能键
	sbic 0x13,3
	rjmp L229
	.dbline 420
L231:
	.dbline 420
L232:
	.dbline 420
;                                 {while(!(PINC&0X08));
	sbis 0x13,3
	rjmp L231
	.dbline 421
;                                  NoGong=2;
	ldi R20,2
	ldi R21,0
	.dbline 422
; 								 move=6;//使此值与所有的判断值都不相等
	ldi R22,6
	ldi R23,0
	.dbline 423
;                                 }
L229:
	.dbline 425
; 						   
; 					     if(!(PINC&0x10))//检测移位按键
	sbic 0x13,4
	rjmp L234
	.dbline 426
L236:
	.dbline 426
L237:
	.dbline 426
;                          {while(!(PINC&0X10));
	sbis 0x13,4
	rjmp L236
	.dbline 427
; 					      move=3;
	ldi R22,3
	ldi R23,0
	.dbline 428
; 					     }						 
L234:
	.dbline 429
L217:
	.dbline 399
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	brne X3
	rjmp L216
X3:
	rjmp L240
L239:
	.dbline 432
; 					   }//move=2
; //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc					   
; 					   while(move==3) //设置日位置
; 					    {  black(13,1);
	.dbline 432
	ldi R18,1
	ldi R19,0
	ldi R16,13
	ldi R17,0
	rcall _black
	.dbline 433
; 						   LCD_write_char(13,1,datetl+48);
	lds R24,_datetl
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,13
	rcall _LCD_write_char
	.dbline 434
; 						       DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 435
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 437
; 						   //ccccccccccccccccccccccccccccccccccccc
; 						      if(!(PINC&0x20))  //检测加一按键
	sbic 0x13,5
	rjmp L242
	.dbline 438
L244:
	.dbline 438
L245:
	.dbline 438
;                               {while(!(PINC&0X20));
	sbis 0x13,5
	rjmp L244
	.dbline 439
; 							      PlusDay(2);
	ldi R16,2
	ldi R17,0
	rcall _PlusDay
	.dbline 440
; 							      DS1302_WriteTime();
	rcall _DS1302_WriteTime
	.dbline 441
; 							      DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 442
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 443
; 					          } 
L242:
	.dbline 444
; 							  if(!(PINB&0x01))//检测减一按键
	sbic 0x16,0
	rjmp L247
	.dbline 445
L249:
	.dbline 445
L250:
	.dbline 445
;                               {while(!(PINB&0X01));
	sbis 0x16,0
	rjmp L249
	.dbline 446
; 							      SubDay(2);
	ldi R16,2
	ldi R17,0
	rcall _SubDay
	.dbline 447
; 							      DS1302_WriteTime();
	rcall _DS1302_WriteTime
	.dbline 448
; 							      DS1302_ReadTime(); //读取当前时间
	rcall _DS1302_ReadTime
	.dbline 449
; 							   SendDataForDisplay();//显示设置
	rcall _SendDataForDisplay
	.dbline 450
; 					          }
L247:
	.dbline 452
; 						   
; 						     if(!(PINC&0x08))   //检测功能键
	sbic 0x13,3
	rjmp L252
	.dbline 453
L254:
	.dbline 453
L255:
	.dbline 453
;                                 {while(!(PINC&0X08));
	sbis 0x13,3
	rjmp L254
	.dbline 454
;                                  NoGong=2;
	ldi R20,2
	ldi R21,0
	.dbline 455
; 								 move=6;//使此值与所有的判断值都不相等
	ldi R22,6
	ldi R23,0
	.dbline 456
;                                 }
L252:
	.dbline 458
; 							 
; 					     if(!(PINC&0x10))//检测移位按键
	sbic 0x13,4
	rjmp L257
	.dbline 459
L259:
	.dbline 459
L260:
	.dbline 459
;                          {while(!(PINC&0X10));
	sbis 0x13,4
	rjmp L259
	.dbline 460
; 					      move=4;
	ldi R22,4
	ldi R23,0
	.dbline 461
; 					     }						 
L257:
	.dbline 462
L240:
	.dbline 431
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne X4
	rjmp L239
X4:

⌨️ 快捷键说明

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