久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機DS1302的時鐘源代碼(掉電也能準確走時)

[復制鏈接]
跳轉到指定樓層
樓主


全部資料51hei下載地址:
DS1302.rar (57.12 KB, 下載次數: 69)

裝上紐扣電池,即使掉電也能準確走時
DS1302  51MCU  LCD1602顯示時鐘
年  月  日  星期
時  分  秒

硬件部分:(參見郭天祥51實驗板)
LCD1602
D0至D7接51MCU的P0口;

DS1302
RST接P1.1
SCLK接P1.2
SDA接P1.3

按鍵(按鍵一端連接上拉電阻,另一端接地)
S1接 P3.0
S2接 P3.1
S3接 P3.2

軟件部分:
1.對DS1302內部的寄存器地址進行宏定義,定義變量以便存儲 年月日 時分秒 星期
2.編寫LCD1602寫命令和寫數據的子程序,編寫顯示年月日子程序,時分秒子程序以及顯示星期的子程序。注意:從DS1302中讀取的數據是兩位BCD碼,要注意轉換。
3.編寫DS1302讀一個字節的子程序以及寫一個字節的子程序,編寫DS1302從對應的地址讀和寫數據的子程序。
4.按鍵分為三個功能鍵,增大鍵以及減小鍵。

部分程序:
/************************************************
*名稱:DS1302WriteByte
*說明:無
*功能:寫入8bit數據
*調用:delayus()
*輸入:dat:要寫入的數據
*輸出:無
*************************************************/
void DS1302WriteByte(uchar dat)
{
    uchar i;
    SCLK=0;//初始時鐘線置為0
    delayus();
    for(i=0;i<8;i++)//開始傳輸8個字節的數據
      {
         SDA=dat&0x01;//取最低位,注意DS1302的數據和地址都是從最低位開始傳輸的
         delayus();
         SCLK=1;//時鐘線拉高,制造上升沿,SDA的數據被傳輸
         delayus();
         SCLK=0;//時鐘線拉低,為下一個上升沿做準備
         dat>>=1;//數據右移一位,準備傳輸下一位數據
      }
}

/************************************************
*名稱:DS1302ReadByte()
*說明:無
*功能:讀取8bit的數據
*調用:delayus()
*輸入:無
*輸出:dat:讀取的數據
*************************************************/
uchar DS1302ReadByte()
{
   uchar i,dat;
   delayus();
   for(i=0;i<8;i++)
    {
       dat>>=1;//要返回的數據右移一位
       if(SDA==1)//當數據線為高時,證明該位數據為1
         dat|=0x80;//要傳輸數據的當前值置為1,若不是,則為0
       SCLK=1;//拉高時鐘線
       delayus();
       SCLK=0;//制造下降沿
       delayus();
     }
       return dat;//返回讀取出的數據

}

/************************************************
*名稱:ucharDS1302Read()
*說明:先寫地址,后讀數據
*功能:從cmd相應地址中讀取一個字節的數據
*調用:DS1302WriteByte(),DS1302ReadByte()
*輸入:cmd:要寫入的控制字節
*輸出:dat:讀取的數據
*************************************************/
uchar DS1302Read(uchar cmd)
{

   uchar dat;
   RST=0;//初始CE線置為0
   SCLK=0;//初始時鐘線置為0
   RST=1;//初始CE置為1,傳輸開始
   DS1302WriteByte(cmd);//傳輸命令字,要讀取的時間/日歷地址   
   dat=DS1302ReadByte();//讀取要得到的時間/日期
   SCLK=1;//時鐘線拉高
   RST=0;//讀取結束,CE置為0,結束數據的傳輸
   return dat;//返回得到的時間/日期
}

/************************************************
*名稱:DS1302Write
*說明:先寫地址,后寫數據
*功能:向cmd相應地址中寫一個字節的數據
*調用:DS1302WriteByte()
*輸入:cmd:要寫入的控制字,dat:要寫入的數據
*輸出:無

*************************************************/
void DS1302Write(uchar cmd,uchar dat)
{
   RST=0;//初始CE線置為0
   SCLK=0;//初始時鐘線置為0
   RST=1;//初始CE置為1,傳輸開始
   DS1302WriteByte(cmd);//傳輸命令字,要寫入的時間/日歷地址
   DS1302WriteByte(dat);//寫入要修改的時間/日期
   SCLK=1;//時鐘線拉高
   RST=0;//讀取結束,CE置為0,結束數據的傳輸
}


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

使用道具 舉報

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

使用道具 舉報

板凳
ID:469380 發表于 2019-4-16 08:50 | 只看該作者
請問掉電走時體現在程序的哪一部分呢?
回復

使用道具 舉報

地板
ID:276089 發表于 2019-4-17 15:37 | 只看該作者
DS1302準不了的兄弟  想準就得上DS3231
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲第一成人影院 | 欧美久久一区 | 国产乱码一二三区精品 | 亚洲一区二区三区视频免费观看 | 亚洲精品丝袜日韩 | 久久精品国产一区二区电影 | 国产1区2区在线观看 | 九九色综合 | 中文字幕在线看人 | 欧美精品一区二区三区在线播放 | 日韩黄色免费 | 九九亚洲 | 日韩一区二区福利视频 | 国产精品亚洲成在人线 | 91av免费看| av黄色片在线观看 | 精品在线 | 久久精品国产一区二区三区不卡 | 国产色网站 | 精品视频在线免费观看 | 天天插天天狠天天透 | 伊人久久综合 | 东京久久 | www.色综合 | 久久精品中文字幕 | 亚洲精品1| 免费的黄色片子 | 中文字幕免费 | 国产专区免费 | 久久久91精品国产一区二区精品 | 国产在线视频在线观看 | 亚州精品天堂中文字幕 | 国内成人免费视频 | 亚洲精品免费视频 | 日本精品网站 | 热久久免费视频 | 国产高清精品一区二区三区 | 日韩精品一 | 午夜一区二区三区在线观看 | 亚洲国产成人精品女人 | av资源中文在线天堂 |