tienchuan
25-10-2009, 10:21 PM
Mình đang làm mạch giao tiếp giữa PIC877A với LCD 16x2,viết ở chế độ 4 bit.Đọc giá trị ADC từ kênh AN0 rồi hiển thị lên LCD.Mình đọc trên forum/net,và viết lại như sau:
while(1)
{
i++;
value =(float) read_adc();
value = value*0.48828125;
if (i==500)
{
convert_bcd((int16)value);
i=0;
}
{
lcd_gotoxy(1,1);
printf(LCD_putc,"Nhiet do:");
LCD_putc(high);
LCD_putc(low);
LCD_putc(".");
LCD_putc(digit);
}
delay_ms(3000);
}
// void convert_bcd(int16 x)
{
high=x/100;
medium=x%100;
low=medium/10;
digit=medium%10;
low = low + 0x30;
high = high + 0x30;
digit=digit+0x30;
}
Mình không hiểu tại sao phải cộng thêm 0x30(=48=số 0 )
Và nếu viết trực tiếp như cách dưới có được ko???
lcd_init();
read=read_adc();
read =read*0.48828125;
printf(lcd_putc,"\rHien thi: %u",read);
delay_us(20);
Mong các ACE giải đáp giúp !
Mình đã nạp thử ct nhưng chạy ko đúng!
Thanks !
while(1)
{
i++;
value =(float) read_adc();
value = value*0.48828125;
if (i==500)
{
convert_bcd((int16)value);
i=0;
}
{
lcd_gotoxy(1,1);
printf(LCD_putc,"Nhiet do:");
LCD_putc(high);
LCD_putc(low);
LCD_putc(".");
LCD_putc(digit);
}
delay_ms(3000);
}
// void convert_bcd(int16 x)
{
high=x/100;
medium=x%100;
low=medium/10;
digit=medium%10;
low = low + 0x30;
high = high + 0x30;
digit=digit+0x30;
}
Mình không hiểu tại sao phải cộng thêm 0x30(=48=số 0 )
Và nếu viết trực tiếp như cách dưới có được ko???
lcd_init();
read=read_adc();
read =read*0.48828125;
printf(lcd_putc,"\rHien thi: %u",read);
delay_us(20);
Mong các ACE giải đáp giúp !
Mình đã nạp thử ct nhưng chạy ko đúng!
Thanks !