0
저는 MCU ATMega16과 디지털 전압계를 사용하고 있습니다. LCD 디스플레이에 10 진수를 표시하고 싶습니다.AtmelStudio ADC 출력 십진수 값
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
#include <stdlib.h>
signed int temp = 0;
double voltage = 0;
char buffer[10];
int main(void)
{
DDRD = 0b11111111;
PORTD = 0b00000000;
DDRB = 0b00001111;
PORTB = 0b00000000;
ADMUX = (0<<REFS1)|(1<<REFS0);
ADCSRA |= (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
lcd_init(LCD_DISP_ON_CURSOR);
_delay_ms(100);
lcd_clrscr();
lcd_home();
lcd_puts("Voltage= ");
while (1)
{
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
ADCSRA |= (1<<ADIF);
temp = ADCW;
if(temp <= 0)
{
lcd_gotoxy(8, 0);
lcd_puts("Null");
_delay_ms(100);
}
else
{
voltage = (5.0 * temp * 5)/1023;
lcd_gotoxy(8, 0);
sprintf(buffer, "%f", voltage);
lcd_puts(buffer);
_delay_ms(100);
}
}
}
이 .. 그리고 작동 : 이 내 코드입니다. 12.3 볼트로 배터리를 측정하면 LCD 값이 12.31671에 표시됩니다. 하지만, 프로젝트 설정을 "sprintf"함수로 변경했기 때문에 programm에 10 진수가 표시됩니다. LCD 디스플레이에 10 진수를 수동으로 어떻게 표시합니까? 도와주세요. 나는 그것을 만드는 방법을 이해할 수 없다. 나는 프로젝트 설정을 기본값으로 되돌리고 "spoaf"대신 "itoa"를 사용하면 programm에 숫자 12가 표시됩니다. 장래에 7 세그먼트 디스플레이에 값을 표시하고자하므로 필요합니다.
int를 double 대신 전압으로 사용하거나 십진수 만 사용하려면 int로 변환하십시오. – koper89
** [ "Arduino sprintf float not formatting"] (http://stackoverflow.com/a/27652012/6945651) **에 대한 답변을 살펴보십시오. 유용한 함수'dtostrf()'가 문제를 해결해야합니다. –