Как правильно контролировать значение переменной на ЖКД? - PullRequest
1 голос
/ 21 октября 2019

Я отображаю температуру на ЖК-дисплее 16x2 с помощью микроконтроллера atmega16, в суперцикле я вызываю функцию для отображения температуры на экране, если температура равна 136 ° С (например), а температура становится 50 ° С,на экране отображается 50CC, я хочу, чтобы он был 50C, как изменить функцию, чтобы справиться с этим?

#include "lcd.h"
#include "adc.h"
#include "stdio.h"
#include "stdlib.h"

uint8 g_flag = 0 ;
uint16 g_adc_value = 0 ;
float32 g_voltage = 0 ;
float32 g_temprature = 0 ;
float32 g_resolution = 0.0048828 ;

void display_temprature(sint16 a_temprature) ;
int main(void)
{
    LCD_init() ;
    ADC_init() ;
    LCD_displayStringRowCol(0 , 1 , "Temprature is") ;
    while(1)
    {
        g_adc_value = ADC_readChannel(1) ;
        g_voltage = g_adc_value*g_resolution ;
        g_temprature = g_voltage / 0.01 ;
        display_temprature((sint16)g_temprature) ;
    }
}


void display_temprature(sint16 a_temprature)
{
    LCD_goToRowCol(1 , 7) ;
    LCD_integerToString(a_temprature) ;
    LCD_displayCharacter(223) ;
    LCD_displayCharacter('C') ;
}

1 Ответ

1 голос
/ 23 октября 2019

Существует два простых способа решения этой проблемы:

  1. Выполните команду «Очистить экран» на ЖК-дисплее, чтобы стереть предыдущий вывод.
  2. Записать строку пробелов длинойдостаточно, чтобы очистить предыдущий вывод.

Основная проблема, с которой вы сталкиваетесь, состоит в том, что конец более длинной строки, заканчивающийся на 'C', не стирается, когда вы позже выводите более короткую строку, такжезаканчивающийся на 'C'. Так что один из двух методов, описанных выше, должен решить вашу проблему.

...