在C中缩小一系列数字



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

我希望有人可以向我解释如何实现这一目标,也是缩放电位计值的最佳方法。

您的计算有错误

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

delval2是0-1023。您将其除以5115,因此您的价值在0到1之间。它可能被铸造为0。02000的mutlighiged仍然是0。

尝试首先乘,然后分开:

BarGraph = (DELVAL2*2000/5115);

也用于打印

 sprintf(buf, "*", BarGraph); 

将行不通。请参阅sprintf函数或简单使用循环以将符号放入BUF数组中。

您要做的就是取ADC的完整范围,然后除以LCD字符的数量(1024/20 = 51.2)。将值舍入最高52,以在ADC范围内包含所有可能的值。这意味着您有20个可用的LCD字符显示全范围为0-1023。每个LCD字符将代表0到52 ADC计数(除了圆形而导致的最后一个)。

伪代码:

  • 首先,清除新更新的显示。
  • 检查ADC计数> = 0和ADC Counts&lt; = 51:打开'On'lcd Block 0。
  • else如果ADC计数> = 52和ADC Counts&lt; = 103:打开'On'lcd Block 0&amp;1。
  • else如果ADC计数> = 104,并且ADC Counts&lt; = 155:打开'On'lcd块0&amp;1&amp;2。

您将为其余17个条目做这种模式。

欢呼!

最新更新