新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430與DS1302之1602顯示

        MSP430與DS1302之1602顯示

        作者: 時間:2016-12-02 來源:網絡 收藏

        /*******************************************
        函數名稱:Reset_DS1302
        功 能:對DS1302進行復位操作
        ********************************************/
        void Reset_DS1302(void)
        {
        DS_RST_OUT; //RST對應的IO設置為輸出狀態
        DS_SCL_OUT; //SCLK對應的IO設置為輸出狀態
        DS_SCL0; //SCLK=0
        DS_RST0; //RST=0
        delay(10);
        DS_SCL1; //SCLK=1
        }
        /*******************************************
        函數名稱:Write1Byte
        功 能:對DS1302寫入1個字節的數據
        ********************************************/
        void Write_Byte(uchar wdata)
        {
        uchar i;
        DS_SDA_OUT; //SDA對應的IO設置為輸出狀態
        DS_RST1; //REST=1;
        for(i = 8; i > 0; i--)
        {
        if(wdata&0x01)
        DS_SDA1;
        else
        DS_SDA0;
        DS_SCL0;
        delay(10);
        DS_SCL1;
        delay(10);
        wdata>>= 1;
        }
        }
        /*******************************************
        函數名稱:Read1Byte
        功 能:從DS1302讀出1個字節的數據
        ********************************************/
        uchar Read_Byte()
        {
        uchar i;
        uchar rdata = 0X00;
        DS_SDA_IN; //SDA對應的IO設置為輸入狀態
        DS_RST1; //REST=1;
        for(i = 8; i > 0; i--)
        {
        DS_SCL1;
        delay(10);
        DS_SCL0;
        delay(10);
        rdata >>= 1;
        if(DS_SDA_BIT)
        rdata |= 0x80;
        }

        return(rdata);
        }
        /*******************************************
        函數名稱:Write_dat
        功 能:向某個寄存器寫入一個字節數據
        參 數:add--寄存器地址
        dat--寫入的數據
        ********************************************/
        void Write_dat(uchar add, uchar dat)
        {
        DS_RST0;
        DS_SCL0;
        _NOP();
        DS_RST1;
        Write_Byte(add); //寫入地址
        Write_Byte(dat); //寫入數據
        DS_SCL1;
        DS_RST0;
        }
        /*******************************************
        函數名稱:Read_dat
        功 能:從某個寄存器讀出一個字節數據
        參 數:addr--寄存器地址
        返回值 :讀出的數據
        ********************************************/
        uchar read_1302add(uchar add)
        {
        uchar rdata;
        DS_RST0;
        DS_SCL0;
        _NOP();
        DS_RST1;
        Write_Byte(add); //寫入地址
        rdata = Read_Byte(); //讀出數據
        DS_SCL1;
        DS_RST0;

        return(rdata);
        }
        /***********初始化1302*************/
        void init_1302()
        {
        flag=read_1302add(0x81);//讀秒寄存器最高位,讀出時鐘狀態
        if(flag&0x80);//判斷時鐘是否關閉,若內部關閉,則初始化,否則繼續走
        {
        Write_dat(0x8e,0x00);
        Write_dat(0x80,((55/10)<<4|(55%10)));//寫秒寄存器,并寫入初值55
        Write_dat(0x82,((59/10)<<4|(59%10)));//寫分寄存器,并寫入初值59
        Write_dat(0x84,((22/10)<<4|(22%10)));//寫小時寄存器,并寫入初值23
        Write_dat(0x86,((24/10)<<4|(24%10)));//寫日寄存器,并寫入初值18
        Write_dat(0x88,((2/10)<<4|(2%10)));//寫月寄存器,并寫入初值2
        Write_dat(0x8a,((5/10)<<4|(5%10)));//寫周寄存器,并寫入初值5
        Write_dat(0x8c,((12/10)<<4|(12%10)));//寫年寄存器,并寫入初值12,不能寫2012年
        Write_dat(0x90,0xa5);//寫充電方式
        Write_dat(0x8e,0x80);//加上寫保護

        }
        }
        /*****************讀出秒的十進制數***************************/

        本文引用地址:http://www.104case.com/article/201612/324673.htm

        uchar readsecond()
        {
        uchar dat;
        dat=read_1302add(0x81);
        second=((dat&0x70)>>4)*10+(dat&0x0f);
        return second;
        }

        /*****************讀出分的十進制數***************************/

        uchar readminute()
        {
        uchar dat;
        dat=read_1302add(0x83);
        minute=((dat&0x70)>>4)*10+(dat&0x0f);
        return minute;
        }

        /*****************讀出小時的十進制數***************************/

        uchar readhour()
        {
        uchar dat;
        dat=read_1302add(0x85);
        hour=((dat&0x70)>>4)*10+(dat&0x0f);
        return hour;
        }
        /*****************讀出天的十進制數***************************/

        uchar readday()
        {
        uchar dat;
        dat=read_1302add(0x87);
        day=((dat&0x70)>>4)*10+(dat&0x0f);
        returnday;
        }

        /*****************讀出月的十進制數***************************/

        uchar readmonth()
        {
        uchar dat;
        dat=read_1302add(0x89);
        month=((dat&0x70)>>4)*10+(dat&0x0f);
        return month;
        }
        /*****************讀出周的十進制數***************************/

        uchar readweek()
        {
        uchar dat;
        dat=read_1302add(0x8b);
        week=((dat&0x70)>>4)*10+(dat&0x0f);
        return week;
        }



        關鍵詞: MSP430DS13021602顯

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 浏阳市| 灵山县| 托克逊县| 卫辉市| 霍邱县| 伽师县| 内乡县| 沙田区| 肇源县| 邛崃市| 凤翔县| 正蓝旗| 南通市| 荔浦县| 金堂县| 邛崃市| 商丘市| 淮北市| 五常市| 图们市| 扬中市| 阿克陶县| 齐河县| 南京市| 五常市| 沙湾县| 上思县| 宿松县| 观塘区| 华安县| 乌兰县| 铁力市| 宁远县| 泸水县| 张家口市| 峡江县| 扶沟县| 大方县| 治多县| 银川市| 陇川县|