欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4337|回復: 3
打印 上一主題 下一主題
收起左側

DS1302數碼管顯示時間proteus仿真與單片機源程序

[復制鏈接]
跳轉到指定樓層
#
DS1302數碼管顯示時間proteus仿真,適合初學者

仿真+單片機程序下載: DS1302萬年歷.zip (73.69 KB, 下載次數: 80)


部分源程序預覽:
  1. #include"DS1302.h"
  2. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  3. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  4. uchar  TIME[7]={0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
  5. //---DS1302時鐘初始化2013年1月1日星期二12點00分00秒。---//
  6. //---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
  7. /*******************************************************************************
  8. * 函 數 名         : Ds1302Write
  9. * 函數功能                   : 向DS1302命令(地址+數據)
  10. * 輸    入         : addr,dat
  11. * 輸    出         : 無
  12. *******************************************************************************/

  13. void Ds1302Write(uchar addr, uchar dat)
  14. {
  15.         uchar n;
  16.          RST=0;
  17.         _nop_();

  18.         SCLK = 0;//先將SCLK置低電平。
  19.         _nop_();
  20.         RST = 1; //然后將RST(CE)置高電平。
  21.         _nop_();

  22.         for (n=0; n<8; n++)//開始傳送八位地址命令
  23.         {
  24.                 DSIO = addr & 0x01;//數據從低位開始傳送
  25.                 addr >>= 1;
  26.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  27.                 _nop_();
  28.                 SCLK = 0;
  29.                 _nop_();
  30.         }
  31.         for (n=0; n<8; n++)//寫入8位數據
  32.         {
  33.                 DSIO = dat & 0x01;
  34.                 dat >>= 1;
  35.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  36.                 _nop_();
  37.                 SCLK = 0;
  38.                 _nop_();       
  39.         }       
  40.                  
  41.         RST = 0;//傳送數據結束
  42.         _nop_();
  43. }

  44. /*******************************************************************************
  45. * 函 數 名         : Ds1302Read
  46. * 函數功能                   : 讀取一個地址的數據
  47. * 輸    入         : addr
  48. * 輸    出         : dat
  49. *******************************************************************************/

  50. uchar Ds1302Read(uchar addr)
  51. {
  52.         uchar n,dat,dat1;
  53.         RST = 0;
  54.         _nop_();

  55.         SCLK = 0;//先將SCLK置低電平。
  56.         _nop_();
  57.         RST = 1;//然后將RST(CE)置高電平。
  58.         _nop_();

  59.         for(n=0; n<8; n++)//開始傳送八位地址命令
  60.         {
  61.                 DSIO = addr & 0x01;//數據從低位開始傳送
  62.                 addr >>= 1;
  63.                 SCLK = 1;//數據在上升沿時,DS1302讀取數據
  64.                 _nop_();
  65.                 SCLK = 0;//DS1302下降沿時,放置數據
  66.                 _nop_();
  67.         }
  68.         _nop_();
  69.         for(n=0; n<8; n++)//讀取8位數據
  70.         {
  71.                 dat1 = DSIO;//從最低位開始接收
  72.                 dat = (dat>>1) | (dat1<<7);
  73.                 SCLK = 1;
  74.                 _nop_();
  75.                 SCLK = 0;//DS1302下降沿時,放置數據
  76.                 _nop_();
  77.         }

  78.         RST = 0;
  79.         _nop_();        //以下為DS1302復位的穩定時間,必須的。
  80.         SCLK = 1;
  81.         _nop_();
  82.         DSIO = 0;
  83.         _nop_();
  84.         DSIO = 1;
  85.         _nop_();
  86.         return (dat>>4)*10+(dat&0x0f);       
  87. }

  88. /*******************************************************************************
  89. * 函 數 名         : Ds1302Init
  90. * 函數功能                   : 初始化DS1302.
  91. * 輸    入         : 無
  92. * 輸    出         : 無
  93. *******************************************************************************/

  94. void Ds1302Init()
  95. {
  96.         uchar n;
  97.         Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
  98.         for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
  99.         {
  100.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);       
  101.         }
  102.         Ds1302Write(0x8E,0x80);                 //打開寫保護功能
  103. }

  104. /*******************************************************************************
  105. * 函 數 名         : Ds1302ReadTime
  106. * 函數功能                   : 讀取時鐘信息
  107. * 輸    入         : 無
  108. * 輸    出         : 無
  109. *******************************************************************************/

  110. void Ds1302ReadTime()
  111. {
  112.         uchar n;
  113.         for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
  114.         {
  115.                 TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  116.         }
  117.                
  118. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

板凳
ID:748857 發表于 2020-6-2 11:17 | 只看該作者
謝謝!
回復

使用道具 舉報

沙發
ID:291815 發表于 2018-6-14 16:12 | 只看該作者
學習了
回復

使用道具 舉報

樓主
ID:102890 發表于 2016-1-15 16:39 | 只看該作者
厲害&#128077;
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表