新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 RTC之日歷顯示

        STM32 RTC之日歷顯示

        作者: 時間:2016-11-25 來源:網絡 收藏
        使用STM32的RTC功能,制作一份私人專屬的日歷,就SO簡單了。不廢話,上效果圖:

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



        鄙人通過串口輸出時間到超級終端的(SecureCRT 5.5這貨最好),如果配上TFT就制作一個簡易的電子日歷了。這個里面主要涉及RTC的初始化,時間數據的初始化輸入,串口輸出,還有就是公歷時間和農歷時間的轉換處理。通過串口初始化RTC數據,RTC通過串口把時間顯示出來,上代碼:

        工程結構圖:


        1、main.c如下:


        #include"stm32f10x.h"
        #include"beep.h"
        #include"led.h"
        #include"usart1.h"
        #include"rtc.h"


        int main(void)
        {
        USART_Config();

        Beep_Init();
        Beep_State(1,BeepOn);

        Led_Init();
        Led_Spark(LedAll,1,LedOn);

        RTC_NVIC_Config(); //RTC嵌套中斷向量初始化

        RTC_Display();
        }

        2、beep led usart這些在博客其他文章里面出現過,這里就不提也罷。

        3、RTC.c這是本文的重點了。

        C文件如下:


        #include"stm32f10x.h"
        #include"rtc.h"
        #include"usart1.h"
        #include"date.h"
        #include"calendar.h"
        #include


        u8 SecondFlag=0;

        struct rtc_time systmtime;

        u8 const *WEEK_STR[] = {"日", "一", "二", "三", "四", "五", "六"}; //這是一個指針數組的賦值 不是指向一個數組的指針 而是一個數組的每一個元素都是一個指針

        //==============================================================================================1-RTC初始化部分

        void RTC_NVIC_Config(void)
        {
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000); //起始地址位于FLASH

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //優先級分組方式2


        NVIC_InitStructure.NVIC_IRQChannel =RTC_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
        NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;

        NVIC_Init(&NVIC_InitStructure);
        }



        static void RTC_Config(void)
        {

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);
        PWR_BackupAccessCmd(ENABLE);

        BKP_DeInit();


        RCC_LSEConfig(RCC_LSE_ON);
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET); //等待LSE準備就緒
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
        RCC_RTCCLKCmd(ENABLE);


        RTC_WaitForSynchro();

        RTC_ITConfig(RTC_IT_SEC,ENABLE);

        RTC_WaitForLastTask();


        RTC_SetPrescaler(32767);
        RTC_WaitForLastTask();
        }

        //==============================================================================================2--設置時間部分

        static u8 RTC_USART_Scanf(uint32_t value)
        {
        uint32_t index = 0;
        uint32_t tmp[2] = {0, 0};

        while (index < 2)
        {

        while (USART_GetFlagStatus(USART, USART_FLAG_RXNE) == RESET)
        {}
        tmp[index++] = (USART_ReceiveData(USART));
        if ((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39))
        {
        if((index == 2) && (tmp[index - 1] == )) //第一個輸入的是數字,第二個是按的回車鍵的情況
        {
        tmp[1] = tmp[0];
        tmp[0] = 0x30;
        }
        else
        {
        printf("Please enter valid number between 0 and 9 -->: ");
        index--;
        }
        }
        else
        {
        printf("%c", tmp[index - 1]); //輸入一個顯示一個數字
        }
        }

        index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10);

        if (index > value)
        {
        printf("Please enter valid number between 0 and %d -->: ", value);
        return 0xFF;
        }
        return index;
        }


        上一頁 1 2 下一頁

        關鍵詞: STM32RTC日歷顯

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 上高县| 芜湖市| 菏泽市| 石泉县| 博罗县| 屯昌县| 扶余县| 许昌市| 麻栗坡县| 三江| 大连市| 丹寨县| 木里| 轮台县| 运城市| 阜宁县| 锡林郭勒盟| 澄江县| 通山县| 淮北市| 怀来县| 灵武市| 博爱县| 阳城县| 丰宁| 永安市| 佛坪县| 炎陵县| 乌鲁木齐市| 全州县| 石家庄市| 龙州县| 闸北区| 谷城县| 出国| 新河县| 葫芦岛市| 铜陵市| 洪泽县| 普陀区| 海伦市|