微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ds12c887 时间不更新

ds12c887 时间不更新

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. sbit lcden=P3^4;
  3. sbit lcdrs=P3^5;
  4. sbit dscs=P1^4;
  5. sbit dsas=P1^5;
  6. sbit dsrw=P1^6;
  7. sbit dsds=P1^7;
  8. char filine[14]="2015-10-18 MON";
  9. char seline[10]=" 00:00:00 ";
  10. char sec,min,hor;
  11. int m,n;
  12. int num;
  13. void delay(int m)
  14. {
  15.         int n;
  16.         for(;m>=0;m--)
  17.         for(n=110;n>=0;n--);
  18. }

  19. void write_command(char com)
  20. {//液晶命令
  21.         lcdrs=0;
  22.         lcden=0;
  23.         P0=com;
  24.         delay(5);
  25.         lcden=1;
  26.         delay(5);
  27.         lcden=0;
  28. }
  29. void write_date(char date)
  30. {//液晶数据
  31.         lcdrs=1;
  32.         lcden=0;
  33.         P0=date;
  34.         delay(5);
  35.         lcden=1;
  36.         delay(5);
  37.         lcden=0;
  38. }
  39. /*void write_ds(char address,char date)
  40. {
  41.         dscs=0;
  42.         dsas=1;
  43.         dsds=1;
  44.         dsrw=0;
  45.         P0=address;
  46.         dsas=0;
  47.         dsrw=0;
  48.         P0=date;
  49.         dsrw=1;
  50.         dsas=1;
  51.         dscs=1;
  52.        
  53. }*/
  54. char read_ds(char address)
  55. {
  56.         char ds_date;
  57.         dsas=1;
  58.         dsds=1;
  59.         dsrw=1;
  60.         dscs=0;
  61.         P0=address;
  62.         dsas=0;
  63.         dsds=0;
  64.         P0=0xff;
  65.         ds_date=P0;
  66.         dsds=1;
  67.         dsas=1;
  68.         dscs=1;
  69.         return ds_date;       
  70. }

  71. void init()
  72. {
  73.         write_command(0x38);
  74.         write_command(0x0c);
  75.         write_command(0x06);
  76.         write_command(0x01);
  77.         write_command(0x80);

  78.         for(m=0;m<14;m++)
  79.         write_date(filine[m]);
  80.         write_command(0x80+0x40);
  81.         for(m=0;m<10;m++)
  82.         write_date(seline[m]);
  83. }
  84. void display_number(char address,char number)
  85. {
  86.         char ge,shi;
  87.         shi=number/10;
  88.         ge=number%10;
  89.         write_command(0x80+0x40+address);
  90.         write_date(0x30+shi);
  91.         write_date(0x30+ge);
  92. }


  93. void main()
  94. {
  95.         num=0;
  96.         init();
  97.         delay(50);
  98.         while(1)
  99.         {
  100.                 sec=read_ds(0);
  101.                 display_number(7,sec);
  102.                
  103.                        
  104.         }
  105. }

复制代码

郭天祥的板子。秒针不更新一直显示/0,配套的代码却可以更新,谁给分析分析,谢谢。


你调试下看看你读取回来的sec是个什么数,先确定错误出在哪里

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top