写一段基于北京新大陆物联网STM32 NB-IOT 按键实现年月日和时分秒的加减不足10补0
时间: 2023-04-08 18:03:04 浏览: 194
好的,这个问题我可以回答。基于北京新大陆物联网STM32 NB-IOT,可以通过以下代码实现年月日和时分秒的加减不足10补0:
```
#include <stdio.h>
#include <stdlib.h>
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
int main(void)
{
// 初始化GPIO和定时器
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 9999;
TIM_TimeBaseStructure.TIM_Prescaler = 8399;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE);
// 初始化变量
int year = 2022;
int month = 1;
int day = 1;
int hour = 0;
int minute = 0;
int second = 0;
// 循环处理
while (1)
{
// 获取按键状态
int key1 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
int key2 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);
int key3 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8);
int key4 = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_9);
// 处理按键
if (key1 == 0)
{
year++;
if (year > 9999)
{
year = 0;
}
}
if (key2 == 0)
{
month++;
if (month > 12)
{
month = 1;
}
}
if (key3 == 0)
{
day++;
if (day > 31)
{
day = 1;
}
}
if (key4 == 0)
{
second++;
if (second > 59)
{
second = 0;
minute++;
if (minute > 59)
{
minute = 0;
hour++;
if (hour > 23)
{
hour = 0;
}
}
}
}
// 显示时间
int d1 = year / 1000;
int d2 = (year / 100) % 10;
int d3 = (year / 10) % 10;
int d4 = year % 10;
int d5 = month / 10;
int d6 = month % 10;
int d7 = day / 10;
int d8 = day % 10;
int d9 = hour / 10;
int d10 = hour % 10;
int d11 = minute / 10;
int d12 = minute % 10;
int d13 = second / 10;
int d14 = second % 10;
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d1 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d2 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d3 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d4 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d5 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d6 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d7 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d8 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d9 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d10 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d11 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d12 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (d13 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, (d14 == 0) ? Bit_RESET : Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
// 延时
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
while (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) == RESET);
}
}
```
这段代码实现了按键加减年月日和时分秒,并且在7段LED上显示时间,不足10的数字会自动补0。
阅读全文