Các bác cho em hỏi một chút về ADC 10 bit của 18F4550. Đối với ADC 8 bit thì không vấn đề j nhưng với ADC 10bit thì khi cho hiển thị lên LCD nó chạy linh tinh cả và chữ số hàng nghìn bị lỗi. Em post cả code lên. Bác nào biết chỉ dùm em cái. Thanks.
Code:
#include <18f4550.h>
#device ADC = 16
#include <string.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
#include <lcd.c>
long data = 0;
int8 donvi = 0,chuc = 0,tram = 0,nghin = 0;
//Chuong trinh hien thi
void Display(long x)
{
donvi = (x%10);
chuc = ((x%100)/10);
tram = ((x/100)%10);
nghin = (x/1000);
if(nghin>0)
{
lcd_putc("Bien tro:");
lcd_putc(nghin+48);
lcd_putc(tram+48);
lcd_putc(chuc+48);
lcd_putc(donvi+48);
}
else if(tram>0)
{
lcd_putc("Bien tro:");
lcd_putc(tram+48);
lcd_putc(chuc+48);
lcd_putc(donvi+48);
}
else if(chuc>0)
{
lcd_putc("Bien tro:");
lcd_putc(chuc+48);
lcd_putc(donvi+48);
}
else if(donvi>0)
{
lcd_putc("Bien tro:");
lcd_putc(donvi+48);
}
}
//Chuong trinh hien thi
//Chuong trinh chinh
void Main()
{
//LCD setup
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("PLEASE WAIT...");
delay_ms(4000);
lcd_putc('\f');
lcd_putc("START");
delay_ms(2000);
lcd_putc('\f');
//ADC setup
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports( AN0 );
set_adc_channel( 0 );
delay_us(10);
While ( true )
{
data = Read_ADC();
Display(data);
delay_ms(1000);
lcd_putc('\f');
}
}