0

我正在从电位计读取值,我可以旋转该电位计以产生 0-1023 范围内的数字。我希望能够在 LCD 屏幕上以水平条形图的形式显示这些数字。LCD 屏幕为 20 块宽,因此 0-1023 必须按比例缩小到 0-20。我想用来生成条形图的字符是一个块,它填充了 20 个可用块中的一个完整块。此块的位模式是0b11110001.

   block = 0b11110001; 
   BarGraph = ((DELVAL2/5115)*2000);

   lcd_putxy(2,0,buf);
   for (delay = 0; delay < 50000; delay++);      // introduce a delay 

   sprintf(buf, "*", BarGraph); 
   lcd_putxy(2,0,buf);

我希望有人可以向我解释如何实现这一点以及缩小电位器值的最佳方法。

4

2 回答 2

1

你的计算有错误

 BarGraph = ((DELVAL2/5115)*2000);

DELVAL2 为 0-1023。你将它除以 5115,所以你得到的值介于 0 和 1 之间。它可能被强制转换为 0。0 乘以 2000 仍然是 0。

尝试先乘,然后除:

BarGraph = (DELVAL2*2000/5115);

也用于打印

 sprintf(buf, "*", BarGraph); 

不管用。请参阅 sprintf 函数或简单的使用循环将符号放入 buf 数组。

于 2016-12-14T21:34:52.703 回答
0

您需要做的就是获取 ADC 的全部范围并将其除以 LCD 字符数 (1024 / 20 = 51.2)。将值向上舍入到 52 以包括 ADC 范围内的所有可能值。这意味着您有 20 个可用的 LCD 字符来显示 0 - 1023 的完整范围。每个 LCD 字符将代表 0 到 52 个 ADC 计数(由于舍入,最后一个除外)。

伪代码:

  • 首先,清除显示以获取新更新。
  • 检查 ADC 计数是否 >= 0 且 ADC 计数 <= 51:打开 LCD 模块 0。
  • 否则,如果 ADC 计数 >= 52 且 ADC 计数 <=103:打开 LCD 块 0 和 1。
  • 否则,如果 ADC 计数 >=104 且 ADC 计数 <=155:打开 LCD 模块 0 & 1 & 2。

您将为所有剩余的 17 个条目执行这种模式。

干杯!

于 2016-12-14T19:29:01.590 回答