PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Cần giúp đỡ về việc đọc ADC và hiển thị ra LCD! (http://www.picvietnam.com/forum/showthread.php?t=5164)

tienchuan 25-10-2009 10:21 PM

Cần giúp đỡ về việc đọc ADC và hiển thị ra LCD!
 
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:

Code:

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???
Code:

      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 !

nhamdtk4 26-10-2009 09:47 AM

- LCD chỉ hiển thị ký tự. Với các số đếm bạn muốn hiển thị lên LCD thì phải chuyến nó thành mã ASCII mà mã ASCII của một số đếm = chính số đó + 0x30 (=> mục đích của việc cộng thêm 0x30 là để chuyển số đó thành ký tự chứ ko phải là số đếm).
- VD: Muốn hiển thị số 0 thì cần 0 + 0x30 để thành ký tự "0".
- Còn với
Code:


read =read*0.48828125;
printf(lcd_putc,"\rHien thi: %u",read);

Bạn để ý là u (unsigned) là định dạng cho số nguyên ko dấu 8 bit còn biến read của bạn lại là ....thế thì liệu có hiển thị đc ko.

tienchuan 26-10-2009 11:19 AM

Trích:

Nguyên văn bởi nhamdtk4 (Post 30570)
- LCD chỉ hiển thị ký tự. Với các số đếm bạn muốn hiển thị lên LCD thì phải chuyến nó thành mã ASCII mà mã ASCII của một số đếm = chính số đó + 0x30 (=> mục đích của việc cộng thêm 0x30 là để chuyển số đó thành ký tự chứ ko phải là số đếm).
- VD: Muốn hiển thị số 0 thì cần 0 + 0x30 để thành ký tự "0".
- Còn với
Code:


read =read*0.48828125;
printf(lcd_putc,"\rHien thi: %u",read);

Bạn để ý là u (unsigned) là định dạng cho số nguyên ko dấu 8 bit còn biến read của bạn lại là ....thế thì liệu có hiển thị đc ko.

ukm,cảm ơn bạn,để mình coi lại phần ép kiểu biến...có gì thông báo cho ACE sau !
Thanks all!


Múi giờ GMT. Hiện tại là 04:25 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam