|
3.7V锂电池供电的0.8寸数码管超亮数码时钟,点亮你的半个房间。 电池充电使用TP4054,升压电路使用RY3750这些元件在立创均有大量库存。
夜晚效果图
/**
******************************************************************************
* 文件名程: main.c
* 作 者: 东莞邓凯哥
* 功 能: 主函数
* 硬 件: STM32F030F4P-DesktopClock-V0.1
* 说明:桌面数码管时钟
* 软件版本 V0.0.1(2025/4/20 16:02)
******************************************************************************
**/
#include "main.h"
#include "user_gpio.h"
#include "user_seg.h"
#include "user_adc.h"
#include "user_i2c.h"
#include "user_rcc.h"
#include "type_ntc_tab.h"
#include "timepare.h"
#include "pcf8563.h"
RCC_ClocksTypeDef SRCC_CLOCK;
uint16_t ntc_val,adc_int,ntc_tmp,clpiont;
int16_t ntc_temp;
void seg_display_temp(int16_t data)
{
if( data < 0 )
{
TM1629_DisplayChar(0, 0x11); // 负温度
}else{
TM1629_DisplayChar(0, 0x12); // 正温度
}
TM1629_DisplayChar(2, data%1000%100/10); // 第三位带小数点显示
TM1629_DisplayChar(4, data%1000%100%10); // 第一位显示数字 0
}
void seg_display_clock(int16_t hours,int16_t min,uint8_t piont)
{
TM1629_DisplayChar(8, hours/10);
if( piont )
{
TM1629_DisplayPiontChar(10, hours%10); // 显示中间点 DP
}else{
TM1629_DisplayChar(10, hours%10); // 不显示DP
}
TM1629_DisplayChar(12, min/10);
TM1629_DisplayChar(14, min%10);
}
float Vx1,Rx1,NTC_t1,NTC_t2;
int main(void)
{
user_rcc_init();
RCC_GetClocksFreq(&SRCC_CLOCK);
SysTick_Config(SRCC_CLOCK.SYSCLK_Frequency / 1000);
user_output_init();
user_adc_init();
user_i2c1_init();
TM1629_Init();
// PCF8563_SetTime(25, 4, 16, 19, 02, 00,3);
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 任务
{
PCF8563_GetTime();
seg_display_temp(ntc_temp);
clpiont ++;
if( clpiont == 1)
{
seg_display_clock(Times[4],Times[5],1);
}else if(clpiont >= 2)
{
seg_display_clock(Times[4],Times[5],0);
clpiont = 0;
}
TimePare.Tim500ms_flag = 0;
if( ++TimePare.Tim1s_count >= 2 )
{
TimePare.Tim1s_count = 0;
TimePare.Tim1s_flag = 1;
}
if( ++TimePare.Tim4s_count >= 8 )
{
TimePare.Tim4s_count = 0;
TimePare.Tim4s_flag = 1;
}
}
if( TimePare.Tim1s_flag == 1 ) //1000ms 任务
{
TimePare.Tim1s_flag = 0;
}
if( TimePare.Tim4s_flag == 1 ) //4000ms 任务
{
TimePare.Tim4s_flag = 0;
}
}
}
void DMA1_Channel1_IRQHandler()
{
if( DMA_GetITStatus(DMA1_IT_TC1) )
{
ntc_tmp += ADC_Buffer[0];
adc_int++;
if(adc_int>=16)
{
ntc_val = ntc_tmp>>4;
adc_int = 0;
ntc_tmp = 0;
ntc_temp = get_type_ntc_temp(ntc_val);
}
DMA_ClearITPendingBit(DMA1_IT_TC1); //清除DMA1通道1传输结束标志
}
}
|
评分
-
查看全部评分
|