📄 _ds12c887
字号:
242 4
243 4 }
244 3 }
245 2 }
246 1 //**********************************************************
247 1 //S1有按下过,检测S2,S3
248 1 //如果按键2按下执行加,//如果按键3按下执行减
249 1 if(s1num!=0) //S1有按下过,检测S2,S3
250 1 {
251 2 if(s2==0) //如果按键2按下执行加
252 2 {
253 3 delayms(5);
254 3 if(s2==0)
255 3 {
256 4 while(!s2);di();
257 4 switch(s1num)
258 4 {
259 5 case 1:
260 5 miao++;
261 5 if(miao>59)
262 5 {
263 6 miao=0;
264 6 }
265 5 write_sfm(10,miao);
266 5 write_cmd(0x80+0x40+10);
267 5 break;
268 5 case 2:
269 5 fen++;
270 5 if(fen>59)
271 5 {
272 6 fen=0;
273 6 }
274 5 write_sfm(7,fen);
275 5 write_cmd(0x80+0x40+7);
276 5 break;
277 5 case 3:
278 5 shi++;
279 5 if(shi>23)
280 5 {
281 6 shi=0;
282 6 }
283 5 write_sfm(4,shi);
284 5 write_cmd(0x80+0x40+4);
285 5 break;
286 5 case 4:
287 5 week++;
288 5 if(week>7)
289 5 {
290 6 week=1;
291 6 }
292 5 write_week(week);
293 5 write_cmd(0x80+12);
294 5 break;
295 5 case 5:
296 5 day++;
297 5 if(day>31)
298 5 {
299 6 day=1;
300 6 }
301 5 write_nyr(9,day);
302 5 write_cmd(0x80+9);
303 5 break;
C51 COMPILER V7.50 ___DS12C887 09/03/2012 17:35:06 PAGE 6
304 5 case 6:
305 5 month++;
306 5 if(month>12)
307 5 {
308 6 month=1;
309 6 }
310 5 write_nyr(6,month);
311 5 write_cmd(0x80+6);
312 5 break;
313 5 case 7:
314 5 year++;
315 5 if(year>99)
316 5 {
317 6 year=0;
318 6 }
319 5 write_nyr(3,year);
320 5 write_cmd(0x80+3);
321 5 break;
322 5 }
323 4 }
324 3 }
325 2 //*****************************************
326 2 if(s3==0)
327 2 {
328 3 delayms(5);
329 3 if(s3==0)
330 3 {
331 4 while(!s3);di();
332 4 switch(s1num)
333 4 {
334 5 case 1:
335 5 miao--;
336 5 if(miao<0)
337 5 {
338 6 miao=59;
339 6 }
340 5 write_sfm(10,miao);
341 5 write_cmd(0x80+0x40+10);
342 5 break;
343 5 case 2:
344 5 fen--;
345 5 if(fen<0)
346 5 {
347 6 fen=59;
348 6 }
349 5 write_sfm(7,fen);
350 5 write_cmd(0x80+0x40+7);
351 5 break;
352 5 case 3:
353 5 shi--;
354 5 if(shi<0)
355 5 {
356 6 shi=23;
357 6 }
358 5 write_sfm(4,shi);
359 5 write_cmd(0x80+0x40+4);
360 5 break;
361 5 case 4:
362 5 week--;
363 5 if(week<1)
364 5 {
365 6 week=7;
C51 COMPILER V7.50 ___DS12C887 09/03/2012 17:35:06 PAGE 7
366 6 }
367 5 write_week(week);
368 5 write_cmd(0x80+12);
369 5 break;
370 5 case 5:
371 5 day--;
372 5 if(day<1)
373 5 {
374 6 day=31;
375 6 }
376 5 write_nyr(9,day);
377 5 write_cmd(0x80+9);
378 5 break;
379 5 case 6:
380 5 month--;
381 5 if(month<1)
382 5 {
383 6 month=12;
384 6 }
385 5 write_nyr(6,month);
386 5 write_cmd(0x80+6);
387 5 break;
388 5 case 7:
389 5 year--;
390 5 if(year<0)
391 5 {
392 6 year=99;
393 6 }
394 5 write_nyr(3,year);
395 5 write_cmd(0x80+3);
396 5 break;
397 5 }
398 4 }
399 3 }
400 2 }
401 1 //**********************************************************
402 1 if(s4==0)
403 1 {
404 2 delayms(5);
405 2 if(s4==0)
406 2 {
407 3 while(!s4);di(); flag1=~flag1; //闹铃调好后再按一次键返回
408 3 if(flag1==0) //退出闹钟设置保存数值
409 3 {
410 4 flag=0; //启动时间显示
411 4 write_cmd(0x80+0x40);
412 4 write_dat(' ');
413 4 write_dat(' ');
414 4 write_cmd(0x0c); //清屏下,否则光标乱跳 (闹铃调时间时)
415 4 write_ds(1,miao);
416 4 write_ds(3,fen);
417 4 write_ds(5,shi);
418 4 }
419 3 else //设置闹钟
420 3 {
421 4 read_alarm(); //读原始数据
422 4 miao=amiao;
423 4 fen=afen;
424 4 shi=ashi;
425 4 write_cmd(0xc0);
426 4 write_dat('R');write_dat('i');
427 4 write_cmd(0x80+0x40);
C51 COMPILER V7.50 ___DS12C887 09/03/2012 17:35:06 PAGE 8
428 4 write_sfm(4,ashi);
429 4 write_sfm(7,afen);
430 4 write_sfm(10,amiao);
431 4 }
432 3 }
433 2 }
434 1 }
435 //******************************************************************
436 //主程序
437 //******************************************************************
438 void main()
439 {
440 1 init();
441 1 while(1)
442 1 {
443 2 keyscan(); //键盘不断扫描
444 2 if(flag_ri==1) //如果闹铃时间到
445 2 {
446 3 di();
447 3 delayms(100);
448 3 di();
449 3 delayms(500);
450 3 }
451 2 if(flag==0&&flag1==0)
452 2 {
453 3 keyscan();
454 3 year=read_ds(9);
455 3 month=read_ds(8);
456 3 day=read_ds(7);
457 3 week=read_ds(6);
458 3 shi=read_ds(4);
459 3 fen=read_ds(2);
460 3 miao=read_ds(0);
461 3 write_sfm(10,miao);
462 3 write_sfm(7,fen);
463 3 write_sfm(4,shi);
464 3 write_week(week);
465 3 write_nyr(3,year);
466 3 write_nyr(6,month);
467 3 write_nyr(9,day);
468 3 }
469 2 }
470 1 }
471 void exter()interrupt 2 //闹铃外部中断1
472 {
473 1 uchar c; //闹铃时间到
474 1 flag_ri=1;
475 1 c=read_ds(0x0c); //读C寄存器表示响应中断
476 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1504 ----
CONSTANT SIZE = 25 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -