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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 680|回復: 0
打印 上一主題 下一主題
收起左側

py32f030k28單片機開發板交替顯示RTC_NTC

[復制鏈接]
跳轉到指定樓層
樓主
ID:14088 發表于 2024-10-10 22:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此Demo用于演示每隔10秒鐘交替顯示RTC時鐘和NTC溫度數值。
/**
******************************************************************************
* 文件名程: main.c
* 作    者: 東莞鄧凱哥
* 功    能: 主函數
* 硬    件: PY32F030K28-StartKit-V0.1
* 說明:數碼管交替顯示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 ;
/******************************************************************************
**函數信息 :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();
        
        /* ADC初始化 */
        APP_ADC_Init();
        
        /* 配置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 任務
                {
                        switch ( dis_switch )
                        {
                                case 0:
                                        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]);
                                       
                                        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數值和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  錯誤執行函數
  * @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 */


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

程序.7z

1.87 MB, 下載次數: 3, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片韩国| 免费久久久久久 | 亚洲最新在线视频 | 在线免费观看a级片 | 久久久久久久久久影视 | 欧美一区成人 | 夜夜精品视频 | 久久久婷| 欧美久久久久久久久 | 亚洲一区综合 | 国产偷自视频区视频 | 成人久久网| 日韩不卡三区 | 成人性视频在线播放 | av黄色在线观看 | 日本人做爰大片免费观看一老师 | 一级片视频免费 | 美女国内精品自产拍在线播放 | 国产成人在线观看免费 | 成人av电影天堂 | 综合久久久 | 日韩中文字幕网 | 91精品国产高清久久久久久久久 | 国产精品久久久久久久久久久久久久 | 91色啪| 伊人手机在线视频 | 亚洲一区二区av | 婷婷久久精品一区二区 | 中文成人在线 | 欧美激情一区 | 国产精品一区二区三区四区 | 亚洲精品女人久久久 | 成人影院av | 久久精品中文字幕 | 精产国产伦理一二三区 | 日韩一区二区精品 | 久久久亚洲一区 | 中文精品视频 | 日韩免费视频 | 国产欧美二区 | 欧美v在线 |