新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何實現DS1302實時時鐘表顯示在1602LCD液晶

        如何實現DS1302實時時鐘表顯示在1602LCD液晶

        作者: 時間:2016-11-18 來源:網絡 收藏
        1602LCD液晶里顯示實時時間: 首先在DS1302實時時鐘芯片里寫入一個時間, 然后在這個芯片里讀取這個時間,并顯示在液晶里。現在終于實現了...
        #include
        #include
        sbit SCLK=P3^6;
        sbit SDA=P3^4;
        sbit RST = P3^5;
        //unsigned char code Write_Address[]={0x80,0x82,0x84};
        unsigned char code Read_Address[]={0x85,0x83,0x81};
        unsigned char Time_Table[3];
        void Write_Byte(unsigned char Data)//寫一個字節: 地址或數據
        {
        unsigned char i;
        for(i=0; i<8; i++)
        {
        SCLK=0;
        SDA=Data&0x01;
        Data=Data>>1;
        SCLK=1;
        }
        }
        void Write_RTC(unsigned char Address, unsigned char Data)
        {
        RST=0;
        _nop_();
        SCLK=0;
        _nop_();
        RST=1;
        Write_Byte(Address);
        Write_Byte(Data);
        RST=0;
        }
        unsigned char Read_Byte() //讀一個字節: 數據
        {
        unsigned char Data=0;
        unsigned char i;
        for(i=0; i<8; i++)
        {
        if(SDA==1)
        {
        Data=Data|0x80;
        }
        SCLK=0;
        Data=Data>>1;
        _nop_();
        SCLK=1;
        }
        return Data;
        }
        unsigned char Read_RTC(unsigned char Address) //
        {
        unsigned char Data=0;
        unsigned char Data1,Data2;
        RST=0;
        _nop_();
        SCLK=0;
        _nop_();
        RST=1;
        Write_Byte(Address);
        Data=Read_Byte();
        RST=0;
        Data1=Data/16;
        Data2=Data%16;
        Data=Data2+Data1*10;
        return Data;
        }
        void Init_RTC() //初始化實時 時鐘表RTC
        {
        Write_RTC(0x8e, 0x00);
        Write_RTC(0x80, 0x56);
        Write_RTC(0x82, 0x48);
        Write_RTC(0x84, 0x12);
        Write_RTC(0x8e, 0x80)
        }
        void DisplayTime() //把時間顯示1602液晶
        {
        unsigned char i;
        InitLCD();
        Write_Command(0x80+0x03);
        for(i=0; i<3; i++)
        {
        Time_Table[i]=Read_RTC(Read_Address[i]);
        Write_Data(0x30+Time_Table[i]/10);
        Write_Data(0x30+Time_Table[i]%10);
        if(i!=2)
        Write_Data(:);
        }
        }
        void main()
        {
        Init_RTC();
        DisplayTime();
        while(1);
        }
        其實,寫這個程序,也是比較簡單的, 比在24C02 芯片里讀寫容易了。因為在24C02讀寫里,是使用I2C總線傳輸數據的,關鍵要把握好時序讀寫,至今仍然未解決這個24C02芯片的讀寫,也不知道是,芯片出問題,還是自己程序的時序出問題。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 西乌珠穆沁旗| 孙吴县| 武邑县| 清丰县| 灵台县| 杂多县| 贡山| 闽侯县| 元阳县| 临清市| 中卫市| 佛教| 浮山县| 英超| 新晃| 岫岩| 静安区| 普兰县| 勐海县| 永兴县| 青铜峡市| 大埔区| 牟定县| 乳山市| 辽阳县| 宽城| 西峡县| 乌审旗| 彝良县| 固镇县| 繁峙县| 普定县| 本溪市| 双牌县| 怀来县| 山东省| 开平市| 淳化县| 张掖市| 麦盖提县| 龙井市|