0

我想编写我自己版本的变差计来表示以米/秒为单位的爬升下沉。这些值显示在 LCD 模块屏幕上。爬升和下沉值是从电位器按比例缩小的,我可以在程序运行时旋转该电位器来更改值。要显示的爬升值范围从climb: 0 m/sclimb: 300 m/s,下沉值范围从sink: 0 m/ssink: -300 m/s。这点没问题。

我现在要做的是以条形图的形式显示这些,中心为零点。随着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.

4

1 回答 1

1

你没有描述什么不起作用。但我猜左边是从左到右绘制的,而不是你想要的从右到左绘制的。您打算将左侧的方向反转到哪里?

试试这个反转左侧。请注意,如果您使用更具描述性的变量名称、注释和更少的幻数,那么您的代码将更容易理解。

int left_bar_length = character2;
int max_bar_length = 300 / 35;
int left_scale_edge = 2;
int scale_center = left_scale_edge + max_bar_length;

// Move cursor to left end of left bar.
lcd_move(1, scale_center - left_bar_length);                                      

// Draw the left bar.
for (i = 0; i < left_bar_length; i++)                     
{    
     lcd_putchar(0xD0);         
} 
于 2016-12-15T14:05:33.543 回答