我正在从电位器中读取值,我可以旋转以产生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个条目做这种模式。
欢呼!