📄 万年历.lst
字号:
378 5 }
379 4 if(count==3) //key_1键摁三次
380 4 {
381 5 hour--; //时减一
382 5 if(hour==-1)
383 5 hour=23;
384 5 newbuf();
385 5 disp();
386 5 lcd_write_com(0xc0+1);
387 5 }
388 4 if(count==4) //key_1键摁四次
389 4 {
390 5 day--; //日减一
391 5 if(day==-1)
392 5 day=31;
393 5 newbuf();
394 5 disp();
395 5 lcd_write_com(0x80+0x09);
396 5 }
397 4 if(count==5) //key_1键摁五次
398 4 {
399 5 month--; //月减一
400 5 if(month==-1)
401 5 month=12;
402 5 newbuf();
403 5 disp();
404 5 lcd_write_com(0x80+0x06);
405 5 }
406 4 if(count==6) //key_1键摁六次
407 4 {
408 5 year--; //年减一
409 5 if(year==-1)
410 5 year=99;
411 5 newbuf();
412 5 disp();
413 5 lcd_write_com(0x80+0x03);
414 5 }
415 4 if(count==7) //key_1键摁六次
416 4 {
417 5 weekday--; //年减一
418 5 if(weekday==0)
419 5 weekday=7;
420 5 disp();
421 5 lcd_write_com(0x80+0x0c);
422 5 }
423 4 }
424 3 }
425 2 }
426 1
C51 COMPILER V9.00 万年繽 06/09/2013 23:40:22 PAGE 8
427 1 }
428 /**********************DS12887写数据*****************/
429 void write_ds(uchar add,uchar date) //ds12887写数据
430 {
431 1 dscs=0;
432 1 dsas=1;
433 1 dsds=1;
434 1 dsrw=1;
435 1 P2=add;
436 1 dsas=0;
437 1 dsrw=0;
438 1 P2=date;
439 1 dsrw=1;
440 1 dsas=1;
441 1 dscs=1;
442 1 }
443 /*************************DS12887读数据********************/
444 uchar read_ds(uchar add) //ds12887读数据
445 {
446 1 uchar ds_date;
447 1 dsas=1;
448 1 dsds=1;
449 1 dsrw=1;
450 1 dscs=0;
451 1 P2=add;
452 1 dsas=0;
453 1 dsds=0;
454 1 P2=0xff;
455 1 ds_date=P2;
456 1 dsds=1;
457 1 dsas=1;
458 1 dscs=1;
459 1 return ds_date;
460 1 }
461 /*****************定时中断********************/
462 void timealarm() interrupt 2
463 {
464 1 uchar c;
465 1 buzzer=0;
466 1 c=read_ds(0x0c);
467 1 }
468 /***********ds18b20延迟子函数(晶振12MHz )********/
469 void delay_18B20(unsigned int i)
470 {
471 1 while(i--);
472 1 }
473 /**********ds18b20初始化函数**********************/
474 void Init_DS18B20(void)
475 {
476 1 unsigned char x=0;
477 1 DQ = 1; //DQ复位
478 1 delay_18B20(8); //稍做延时
479 1 DQ = 0; //单片机将DQ拉低
480 1 delay_18B20(80); //精确延时 大于 480us
481 1 DQ = 1; //拉高总线
482 1 delay_18B20(14);
483 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
484 1 delay_18B20(20);
485 1 }
486 /***********ds18b20读一个字节**************/
487 uchar ReadOneChar(void)
488 {
C51 COMPILER V9.00 万年繽 06/09/2013 23:40:22 PAGE 9
489 1 uchar y=0;
490 1 uchar dat = 0;
491 1 for (y=8;y>0;y--)
492 1 {
493 2 DQ = 0; // 给脉冲信号
494 2 dat>>=1;
495 2 DQ = 1; // 给脉冲信号
496 2 if(DQ)
497 2 dat|=0x80;
498 2 delay_18B20(4);
499 2 }
500 1 return(dat);
501 1 }
502 /*************ds18b20写一个字节****************/
503 void WriteOneChar(uchar dat)
504 {
505 1 unsigned char z=0;
506 1 for (z=8; z>0; z--)
507 1 {
508 2 DQ = 0;
509 2 DQ = dat&0x01;
510 2 delay_18B20(5);
511 2 DQ = 1;
512 2 dat>>=1;
513 2 }
514 1 }
515
516 /**************读取ds18b20当前温度************/
517
518 void ReadTemp(void)
519 {
520 1 unsigned char a=0;
521 1 unsigned char b=0;
522 1 unsigned char t=0;
523 1
524 1 Init_DS18B20();
525 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
526 1 WriteOneChar(0x44); // 启动温度转换
527 1
528 1 delay_18B20(100); // this message is wery important
529 1
530 1 Init_DS18B20();
531 1 WriteOneChar(0xCC); //跳过读序号列号的操作
532 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
533 1
534 1 delay_18B20(100);
535 1
536 1 a=ReadOneChar(); //读取温度值低位
537 1 b=ReadOneChar(); //读取温度值高位
538 1 t_value=b<<4;
539 1 t_value+=(a&0xf0)>>4;
540 1 }
541 void temp_to_str() //温度数据转换成液晶字符显示
542 {
543 1 TempBuffer[0]=t_value/10+'0'; //十位
544 1 TempBuffer[1]=t_value%10+'0'; //个位
545 1 TempBuffer[2]=0xdf; //温度符号
546 1 TempBuffer[3]='C';
547 1 }
548
549
550
C51 COMPILER V9.00 万年繽 06/09/2013 23:40:22 PAGE 10
551
552
553
554
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1544 ----
CONSTANT SIZE = 88 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -