缩小C

时间:2016-12-14 18:29:36

标签: c microcontroller scaling 68hc12

我正在从电位计读取值,我可以旋转以产生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);

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

2 个答案:

答案 0 :(得分:1)

您的计算错误

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

DELVAL2是0-1023。你将它除以5115,所以你得到0到1之间的值。它可能被转换为0. 0多重的2000仍然是0。

首先尝试乘法,然后除以:

BarGraph = (DELVAL2*2000/5115);

也用于打印

 sprintf(buf, "*", BarGraph); 

不起作用。请参阅sprintf函数或简单使用循环以将符号放入buf数组中。

答案 1 :(得分:0)

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

伪代码:

  • 首先,清除显示屏以进行新的更新。
  • 检查ADC计数是否> = 0且ADC计数<= 51:打开&#39;打开&#39; LCD Block 0。
  • 否则,如果ADC计数&gt; = 52且ADC计数<= 103:打开&#39; ON&#39; LCD Block 0&amp; 1。
  • 否则,如果ADC计数&gt; = 104且ADC计数<= 155:打开&#39; ON&#39; LCD Block 0&amp; 1&amp; 2。

您可以为剩余的17个条目执行此类模式。

干杯!