打印
[STM32F3]

请教个sprintf函数问题

[复制链接]
1128|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
负熵|  楼主 | 2022-12-12 12:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想玩个rtc时间显示,在格式化时间时用了sprintf函数,最后出来的结果一直不对,请教下是哪里的问题。
uchar t=0;
   
    char time_display[30],time_display_hour[2],time_display_min[2],time_display_sec[2];
    if(t!=calendar.sec)
    {
      
      t=calendar.sec;
      if(calendar.hour<=9)
      {
        sprintf (time_display_hour,"0%d",calendar.hour);
      }
      else
      {
        sprintf (time_display_hour,"%d",calendar.hour);
      }
      if(calendar.min<=9)
      {
        sprintf (time_display_min,"0%d",calendar.min);
      }
      else
      {
        sprintf (time_display_min,"%d",calendar.min);
      }
      if(calendar.sec<=9)
      {
        sprintf (time_display_sec,"0%d",calendar.sec);
      }
      else
      {
        sprintf (time_display_sec,"%d",calendar.sec);
      }
      
      
      sprintf (time_display,"%d:%d:%d",time_display_hour,time_display_min,time_display_sec);
      display_GB2312_string(1,1,time_display);



使用特权

评论回复
沙发
Pretext| | 2022-12-12 14:07 | 只看该作者
哪里出问题了?第一个显示的是【\0】?

使用特权

评论回复
板凳
jerkoh| | 2022-12-12 14:38 | 只看该作者
没细看,结束就是0x00,  注意时间是不是BCD码   HEX吗转换显示问题

使用特权

评论回复
地板
负熵|  楼主 | 2022-12-12 17:59 | 只看该作者
jerkoh 发表于 2022-12-12 14:38
没细看,结束就是0x00,  注意时间是不是BCD码   HEX吗转换显示问题

获取的时,分,秒是calendar.hour,calendar.min,calendar.sec,如果是
sprintf (time_display,"%d:%d:%d",calendar.hour,calendar.min,calendar.sec);
可以正常显示,就是小于10时10分10秒之显示一位,感觉不好看,想做成0x的格式,结果显示的内容就这样了。

使用特权

评论回复
5
luobeihai| | 2022-12-12 22:26 | 只看该作者
本帖最后由 luobeihai 于 2022-12-12 22:40 编辑

你这个代码问题也太多了吧。
1、你想格式化时间输出,小于10的时候,前面你想补0,这样好看。那你可以用格式 %02d控制格式化输出啊。
sprintf (time_display_hour,"%02d",calendar.hour);
sprintf (time_display_min,"%02d",calendar.min);
sprintf (time_display_sec,"%02d",calendar.sec);

这样子不就少了很多无用的代码了么。

2、你定义的 time_display_hour[2],time_display_min[2],time_display_sec[2]; 这几个局部变量,都是2字节的。但是你的 calendar.hour/min/sec 这个结构体的成员变量,他们的范围是多少。很明显不可能只有2字节(就算是char型,最大也可能转换成3字节字符串),这样转换之后输出的字符串就不止2字节了。而你就这样存储到2个字节的变量中,肯定内存越界了啊。你可以把那几个时分秒的数组定义大一些。

使用特权

评论回复
6
jerkoh| | 2022-12-13 08:13 | 只看该作者
本帖最后由 jerkoh 于 2022-12-13 08:18 编辑
负熵 发表于 2022-12-12 17:59
获取的时,分,秒是calendar.hour,calendar.min,calendar.sec,如果是
sprintf (time_display,"%d:%d:% ...

PCF8563 ,BCD时间 如下 参考
typedef struct
{
        unsigned char RTC_Hours;  //小时
        unsigned char RTC_Minutes;  //分钟
        unsigned char RTC_Seconds;  //秒钟
        unsigned char Reseved;  //保留
}_PCF8563_Time_Typedef;


typedef struct
{
        unsigned char RTC_Years;  //年份
        unsigned char RTC_Months;  //月份
        unsigned char RTC_Days;  //日期
        unsigned char RTC_WeekDays;  //星期,数值范围:0 ~ 6
}_PCF8563_Date_Typedef;



_PCF8563_Time_Typedef* HMS;
_PCF8563_Date_Typedef* YWMD;

char text[32];
//          YWMD->RTC_Years=0x22;   //22年
//          YWMD->RTC_Months=0x11;  //11月
//          YWMD->RTC_Days=0x05;   //5日
//          YWMD->RTC_WeekDays=0x06; //周六
//          HMS->RTC_Hours=0x17;  //17时
//          HMS->RTC_Minutes=0x58;  //58分
//          HMS->RTC_Seconds=inc_cnt++;
    sprintf(text, "20%02X", YWMD->RTC_Years);
    sprintf(text + 4, "-%02X", YWMD->RTC_Months);
    sprintf(text + 7, "-%02X", YWMD->RTC_Days);
    sprintf(text + 10, " %02X", HMS->RTC_Hours);
    sprintf(text + 13, ":%02X", HMS->RTC_Minutes);
    sprintf(text + 16, ":%02X", HMS->RTC_Seconds);
显示text   2022-11-05  17:58:01


使用特权

评论回复
7
公羊子丹| | 2024-10-11 07:17 | 只看该作者

应在操作时间内将胶料灌注完毕,否则影响流平

使用特权

评论回复
8
万图| | 2024-10-11 08:20 | 只看该作者

测试负载测试是在特定的测试条件下进行的

使用特权

评论回复
9
Uriah| | 2024-10-11 09:23 | 只看该作者

在测试中,可以改变负载电流,得到最大输出电流和输出电压

使用特权

评论回复
10
帛灿灿| | 2024-10-11 11:19 | 只看该作者

信号防雷电路应满足相应接口信号传输速率及带宽的需求,且接口与被保护设备兼容。

使用特权

评论回复
11
Bblythe| | 2024-10-11 12:22 | 只看该作者

随着对电路板模块的需求增加

使用特权

评论回复
12
周半梅| | 2024-10-11 14:18 | 只看该作者

防雷电路的输出残压值必须比被防护电路自身能够耐受的过电压峰值低,并有一定裕量

使用特权

评论回复
13
Pulitzer| | 2024-10-11 15:21 | 只看该作者

模信号是幅度相等且相位相同的信号

使用特权

评论回复
14
童雨竹| | 2024-10-11 17:17 | 只看该作者

Cfinal是CESD和人体电容的并联组合

使用特权

评论回复
15
Wordsworth| | 2024-10-11 18:20 | 只看该作者

构成各种滤波器对EMI进行滤波

使用特权

评论回复
16
Clyde011| | 2024-10-11 19:23 | 只看该作者

在动态测试之前,首先需要设定测试时间和测试频率

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

80

帖子

0

粉丝