PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-10-2009, 10:21 PM   #1
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Arrow 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 !

thay đổi nội dung bởi: tienchuan, 26-10-2009 lúc 11:14 AM.
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-10-2009, 09:47 AM   #2
nhamdtk4
Đệ tử 3 túi
 
nhamdtk4's Avatar
 
Tham gia ngày: Feb 2009
Bài gửi: 47
:
- 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.
nhamdtk4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-10-2009, 11:19 AM   #3
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Trích:
Nguyên văn bởi nhamdtk4 View Post
- 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!
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:47 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam