ST意法半导体
直播中

李永每

7年用户 1427经验值
私信 关注
[问答]

怎样使用RTC在OLED显示器上显示时间呢

您好,我是 c 编程和嵌入式设计的新手。我知道有一种正确的方法可以完成我想要完成的事情。我似乎以错误的方式做这件事,即使我的代码仍然“有效”
我在几行代码上收到警告。此代码段的第 51 和 53 行。
警告是“传递‘SSD1306_Puts’参数 1 的指针目标的符号不同 [-Wpointer-sign]
我不能包含我所有的代码,因为它说我的帖子太长所以我试图包含所有相关信息。

  • /* USER CODE BEGIN PTD */
  • /* Buffers used to display time and Date */
  • uint8_t aShowTime[50] = {0};
  • uint8_t aShowDate[50] = {0};
  • /**
  •   * @brief  Display the current time and date.
  •   * @param  showtime : pointer to buffer
  •   * @param  showdate : pointer to buffer
  •   * @retval None
  •   */
  • static void RTC_CalendarUpdate(uint8_t *showtime, uint8_t *showdate)
  • {
  •   RTC_DateTypeDef sdatestructureget;
  •   RTC_TimeTypeDef stimestructureget;
  •   /* Get the RTC current Time */
  •   if (HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN) != HAL_OK)
  •   {
  •     /* HAL Error */
  •     Error_Handler();
  •   }
  •   /* Get the RTC current Date */
  •   if (HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN) != HAL_OK)
  •   {
  •     /* HAL Error */
  •     Error_Handler();
  •   }
  •   /* Display time Format : hh:mm:ss */
  •   sprintf((char *)showtime, "%02d:%02d:%02d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  •   /* Display date Format : mm-dd-yy */
  •   sprintf((char *)showdate, "%02d-%02d-%02d", sdatestructureget.Month, sdatestructureget.Date, 2000 + sdatestructureget.Year);
  • }
  • void display_time (void)
  • {
  •          RTC_CalendarUpdate(aShowTime, aShowDate);
  •           SSD1306_GotoXY(20, 0);
  •           SSD1306_Puts(aShowTime, &Font_11x18, 1);
  •           SSD1306_GotoXY(10, 30);
  •           SSD1306_Puts(aShowDate, &Font_11x18, 1);
  •           SSD1306_UpdateScreen();
  • }

回帖(1)

余姗姗

2022-12-19 16:10:28
您可以将指向无符号字节的指针转换为指向有符号字节的指针,如下所示:


  •           SSD1306_Puts((char *) aShowTime, &Font_11x18, 1);
  •           SSD1306_GotoXY(10, 30);
  •           SSD1306_Puts((char *) aShowDate, &Font_11x18, 1);

举报

更多回帖

发帖
×
20
完善资料,
赚取积分