找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2972|回复: 1
收起左侧

ds12c887实时时钟不走,大神进来3天了没一个人回复

[复制链接]
ID:67818 发表于 2014-11-9 21:16 | 显示全部楼层 |阅读模式
本帖最后由 fujian2014 于 2014-11-11 10:20 编辑
  1. #include<reg51.h>
  2.   #define uchar unsigned char
  3.   #define uint unsigned  int
  4.   sbit rs=P3^5;

  5.   sbit lcden=P3^4;
  6.   //sbit s1=P3^0;//功能键
  7.   //sbit s2=P3^0;//增大键
  8.   //sbit s3=P3^0;//减小键
  9.   //sbit s4=P3^0;//闹钟查看键
  10.   sbit beep=P3^7;

  11.   sbit dscs=P1^4;
  12.   sbit dsas=P1^5;
  13.   sbit dsrw=P1^6;
  14.   sbit dsds=P1^7;
  15.   //sbit dsirq=P2^3;
  16.   uchar count,num1;
  17.   uchar miao,shi,fen,year,month,day,week,amiao,afen,ashi;
  18.   uchar code table[]=" 20  -  -";                         //年月日显示格式
  19. uchar code table1[]="      :  :  ";                     //时间显示格?


  20. void delay(uint x)
  21. {
  22.         uint a,b;
  23.         for(a=x;a>0;a--)
  24.                 for(b=10;b>0;b--);
  25. }                                             
  26.   void didi()
  27.    {
  28.     beep=0;
  29.     delay(100);
  30.     beep=1;
  31.    }

  32. void write_com(uchar com)
  33. {
  34.         rs=0;
  35.         lcden=0;
  36.         P0=com;
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;        
  41. }

  42. void write_date(uchar date)
  43. {
  44.         rs=1;
  45.         lcden=0;
  46.         P0=date;
  47.         delay(5);
  48.         lcden=1;
  49.         delay(5);
  50.         lcden=0;        
  51. }



  52. /***************ds12c887***************/
  53. /**************************************/
  54. void ds_write(uchar add,uchar date)
  55. { dscs=0;
  56. dsas=1;
  57. dsds=1;
  58. dsrw=1;

  59. P2=add;
  60. dsas=0;
  61. dsrw=0;
  62. P2=date;
  63. dsas=1;
  64. dsrw=1;
  65. dscs=1;
  66. }

  67. uchar ds_read(uchar add)
  68. {
  69. uchar date;
  70. dsas=1;
  71. dsds=1;
  72. dsrw=1;
  73. dscs=0;
  74. P2=add;
  75. dsas=0;
  76. dsds=0;
  77. P2=0xff;
  78. date=P2;
  79. dsas=1;
  80. dsds=1;
  81. dscs=1;
  82. return date;
  83. }
  84. void set_time()
  85. {

  86. ds_write(0,0);
  87. ds_write(1,0);
  88. ds_write(2,0);
  89. ds_write(3,0);
  90. ds_write(4,0);
  91. ds_write(5,0);
  92. ds_write(6,0);
  93. ds_write(7,0);
  94. ds_write(8,0);
  95. ds_write(9,0);

  96. }
  97. void init()
  98. {   uchar num;
  99.     ds_write(0x0A,0x20);
  100.         ds_write(0x0B,0x26);
  101.     ds_read(0x0c);
  102.     set_time();
  103.         write_com(0x38);   //显示模式设置:16×2显示,5×7点阵,8位数据接口
  104.         delay(10);
  105.         write_com(0x0c);   //显示模式设置
  106.         delay(10);
  107.         write_com(0x06);   //显示模式设置:光标右移,字符不移
  108.         delay(10);
  109.         write_com(0x01);   //清屏幕指令,将以前的显示内容清除
  110.         delay(10);
  111.     num1=0;
  112.     write_com(0x80);
  113.             for(num=0;num<15;num++)
  114.                 {
  115.                         write_date(table[num]);
  116.                         delay(5);
  117.                 }
  118.         write_com(0x80+0x40);       //在第二行显示数据
  119.         for(num=0;num<12;num++)
  120.                 {
  121.                         write_date(table1[num]);
  122.                         delay(5);
  123.                
  124.     }

  125. }

  126. void write_sfm(int add,int date)
  127. {
  128. int shi,ge;
  129. shi=date/10;
  130. ge=date%10;
  131. write_com(0x80+0x40+add);
  132. write_date(0x30+shi);
  133. write_date(0x30+ge);
  134. }
  135. void write_nyr(uchar add,uchar date)
  136. {
  137. char shi,ge;
  138. shi=date/10;
  139. ge=date%10;
  140. write_com(0x80+add);
  141. write_date(0x30+shi);
  142. write_date(0x30+ge);
  143. }
  144. void write_week(char we)
  145. {
  146. write_com(0x80+12);
  147. switch(we)
  148. {
  149.   case 1:write_date('M');delay(5);
  150.         write_date('O');delay(5);
  151.         write_date('N');
  152.         break;
  153.   case 2:write_date('T');delay(5);
  154.         write_date('U');delay(5);
  155.         write_date('E');
  156.         break;
  157.   case 3:write_date('W');delay(5);
  158.         write_date('E');delay(5);
  159.         write_date('D');
  160.         break;
  161.   case 4:write_date('T');delay(5);
  162.         write_date('H');delay(5);
  163.         write_date('U');
  164.         break;

  165.   case 5:write_date('F');delay(5);
  166.         write_date('R');delay(5);
  167.         write_date('T');
  168.          break;
  169.   case 6:write_date('S');delay(5);
  170.          write_date('A');delay(5);
  171.          write_date('T');
  172.           break;
  173.   case 7:write_date('S');
  174.           delay(5);
  175.          write_date('U');
  176.           delay(5);
  177.          write_date('N');
  178.           break;

  179.   }

  180. }



  181. void main()
  182. {
  183.         //uchar a;
  184.         init();                          //1602初始化


  185.         /*write_com(0x80+40);  //设置第二行首字符显示的位置,为第二行,第一列

  186.         a=0;
  187.         while(table[a]!='\0')        //只要没有写到结束标志,就继续写
  188.                 {                                        //这是写字符的第一种方法,用while循环。
  189.                 write_date(table1[a]);
  190.                 a++;
  191.     }*/
  192. while(1)
  193. {
  194.     miao=ds_read(0);
  195.     fen=ds_read(2);
  196.     shi=ds_read(4);

  197.     write_sfm(10,miao);

  198.     write_sfm(7,fen);

  199.     write_sfm(4,shi);

  200. }
  201.         
  202. }
复制代码

我的程序在下面
QQ截圖20141111100052.png

dsn.zip

17.78 KB, 下载次数: 6

仿真图

回复

使用道具 举报

ID:153199 发表于 2017-1-8 16:26 | 显示全部楼层
程序有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表