我用hitech C编写了一张16f84a的pic来驱动hd44780液晶显示器。到目前为止,我已经初始化了lcd,可以将单个字符和字符串写入lcd。现在我需要这样做:
var = 250;
lcd_write_string("MyVar有值:“+ var);
因此,液晶屏应该显示"MyVar has value: 250“。
首先,我应该如何连接一个变量和一个字符串?其次,变量var包含一个8位二进制数(十进制中的0-255)。如果var = 23;则8位数字必须被分成2以表示ascii中的2和3,然后由lcd显示。我该怎么做呢?似乎我必须做基数10转换或if树,以拆分所有2位数字,然后显示在lcd上。有没有更简单的方法来解决这个问题?
谢谢!
发布于 2009-09-13 07:42:43
为什么不直接使用printf("%d", var)呢?
var = 250;
char *static_msg = "MyVar has value:";
char msg[sizeof(static_msg) + 4];
sprintf(msg, "%s %d", static_msg, var);
lcd_write_string(msg);发布于 2009-09-13 08:08:32
假设您的工具集不包含标准C库,或者您希望自己弄清楚如何做到这一点,以下是我将采取的方法:
声明一个与LCD所能显示的字符数相同的缓冲区。将固定字符串写入该缓冲区的开头。确定变量的字符宽度(我在这里省略了一些数学,但我认为这是一个合理的练习)。使用该长度和固定字符串的长度,计算出数字在缓冲区中的位置。使用与前面相同的数学结构,一个接一个地将数字写入该空间。C语言有一个技巧(标准要求),它允许您通过表达式'0' + digit计算出十进制数字的字符值。希望您能看到它是如何工作的。最后,以lcd_write_string函数期望的方式终止缓冲区,并在缓冲区上调用它。
正如其他受访者所指出的,这基本上实现了标准库的printf函数家族中的一小部分。我认为即使你能(也应该)弄清楚它的实现是值得的!在生产代码中使用该库。
由于这闻起来有点像家庭作业,所以我暂时不会进一步详细说明。如果您需要有关特定问题的帮助,我将查找该问题的更新。
发布于 2009-09-13 07:45:02
如果C编译器附带标准的C库函数,那么可以使用类似于printf的sprintf来生成字符串。
sprintf可用于生成格式化的字符串(如char*),该字符串可能会被发送到lcd_write_string函数。
https://stackoverflow.com/questions/1417109
复制相似问题