📄 ds1302.s
字号:
.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 + -