lpc2148 RTC打印问题

时间:2017-04-13 17:58:25

标签: c

在这里输入代码

void DateTimeConversion (void)
{
  unsigned char TempDay,TempMonth,TempYear,i;
  unsigned char TempHour,TempMinute,TempSecond;
  TempDay=0;TempMonth=0;TempYear=0;TempHour=0;TempHour=0;TempSecond=0;
  col=1;
  for(i=0;i<10;i++)
  {
    sprintf(MyStr,"%c",(unsigned int)StoreUserID[i]);
    ClcdGoto(col,2);ClcdPutS_P(MyStr);
    col++;
  }

  TempDay=((unsigned int)(StoreUserID[6] * 10) + (unsigned int)(StoreUserID[7] * 1));
  TempMonth=((unsigned int)(StoreUserID[8] * 10) + (unsigned int)(StoreUserID[9] * 1));
  TempYear=((unsigned int)(StoreUserID[4] * 10) + (unsigned int)(StoreUserID[5] * 1));
  TempHour   = ((unsigned int)(StoreUserID[0] *10) + (unsigned int)(StoreUserID[1] * 1));
  TempMinute = ((unsigned int)(StoreUserID[2] *10) + (unsigned int)(StoreUserID[3] * 1));
  TempSecond = ((unsigned int)(StoreUserID[4] *10) + (unsigned int)(StoreUserID[5] * 1));
}

我正在使用LPC 2148进行RTC 描述:

  1. 我使用单键在同一列上读取多个值(0-9)(使用2行LCD显示)。

  2. 读取值存储在StoreUserId数组中(因为col ++数组也增加了)

  3. 调用上面的函数来为SEC,MINUTE,HOUR保存值。

  4. 打印StoreUserid以正确输入交叉检查值。

  5. 但转换后(检查乘法* 10)TempSecond,TempMinute,TempHour会在转换后显示随机值,而不是问题在哪里?

1 个答案:

答案 0 :(得分:0)

你的问题几乎肯定在这里:

{sprintf(MyStr,"%c",(unsigned int)StoreUserID[i]);

我无法知道您如何宣布StoreUserID数组(char?为int?)以及为什么一直投放到unsigned int (对于小的正数,yearseconds,它没有任何意义),但有两个最可能的更正:

{sprintf(MyStr,"%c", StoreUserID[i]);      // for character representation in StoreUserID[]

或 - 我认为这是你的情况 -

{sprintf(MyStr,"%c",StoreUserID[i] + '0'); // for numerical one - the conversion is needed

说明:

数字0包含字符代表'0',这是一些数字(ASCII格式为48)。
数字1包含字符表示'1',这是下一个数字(ASCII格式为49)。
......等等 因此,您需要添加值'0'以从裸号中获取字符表示