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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 736|回復: 0
收起左側

py32f030k28單片機開發板RTC時鐘顯示代碼

[復制鏈接]
ID:14088 發表于 2024-9-8 19:48 | 顯示全部樓層 |閱讀模式
演示PY32F030K28自帶RTC并驅動LED數碼顯示時鐘。
/**
******************************************************************************
* 文件名程: main.c
* 作    者: 東莞鄧凱哥
* 功    能: 主函數
* 硬    件: PY32F030K28-StartKit-V0.1
* 說明:數碼管顯示RTC時鐘DEMO
* 軟件版本 V0.0.1(2024/4/16 16:02)
******************************************************************************
**/
#include "main.h"
#include "rtc.h"
#include "rcc.h"
#include "led.h"
#include "usart.h"
#include "timepare.h"
/* Private variables ---------------------------------------------------------*/

const uint8_t dispArr[] = {LL_LED_DISP_0, LL_LED_DISP_1, LL_LED_DISP_2, LL_LED_DISP_3, LL_LED_DISP_4, \
                           LL_LED_DISP_5, LL_LED_DISP_6, LL_LED_DISP_7, LL_LED_DISP_8, LL_LED_DISP_9
                          };


static uint8_t dotdis = 0 ;

/******************************************************************************
**函數信息 :System_Tick(uint32_t Ticks)           
**功能描述 :系統嘀嗒時鐘配置
**輸入參數 :Ticks 頻率
**輸出參數 :無
**說    明 :
******************************************************************************/                                                  
void System_Tick(uint32_t Ticks)
{
  SysTick->LOAD  = (uint32_t)((SystemCoreClock / Ticks) - 1UL);          /* set reload register */
  SysTick->VAL   = 0UL;                                                       /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                                   /* Enable the Systick Timer */
}

/******************************************************************************
**函數信息 :main()           
**功能描述 :主函數
**輸入參數 :無
**輸出參數 :無
**說    明 :
******************************************************************************/               
int main(void)
{
        /* 配置系統時鐘 */
        APP_RCC_Config();
        
        /* 配置USART1相關參數 */
        APP_USART1_Config();
        
        /* 配置LED相關參數 */
        APP_LED_Config();

        /* 配置RTC相關參數 */
        APP_RTC_Config();
        
        /* 設置RTC時間 */
        SET_RTC_Time(8,14,23);
        
        /* 開啟系統嘀嗒定時器 */
        System_Tick(1000);
        
        while (1)
        {
        
                if( TimePare.Tim1ms_flag == 1 )                //1ms任務
                {
                        TimePare.Tim1ms_flag = 0;
                        if( ++TimePare.Tim10ms_count >= 10 )
                        {
                                TimePare.Tim10ms_count = 0;
                                TimePare.Tim10ms_flag = 1;
                        }
                        
                        if( ++TimePare.Tim50ms_count >= 50 )
                        {
                                TimePare.Tim50ms_count = 0;
                                TimePare.Tim50ms_flag = 1;
                        }
                }
               
               
               
                if( TimePare.Tim10ms_flag == 1 )        //10ms 任務
                {               
                        
                        TimePare.Tim10ms_flag = 0;
                        if( ++TimePare.Tim100ms_count >= 10 )
                        {
                                TimePare.Tim100ms_count = 0;
                                TimePare.Tim100ms_flag = 1;
                        }
                        
                        if( ++TimePare.Tim200ms_count >= 20 )
                        {
                                TimePare.Tim200ms_count = 0;
                                TimePare.Tim200ms_flag = 1;
                        }
                }
               
               
                if( TimePare.Tim50ms_flag == 1 )        //50ms 任務
                {
                        
                        TimePare.Tim50ms_flag = 0;
                }
               
                if( TimePare.Tim100ms_flag == 1 )        //100ms 任務
                {
                        
                        TimePare.Tim100ms_flag = 0;
                        if( ++TimePare.Tim500ms_count >= 5 )
                        {
                                TimePare.Tim500ms_count = 0;
                                TimePare.Tim500ms_flag = 1;
                        }
                }
               
                if( TimePare.Tim200ms_flag == 1 )        //200ms 任務
                {
                        TimePare.Tim200ms_flag = 0;
                }
               
                if( TimePare.Tim500ms_flag == 1 )        //500ms 任務
                {
                        dotdis ++;
                        APP_UpadateRtcTimeStruct();
                        //顯示RTC時鐘
                        LL_LED_SetDisplayValue(LED, LL_LED_COM0, dispArr[ RTC_TimeStruct.hour /10]);
//                        if( dotdis / 2 )                //常規的方法,用除法
                        if( dotdis >> 1 )                //更高效的方法,用移位
                        {
                                dotdis = 0;
                                LL_LED_SetDisplayValue(LED, LL_LED_COM1, dispArr[ RTC_TimeStruct.hour %10] | LL_LED_DISP_DOT );                //時鐘點閃爍
                        }else{
                                LL_LED_SetDisplayValue(LED, LL_LED_COM1, dispArr[ RTC_TimeStruct.hour %10]  );
                        }
                        LL_LED_SetDisplayValue(LED, LL_LED_COM2, dispArr[ RTC_TimeStruct.min /10]);
                        LL_LED_SetDisplayValue(LED, LL_LED_COM3, dispArr[ RTC_TimeStruct.min %10]);
                        
                        TimePare.Tim500ms_flag = 0;
                        if( ++TimePare.Tim1s_count >= 2 )
                        {
                                TimePare.Tim1s_count = 0;
                                TimePare.Tim1s_flag = 1;
                        }
                }
               
                if( TimePare.Tim1s_flag == 1 )                //1000ms 任務
                {
                        printf("Hours = %02d,   Min = %02d,   Sec = %02d\r\n",\
                                        RTC_TimeStruct.hour, RTC_TimeStruct.min, RTC_TimeStruct.sec);          //串口打印 時,分,秒
                        TimePare.Tim1s_flag = 0;
                }

        }
}





/**
  * @brief  錯誤執行函數
  * @param  無
  * @retval 無
  */
void APP_ErrorHandler(void)
{
  /* 無限循環 */
  while (1)
  {
  }
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  輸出產生斷言錯誤的源文件名及行號
  * @param  file:源文件名指針
  * @param  line:發生斷言錯誤的行號
  * @retval 無
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* 用戶可以根據需要添加自己的打印信息,
     例如: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* 無限循環 */
  while (1)
  {
  }
}
#endif /* USE_FULL_ASSERT */

程序和PDF格式的原理圖: 01.7z (1.07 MB, 下載次數: 5)
py32f030_rtc.jpg
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产视频一区二区 | www.狠狠干| 久久精品影视 | 国产精品久久久久久一级毛片 | 久久久久亚洲精品国产 | 中国一级大黄大片 | 成人夜晚看av | 成人性视频免费网站 | 亚洲日韩中文字幕 | 午夜激情网 | 午夜精品三区 | 麻豆视频在线免费看 | 成人性生交大片免费看中文带字幕 | 欧美黄色片 | 羞羞的视频在线观看 | 欧美高清一级片 | 国产国产精品久久久久 | 日韩视频在线观看一区二区 | 国产中文在线 | 欧洲色综合 | 激情五月婷婷综合 | 亚洲综合无码一区二区 | 久久小视频 | 99国产精品99久久久久久粉嫩 | 国产分类视频 | 国产精品一区二区三区四区五区 | 精品www | 视频二区| 久久免费精品视频 | 天天干b| www.久久99| 欧美乱人伦视频 | 亚洲中字在线 | 美女天天操 | 波多野结衣在线观看一区二区三区 | 成年人免费看 | 亚洲精品一 | 国产成人精品免费视频大全最热 | www.天天操| www.中文字幕.com | 中文在线一区二区 |