找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3786|回复: 3
收起左侧

实时时钟(DS1302)LCD1602显示和串口显示

[复制链接]
ID:52066 发表于 2013-8-1 18:56 | 显示全部楼层 |阅读模式
   下面是我写的,不对啊(读不出),如果哪位有通过DS1302,将时间显示在1602LCD上的代码,贴出来感激不尽。
问题已解决,代码在2楼,感谢51黑电子论坛

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit wela=P1^4;
  5. sbit dula=P3^6;
  6. sbit lcdrs=P1^7;
  7. sbit lcdrw=P1^6;
  8. sbit lcden=P1^5;
  9. sbit ds_sclk=P3^0;
  10. sbit ds_io=P3^1;
  11. sbit ds_rst=P3^2;
  12. sbit ACC0=ACC^0;
  13. sbit ACC7=ACC^7;
  14. //sbit s1=P3^3;
  15. //sbit s2=P3^4;
  16. uchar a[7]={0x05,0x00,0x06,0x11,0x02,0x06,0x06};
  17. uchar b[7]={0x01,0x01,0x01,0x00,0x01,0x01,0x01};
  18. uchar code table[]=" 2013-12-31 0";
  19. uchar code table1[]="    23:59:54";
  20. uint num;//tt,shi,fen,miao,year,mon,day,week,s1num,monnum,daynum;
  21. void delay(uchar z)       //延迟1ms
  22. {
  23.     uchar x,y;
  24.     for(x=0;x<z;x++)
  25.         for(y=124;y>0;y--);
  26. }
  27. void write_comment(uchar com)         //液晶写地址
  28. {
  29.     lcdrs=0;
  30.     delay(5);
  31.     P2=com;
  32.     lcden=1;
  33.     delay(5);
  34.     lcden=0;
  35. }
  36. void write_date(uchar date)        //液晶写数据
  37. {
  38.     lcdrs=1;
  39.     delay(5);
  40.     P2=date;
  41.     lcden=1;
  42.     delay(5);
  43.     lcden=0;
  44. }
  45. void T_year(uchar pos,uint date)      //年份转化写入液晶
  46. {
  47.     uchar m,n,p,q;
  48.     m=date/1000;
  49.     n=(date%1000)/100;
  50.     p=((date%1000)%100)/10;
  51.     q=((date%1000)%100)%10;
  52.     write_comment(0x80+pos);
  53.     write_date(0x30+m);
  54.     write_date(0x30+n);
  55.     write_date(0x30+p);
  56.     write_date(0x30+q);
  57. }
  58. void T_mon(uchar pos,uchar date)      //月份转化写入液晶
  59. {
  60.     uchar m,n;
  61.     m=date/10;
  62.     n=date%10;
  63.     write_comment(0x80+pos);
  64.     write_date(0x30+m);
  65.     write_date(0x30+n);
  66. }
  67. void T_week(uchar date)                      //星期转化写入液晶      
  68. {
  69.     write_comment(0x80+12);
  70.     write_date(date);
  71. }
  72. void T_day(uchar pos,uchar date)        //日期转化写入液晶
  73. {
  74.     uchar m,n;
  75.     m=date/10;
  76.     n=date%10;
  77.     write_comment(0x80+pos);
  78.     write_date(0x30+m);
  79.     write_date(0x30+n);
  80. }
  81. void T_sfm(uchar pos,uchar date)            //时分秒转化写入液晶
  82. {
  83.     uchar m,n;
  84.     m=date/10;
  85.     n=date%10;
  86.     write_comment(0x80+0x40+pos);
  87.     write_date(0x30+m);
  88.     write_date(0x30+n);
  89. }
  90. void inputbyte(uchar ds_date)         //按位写入
  91. {
  92.     uchar i;
  93.     ACC=ds_date;
  94.     for(i=0;i<8;i++)
  95.     {
  96.         ds_io=ACC0;
  97.         ds_sclk=1;
  98.         ds_sclk=0;
  99.         ACC=ACC>>1;
  100.     }
  101. }
  102. uchar outputbyte()               //按位读出
  103. {
  104.     uchar i;
  105.     for(i=0;i<8;i++)
  106.     {
  107.         ACC=ACC>>1;
  108.         ACC7=ds_io;
  109.         ds_sclk=1;
  110.         ds_sclk=0;
  111.     }
  112.     return ACC;
  113. }
  114. void w1302(uchar ds_pos,uchar ds_date)          //写时钟
  115. {
  116.     ds_rst=0;
  117.     ds_sclk=0;
  118.     ds_rst=1;
  119.     inputbyte(ds_pos);
  120.     inputbyte(ds_date);
  121.     ds_sclk=1;
  122.     ds_rst=0;
  123. }
  124. uchar r1302(uchar ds_pos)       //读时钟
  125. {
  126.     uchar ds_date;
  127.     ds_rst=0;
  128.     ds_sclk=0;
  129.     ds_rst=1;
  130.     inputbyte(ds_pos);
  131.     ds_date=outputbyte();
  132.     ds_sclk=1;
  133.     ds_rst=0;
  134.                   
  135.     return ds_date;
  136. }
  137. void init()            //初始化写液晶
  138. {
  139.     wela=0;
  140.     dula=0;
  141.     lcdrw=0;
  142.     lcden=0;
  143.     write_comment(0x38);
  144.     write_comment(0x01);
  145.     write_comment(0x06);
  146.     write_comment(0x0c);
  147.     for(num=0;num<13;num++)
  148.     {
  149.         write_date(table[num]);
  150.         delay(5);
  151.     }
  152.     write_comment(0x80+0x40);
  153.     for(num=0;num<12;num++)
  154.     {
  155.         write_date(table1[num]);
  156.         delay(5);
  157.     }

  158. }
  159. void main()
  160. {
  161.     uchar i;
  162.     uchar address1,address2;
  163.     init();   
  164.   address1=0x80;            
  165.     w1302(0x8e,0x00);
  166.     for(i=0;i<7;i++)             //写入时钟
  167.     {
  168.         w1302(address1,a[i]);
  169.         address1+=2;
  170.     }
  171.     w1302(0x8e,0x80);
  172.     while(1)
  173.     {
  174.         address2=0x81;
  175.         for(i=0;i<7;i++)          //读时钟
  176.         {
  177.             b[i]=r1302(address2);           
  178.             address2+=2;
  179.             T_sfm(10,b[0]);
  180.             delay(1);
  181.         }
  182.        for(i=0;i<25;i++)//写入液晶
  183.         {
  184.             T_sfm(10,b[0]);
  185.             delay(1);
  186.             T_sfm(7,b[1]);
  187.             delay(1);
  188.             T_sfm(4,b[2]);
  189.             delay(1);
  190.             T_week(b[5]);
  191.             delay(1);
  192.             T_day(9,b[3]);
  193.             delay(1);
  194.             T_mon(6,b[4]);
  195.             delay(1);
  196.             T_year(1,b[6]);
  197.             delay(1);
  198.         }      
  199.     }
  200. }   
复制代码
回复

使用道具 举报

ID:184392 发表于 2017-3-29 11:22 | 显示全部楼层
0.png

DS1302-LCD1602仿真成功源码.zip (428.72 KB, 下载次数: 33)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:52608 发表于 2013-8-3 15:20 | 显示全部楼层
我正在做12864显示的。
回复

使用道具 举报

ID:33596 发表于 2013-8-3 16:46 | 显示全部楼层
在百度文库里搜一下,多的很,我在里面搜了一个,还不错!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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