我想编程我自己的版本的变差表示爬升和水槽以米/秒为单位。这些值显示在LCD模块屏幕上。在程序运行时,可以通过旋转的电位计缩小爬升值和吸入值。要显示的爬升值范围从climb: 0 m/s
到climb: 300 m/s
,并且下降值范围从sink: 0 m/s
到sink: -300 m/s
。这一点很好。颠倒C条形图的方向
我现在要做的就是以零点在中心的条形图的形式显示它们。当climb
增加到300时,零点右侧的块从左到右填充。当sink
值减少到-300时,我希望零点左侧的块从右向左填充,实质上反转右侧的方向。
climb = (DELVAL*600ul + 1023/2)/1023;
sink = (DELVAL*600ul + 1023/2)/1023;
climb2 = ((DELVAL-511.5)*600ul + 1023/2)/1023;
sink2 = ((DELVAL+511.5)*600ul + 1023/2)/1023;
if (DELVAL > 511.5)
{
sprintf(buf, "Climb: +%d m/s ", climb-300);
lcd_putxy(2,0,buf);
for (delay = 0; delay < 50000; delay++);
}
if (DELVAL < 511.5)
{
sprintf(buf, "Sink: -%d m/s ", ~sink+300);
lcd_putxy(2,0,buf);
for (delay = 0; delay < 50000; delay++);
}
character1 = climb2/35;
character2 = sink2/35;
lcd_move(1,10);
for (i = 0; i < character1; i++)
{
lcd_putchar(0xD0);
}
lcd_putstr(" ");
for (delay = 0; delay < 50000; delay++);
lcd_move(1,2);
for (i = 0; i < character2; i++)
{
lcd_putchar(0xD0);
}
for (delay = 0; delay < 50000; delay++);
DELVAL
是从电位器读取的数据。我可以让条形图的右侧工作,但不能让左侧工作。任何人都可以让我知道我的代码的任何问题,并解释让左侧工作的最佳方法。
在我的代码中不工作的部分是包含character2
的for循环。
您需要添加一些所需输出示例。例如,在休息时(零爬/下沉),你可能需要'░░░░█░░░░';最大爬升量为'█████',最大量为'█████░░░░'。或类似的东西。您可以复制粘贴Unicode [block element](https://en.wikipedia.org/wiki/Block_Elements)或[box drawing](https://en.wikipedia.org/wiki/Box-drawing_character)字符维基百科页面。还有StackOverflow [markdown编辑帮助](http://stackoverflow.com/editing-help)。 –
您正在使用哪种LCD控制器? – Uint32
@NominalAnimal你拥有它的方式正是我想要的。唯一的区别是中间零点需要一个更大的块字符。我有右手侧的工作,但一旦进入左侧'水槽'侧,液晶显示器将在屏幕上显示块。 –