新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的ds1302驅(qū)動(dòng)程序

        51單片機(jī)的ds1302驅(qū)動(dòng)程序

        作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
        ////////////////////////////////////////////////////////////頭文件/////////////////////////////////////////////////
        /*******************************************************************************
        * 標(biāo)題: ds1302時(shí)鐘芯片驅(qū)動(dòng)程序 *
        * 文件: ds1302.h ds1302.c *
        * 日期: 2010-3-12 *
        * 版本: 1.12(試驗(yàn)通過版)可用51hei單片機(jī)開發(fā)板 *
        * 郵箱: acsdf139@163.com qq:526083029 *
        * 網(wǎng)站: 無 *
        ********************************************************************************
        * 描述: *
        * 用法:首先在主程序內(nèi)添加頭文件#include"ds1302.c" *
        * 在程序中使用dsgettime(¤ttime)函數(shù)獲取時(shí)鐘芯片的時(shí)間數(shù)據(jù) *
        * 使用timetostr(¤ttime)函數(shù)將時(shí)間數(shù)據(jù)轉(zhuǎn)換液晶字符 *
        * 使用datetostr(¤ttime)函數(shù)將日期數(shù)據(jù)轉(zhuǎn)換液晶字符 *
        * 存數(shù)據(jù)時(shí),直接使用 wr1302(uchar add,uchar dat)即可 *
        ********************************************************************************
        *【版權(quán)】自己參照網(wǎng)上,朋友,以及書本資料上寫的,所以沒有版權(quán) *
        *【聲明】此程序,可用于學(xué)習(xí),參考及實(shí)際設(shè)計(jì)中,歡迎轉(zhuǎn)載復(fù)制以及建議批評(píng) *
        *【技術(shù)支持】qq:526083029 小張 *
        ********************************************************************************/
        #ifndef _DS1302_H_
        #define _DS1302_H_
        #include
        #include
        typedef struct __SYSTEMTIME__
        {
            unsigned char Second;
            unsigned char Minute;
            unsigned char Hour;
            unsigned char Week;
            unsigned char Day;
            unsigned char Month;
            unsigned char Year;
            unsigned char datestr[11];
            unsigned char timestr[9];
        }systime; //定義的時(shí)間類型
        #define uchar unsigned char
        #define uint unsigned int
        #define am(x) x
        #define pm(x) (x+12) // 轉(zhuǎn)成24小時(shí)制
        #define dssecond 0x80 //時(shí)鐘芯片的寄存器位置,存放時(shí)間
        #define dsminute 0x82
        #define dshour 0x84
        #define dsweek 0x8A
        #define dsday 0x86
        #define dsmonth 0x88
        #define dsyear 0x8C
        #define dsbaohu 0x8E
        #define on 0x80
        #define off 0x00
        extern uchar change(uchar x);
        extern uchar bcdtohex(uchar val);
        extern void wr1302b(uchar temp);
        extern void wr1302(uchar add,uchar dat);
        extern uchar re1302b();
        extern uchar re1302(uchar address);
        extern void dsinit(void);
        extern void dsgettime(systime *ds1302);
        extern void timetostr(systime *ds1302);
        extern void datetostr(systime *ds1302);
        #endif
        ////////////////////////////////////////////////////////////c程序////////////////////////////////////////////////////
        #include
        #include "ds1302.h"
        #include
        //管角定義
        sbit ACC0 = ACC^0;
        sbit ACC7 = ACC^7;
        sbit dssck=P1^0;
        sbit dssda=P1^1;
        sbit dsrst=P1^2;// DS1302復(fù)位
        systime currenttime; //定義結(jié)構(gòu)體變量不可以在點(diǎn)h文件中定義
        uchar flaghour,flagmin,flagsec,flagyear,flagmonth,flagday,flagweek,week_value[2];
        /*************************************
        函數(shù)名:change
        函數(shù)功能:十進(jìn)制轉(zhuǎn)換成十六進(jìn)制
        參數(shù):x(十六進(jìn)制數(shù))
        返回:y(十進(jìn)制數(shù))
        備注:無
        *************************************/
        uchar bcdtohex(uchar val)
        {
        uchar i;
        i = val&0x0f; //按位與,i得到低四位數(shù)。
        val >>= 4; //右移四位,將高四位移到低四位的位置,得到高四位碼值。
        val &= 0x0f; //防止移位時(shí)高位補(bǔ)進(jìn)1,只保留高四位碼值
        val *= 10; //高位碼值乘以10
        i += val; //然后與第四位碼值相加。
        return i; //將得到的十進(jìn)制數(shù)返回
        }
        /*************************************
        函數(shù)名:wr1302b
        函數(shù)功能:實(shí)時(shí)時(shí)鐘寫入一個(gè)字節(jié)
        參數(shù):d
        返回:無
        備注:配合wr1302使用
        *************************************/
        void wr1302b(uchar d)
        {
        unsigned char i;
        ACC = d;
        for(i=8; i>0; i--)
        {
        dssda = ACC0; //相當(dāng)于匯編中的 RRC
        dssck = 1;
        dssck = 0;
        ACC = ACC >> 1;
        }
        }
        /*************************************
        函數(shù)名:wr1302
        函數(shù)功能:向1302中寫數(shù)據(jù)
        參數(shù):ucAddr(DS1302地址), ucData(要寫的數(shù)據(jù))
        返回:無
        備注:無
        *************************************/
        void wr1302(uchar ucAddr, uchar ucDa)
        {
        dsrst = 0;
        dssck = 0;
        dsrst = 1;
        wr1302b(ucAddr); // 地址,命令
        wr1302b(ucDa); // 寫1Byte數(shù)據(jù)
        dssck = 1;
        dsrst = 0;
        }

        上一頁 1 2 下一頁

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 敦化市| 郴州市| 汪清县| 卢氏县| 德州市| 鞍山市| 合川市| 客服| 彭泽县| 顺平县| 鸡西市| 芦溪县| 托克逊县| 湾仔区| 疏勒县| 无极县| 金秀| 伊宁市| 安陆市| 大丰市| 峨边| 元阳县| 伊川县| 桦南县| 玛纳斯县| 化州市| 长治县| 南丹县| 包头市| 祥云县| 滦平县| 东兴市| 井陉县| 望奎县| 康定县| 德格县| 双流县| 万源市| 山丹县| 哈密市| 青龙|