This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PM:将值写入 LCD

Guru**** 2042920 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/591491/tm4c123gh6pm-prepending-values-written-to-lcd

器件型号:TM4C123GH6PM

我从 TivaLaunchpad 成功获得写入 Kentec BoosterPack 显示屏的字符。  但是、当我写入的值下降一个数量级时、我将得到一个持续的数字。  例如、我将写入1546、但没关系。  但是、如果该值变为63、则屏幕上读取的值为:6346 、因为它没有覆盖1546数字的"46"部分。  我尝试将"%"更改为"%+"、但它不起作用、我收到错误。

如果您更清楚地了解我在写入新值之前应该如何清除我的值、请提出建议。  但是、我仍需要正确调整新值、以便1的位置始终在显示的值中对齐。  无论前置零件是否为空白或0、目前对我来说都没有太大的影响。

作为次要后续步骤: 我最终将不得不写入十进制值、而我转换的方式仅适用于整数。  如果您可以建议一种将整数写入屏幕的方法、那将非常好。  或者、如果您能向我指出一个同样精彩的资源。

下面是我当前写入屏幕的方式:

#include 
#include 

extern uint32_t 引用;
extern tContext sContext;
extern tRectangle sRect;
char ref_buf[5];
char sample_buf[5];

void screen_update (void){
TimerIntClear (TIMER5_base、TIMER_TINA_TIMEOUT);

//从网站: stackoverflow.com/.../how-to-convert-uint64-t-value-in-const-char-string
snprintf (ref_buf、5、"%"PRIu32、参考); //将整数 ADC 值转换为 const char*
snprintf (sample_buf、5、"%"PRIu32、VelocityFB); //将整数 ADC 值转换为 const char*

//用黑色书写,清除最后显示的值
GrContextForegroundSet (&sContext、ClrBlack);
GrStringDraw (&S) Context、ref_Buf、6、150、2、 1);
GrStringDraw (&S Context、sample_buf、6、150、40、 1);

//在屏幕上写入新显示的值
GrContextForegroundSet (&sContext、ClrRed);
GrStringDraw (&S) Context、ref_Buf、5、150、2、 0);
GrStringDraw (&S Context、sample_buf、5、150、40、 0);
GrFlush (sContext);


}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 snprintf()之后,如果字符为'\0'(0x00),则在调用 GrStringDraw ()之前,您是否考虑过执行 for 循环,该循环将读取字符串中的每个字符,如果该字符为'\0'(0x00),则将其替换为空格(0x20)。 除字符串中的最后一个字符外、每0x00替换为0x020。 您现在传递给 GrStringDraw ()的字符串将始终具有相同的长度,并且空格将覆盖先前的值。 您可能需要使用具有固定大小的所有字符的字体。 如果字符串的末尾始终有足够的空间来覆盖旧字符、则可能不会。

    当我要使用不支持浮点的"printf"版本打印浮点数时、我只需将其分解为两个数字。 我以浮点形式进行计算。 我使用 modf()将小数拆分为整数和小数部分。 然后、我将小数部分乘以10、即可显示小数部分的数量、例如"ui32_FRAC = f_FRAC * 100.0"、显示范围可低至百分之一。 然后打印整数、小数点和表示小数部分的整数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob、好主意。 我现在正在尝试实现它们。