找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 600|回復: 0
打印 上一主題 下一主題
收起左側(cè)

py32f030k28單片機開發(fā)板交替顯示RTC_NTC

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:14088 發(fā)表于 2024-10-10 22:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此Demo用于演示每隔10秒鐘交替顯示RTC時鐘和NTC溫度數(shù)值。
/**
******************************************************************************
* 文件名程: main.c
* 作    者: 東莞鄧凱哥
* 功    能: 主函數(shù)
* 硬    件: PY32F030K28-StartKit-V0.1
* 說明:數(shù)碼管交替顯示RTC時鐘和NTC溫度 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"
#include "adc.h"
/* Private variables ---------------------------------------------------------*/

#define LED_DISP_c              0x61        //溫度符號小c

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 ;
static uint8_t dis_switch,dis_count ;
/******************************************************************************
**函數(shù)信息 :System_Tick(uint32_t Ticks)           
**功能描述 :系統(tǒng)嘀嗒時鐘配置
**輸入?yún)?shù) :Ticks 頻率
**輸出參數(shù) :無
**說    明 :
******************************************************************************/                                                  
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 */
}

/******************************************************************************
**函數(shù)信息 :main()           
**功能描述 :主函數(shù)
**輸入?yún)?shù) :無
**輸出參數(shù) :無
**說    明 :
******************************************************************************/               
int main(void)
{
        /* 配置系統(tǒng)時鐘 */
        APP_RCC_Config();
        
        /* ADC初始化 */
        APP_ADC_Init();
        
        /* 配置USART1相關參數(shù) */
        APP_USART1_Config();
        
        /* 配置LED相關參數(shù) */
        APP_LED_Config();

        /* 配置RTC相關參數(shù) */
        APP_RTC_Config();
        
        /* 設置RTC時間 */
        SET_RTC_Time(8,14,23);
        
        /* 開啟系統(tǒng)嘀嗒定時器 */
        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 任務
                {
                        switch ( dis_switch )
                        {
                                case 0:
                                        dotdis ++;
                                        APP_UpadateRtcTimeStruct();
                                        //顯示RTC時鐘
                                        LL_LED_SetDisplayValue(LED, LL_LED_COM0, dispArr[ RTC_TimeStruct.hour /10]);
                //                        if( dotdis / 2 )                //常規(guī)的方法,用除法
                                        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]);
                                       
                                        printf("Hours = %02d,   Min = %02d,   Sec = %02d\r\n",\
                                                RTC_TimeStruct.hour, RTC_TimeStruct.min, RTC_TimeStruct.sec);          //串口打印 時,分,秒
                                        break;
                                case 1:
                                        ///顯示NTC溫度
                                        LL_LED_SetDisplayValue(LED, LL_LED_COM0, LL_LED_DISP_NONE);                //第1位不顯示
                                        LL_LED_SetDisplayValue(LED, LL_LED_COM1, dispArr[(tempval) %100/10]);
                                        LL_LED_SetDisplayValue(LED, LL_LED_COM2, dispArr[(tempval) %100%10]);
                                        LL_LED_SetDisplayValue(LED, LL_LED_COM3, LED_DISP_c);
                                       
                                        printf("ADC_VALUE = %d,   NTC_VALUE = %d\r\n",mean_value, tempval);          //串口打印ADC數(shù)值和NTC溫度值
                                        break;
                                default :
                                        break;
                        }
                        TimePare.Tim500ms_flag = 0;
                        if( ++TimePare.Tim1s_count >= 2 )
                        {
                                TimePare.Tim1s_count = 0;
                                TimePare.Tim1s_flag = 1;
                        }
                }
               
                if( TimePare.Tim1s_flag == 1 )                //1000ms 任務
                {
                        dis_count ++;
                        if( dis_count >= 10)
                        {
                                dis_count = 0;
                                dis_switch ++;
                                if( dis_switch == 2 )
                                {
                                        dis_switch = 0;
                                }
                        }
               
                        TimePare.Tim1s_flag = 0;
                }

        }
}





/**
  * @brief  錯誤執(zhí)行函數(shù)
  * @param  無
  * @retval 無
  */
void APP_ErrorHandler(void)
{
  /* 無限循環(huán) */
  while (1)
  {
  }
}

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


視頻鏈接:
https://www.bilibili.com/video/B ... c4d0fe4a9622a76421b

程序.7z

1.87 MB, 下載次數(shù): 3, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表