在这里输入代码
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 描述:
我使用单键在同一列上读取多个值(0-9)(使用2行LCD显示)。
读取值存储在StoreUserId数组中(因为col ++数组也增加了)
调用上面的函数来为SEC,MINUTE,HOUR保存值。
打印StoreUserid以正确输入交叉检查值。
但转换后(检查乘法* 10)TempSecond,TempMinute,TempHour会在转换后显示随机值,而不是问题在哪里?
答案 0 :(得分:0)
你的问题几乎肯定在这里:
{sprintf(MyStr,"%c",(unsigned int)StoreUserID[i]);
我无法知道您如何宣布StoreUserID
数组(char
?为int
?)以及为什么一直投放到unsigned int
(对于小的正数,year
或seconds
,它没有任何意义),但有两个最可能的更正:
{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'
以从裸号中获取字符表示。