找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3536|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

DS1302的時(shí)鐘電路(串行傳輸顯示方式)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:137190 發(fā)表于 2016-10-10 12:59 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
分享一個(gè)51單片機(jī)DS1302的時(shí)鐘電路(串行傳輸顯示方式),下面是原理圖:


仿真工程文件及所有完整程序等資料下載地址:
http://www.torrancerestoration.com/bbs/dpj-56298-1.html
單片機(jī)源程序:
  1. /********************************************************************
  2.                             天馬電子
  3. *********************************************************************/
  4. #include <reg52.h>
  5. #include <stdio.h>
  6. #include<intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. //寫(xiě)的時(shí)候,是低電平改變數(shù)據(jù),上升沿送入數(shù)據(jù)
  10. //讀的時(shí)候,是低電平讀入數(shù)據(jù),下降沿使得從設(shè)備把數(shù)據(jù)放到總線(xiàn)上
  11. //讀的時(shí)候,是低電平讀,但沒(méi)有讀出,提供下降沿使得從設(shè)備把數(shù)據(jù)放到總線(xiàn)上

  12. sbit P11=P1^1;        //定時(shí)和時(shí)鐘切換
  13. sbit P12=P1^2;        //時(shí)調(diào)整
  14. sbit P13=P1^3;        //分調(diào)整
  15. sbit P14=P1^4;        //秒調(diào)整

  16. sbit CLK =P3^5;
  17. sbit IO  =P3^6;
  18. sbit RST =P3^7;

  19. uchar m,m10,f,f10,s,s10;

  20. unsigned char data discode[10]={0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XE0,0XFE,0XF6};//共陰串行數(shù)組代表0~9

  21. unsigned char leddis[6]={1,2,3,4,5,6};//顯存,有幾個(gè)數(shù)碼管可以定義幾個(gè)

  22. /***************************延時(shí)函數(shù)*************************************/
  23. del()  /*延時(shí)0.2秒*/  
  24. {
  25. unsigned int i,j,k;
  26. for(i=100;i>0;i--)
  27. for(j=20;j>0;j--)
  28. for(k=248;k>0;k--);
  29. }


  30. /****************************************************************/
  31. /////////////////////DS1302////////////////////////
  32. //--------------WriteOneByteData-----------------/
  33. void WriteByte(uchar ucda)
  34.         {
  35.         uchar i;           
  36.         for(i=8;i>0;i--)
  37.                 {
  38.                 IO=(bit)(ucda&0x01);
  39.                 CLK=1;                  
  40.                 CLK=0;
  41.                 ucda>>=1;
  42.                 }
  43.         }

  44. //--------------ReadOneByteData-----------------/
  45. uchar ReadByte(void)
  46.     {
  47.         uchar i,a;
  48.         for(i=8;i>0;i--)
  49.                 {                                       
  50.                 a>>=1;
  51.                 if(IO)a|=0x80;
  52.                 CLK=1;           
  53.                 CLK=0;
  54.                 }        
  55.         return(a);
  56.         }
  57. //--------------WriteAddrFist,ThenWriteData-----------------/

  58. void write1302(uchar Addr,uchar Data)
  59.         {
  60.         RST=0;
  61.         CLK=0;
  62.         RST=1;
  63.         WriteByte(Addr);
  64.         WriteByte(Data);
  65.         CLK=1;
  66.         RST=0;
  67.         }

  68. //--------------WriteAddrFirst,ThenReadData-----------------/

  69. uchar read1302(uchar Addr)
  70.         {
  71.         uchar Data;
  72.         RST=0;
  73.         CLK=0;        
  74.         RST=1;
  75.         WriteByte(Addr);
  76.         Data=ReadByte();
  77.         CLK=1;
  78.         RST=0;
  79.         return(Data);
  80.         }


  81. /************************************************************************/
  82. ////////////////ds1302初始化//////////////////調(diào)整時(shí)間時(shí)用
  83. void csh1302(void)
  84.         {         
  85.         CLK=0;
  86.         RST=0;
  87.         write1302(0x8e,0x00);//打開(kāi)寫(xiě)保護(hù)
  88.         write1302(0x90,0x06);//禁止充電
  89. /////////////////////////////////////////////////
  90.         write1302(0x80,0x20);//預(yù)置秒
  91.         write1302(0x82,0x30);//預(yù)置分
  92.         write1302(0x84,0x08);//預(yù)置時(shí)
  93.         write1302(0x86,0x22);//預(yù)置日期
  94.         write1302(0x88,0x07);//預(yù)置月
  95.         //write1302(0x8a,0x02);//預(yù)置星期
  96.         write1302(0x8c,0x08);//預(yù)置年         
  97. ////////////////////////////////////////////////
  98.         write1302(0x80,0x00);//啟動(dòng)時(shí)鐘
  99.         write1302(0x8e,0x80);//關(guān)閉寫(xiě)保護(hù)
  100.         }
  101. /************************************************************************/
  102. //////////////////顯示函數(shù)////////////////////////////
  103. void xianshi(void)
  104. {
  105.         s10=read1302(0x85);
  106.         s=read1302(0x85)&0x0f;                //時(shí)
  107.         s10=s10>>4;
  108.         s10=s10&0x07;
  109.   ////////////////////////////////////
  110.     f10=read1302(0x83);                        //分
  111.         f=read1302(0x83)&0x0f;
  112.         f10=f10>>4;
  113.         f10=f10&0x07;
  114.   ////////////////////////////////////
  115.     m10=read1302(0x81);                         //秒
  116.         m=read1302(0x81)&0x0f;
  117.         m10=m10>>4;
  118.         m10=m10&0x07;
  119. }

  120. /**************************************************************************/
  121. void display(void)  //數(shù)碼管顯示函數(shù)
  122. {
  123.     unsigned char count;//數(shù)碼管個(gè)數(shù)
  124.         
  125.     for (count=6;count>0;count--)
  126.     {
  127.         SBUF=discode[leddis[count-1]];
  128.         while(TI==0);
  129.         TI=0;
  130.     }
  131. }   


  132. void show(void)         //顯示時(shí)間函數(shù)
  133. {
  134.         xianshi();
  135.         leddis[0]=s10;
  136.                 leddis[1]=s;
  137.                    leddis[2]=f10;
  138.                    leddis[3]=f;
  139.                 leddis[4]=m10;
  140.                    leddis[5]=m;
  141.         
  142.                 display();        //        顯示函數(shù)
  143. }
  144. /************************************************************************
  145.                                                    主函數(shù)
  146. ************************************************************************/

  147. void main()

  148. {
  149. SCON=0x00;        //設(shè)定UART的工作方式為MODEO
  150.            
  151. csh1302(); //初始化

  152. while(1)
  153. {
  154. show();
  155. del();
  156. }

  157. }

復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表