PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hỏi về cái error trong LCD ? (http://www.picvietnam.com/forum/showthread.php?t=4748)

nhanthienthan 14-08-2009 11:46 PM

Hỏi về cái error trong LCD ?
 
Chương trình viết chữ XIN CHAO đơn giản như thế này
Code:

#include <16f877A.h>
#fuses HS, NOLVP, NOWDT, NOPROTECT
#use  delay (clock=4000000) //Use built-in function: delay_ms() & delay_us()
#include "LCD_LIB_4BIT.c"


VOID MAIN()

{
  LCD_INIT();
  LCD_PUTCHAR('X');
  DELAY_MS(1000);
  LCD_PUTCHAR('I');
  DELAY_MS(1000);
  LCD_PUTCHAR('N');
  DELAY_MS(1000);
  LCD_PUTCHAR(' ');
  DELAY_MS(1000);
  LCD_PUTCHAR('C');
  DELAY_MS(1000);
  LCD_PUTCHAR('H');
  DELAY_MS(1000);
  LCD_PUTCHAR('A');
  DELAY_MS(1000);
  LCD_PUTCHAR('O');
}

Còn đây là file LCD_LIB_4BIT.c

#include <stddef.h>
#define LCD_RS          PIN_B2
#define LCD_EN          PIN_B3
#define LCD_D4          PIN_B4
#define LCD_D5          PIN_B5
#define LCD_D6          PIN_B6
#define LCD_D7          PIN_B7
#define Line_1          0x80
#define Line_2          0xC0
#define Clear_Scr      0x01
#separate void LCD_Init ();// ham khoi tao LCD
#separate void LCD_SetPosition ( unsigned int cX );//Thiet lap vi tri con tro
#separate void LCD_PutChar ( unsigned int cX );// Ham viet1kitu/1chuoi len LCD
#separate void LCD_PutCmd ( unsigned int cX) ;// Ham gui lenh len LCD
#separate void LCD_PulseEnable ( void );// Xung kich hoat
#separate void LCD_SetData ( unsigned int cX );// Dat du lieu len chan Data

//khoi tao LCD**********************************************
#separate void LCD_Init ()
    {
    LCD_SetData ( 0x00 );
    delay_ms(20);      /*Cho cho lcd khoi tao */
    output_low ( LCD_RS );// che do gui lenh
    LCD_SetData ( 0x03 );  /* khoi tao che do 4 bit */
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_SetData ( 0x02 );  /* tao giao dien 4 bit */
    LCD_PulseEnable();      /* send dual nibbles hereafter, MSN first */
    LCD_PutCmd ( 0x2C );    /* function set (all lines, 5x7 characters) */
    LCD_PutCmd ( 0x0C );    /* display ON, cursor off, no blink */
    LCD_PutCmd ( 0x06 );    /* entry mode set, increment & scroll left */
    LCD_PutCmd ( 0x01 );    /* clear display */

    // Init for BarGraph

    }

#separate void LCD_SetPosition ( unsigned int cX )
    {
    /* this subroutine works specifically for 4-bit Port A */
    LCD_SetData ( swap ( cX ) | 0x08 );
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );
    LCD_PulseEnable();
    }

#separate void LCD_PutChar ( unsigned int cX )
    {
    /* this subroutine works specifically for 4-bit Port A */
        output_high ( LCD_RS );
        LCD_PutCmd( cX );
        output_low ( LCD_RS );
    }
#separate void LCD_PutCmd ( unsigned int cX )
    {
    LCD_SetData ( swap ( cX ) );    /* send high nibble */
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );    /* send low nibble */
    LCD_PulseEnable();
    }
#separate void LCD_PulseEnable ( void )
    {
    output_high ( LCD_EN );
    delay_us ( 3 );        // was 10
    output_low ( LCD_EN );
    delay_ms ( 3 );        // was 5
    }
#separate void LCD_SetData ( unsigned int CX )
    {
    output_bit ( LCD_D4, CX & 0x01 );
    output_bit ( LCD_D5, CX & 0x02 );
    output_bit ( LCD_D6, CX & 0x04 );
    output_bit ( LCD_D7, CX & 0x08 );
    }

Viết trong CCS nhưng khi em nhấn f9 thì nó hiện lỗi này là sao ạ

***Eroor 128"LCD_LIB_4BIT.c"Line12(2,10): A#DEVICE require before this line

Mong các bro giúp đỡ, em mới học Pic nên chưa thành thạo lăm

phamminhtuan 15-08-2009 09:46 AM

Bạn dịch trong MPLAB đúng không? remove file LCD_LIB_4BIT.c ra khỏi cửa sổ Project, vì nếu để file LCD_LIB_4BIT.c trong đó, MPLAB sẻ chỉ thị cho CCS dịch file LCD_LIB_4BIT.c dạng Object để liên kết với các file khác, do đó, lúc này LCD_LIB_4BIT.c cũng cần có những chỉ thị kiểu #include<16f887.h>, #use delay(....

nhanthienthan 15-08-2009 11:22 AM

Em đã remove cái file đó nhưng mà vẫn hiện lỗi như trên là sao ạ :|

phamminhtuan 15-08-2009 12:08 PM

1 Attachment(s)
Của bạn đây, mình chỉ copy code của bạn , không sửa gì cả, dịch ok

nhanthienthan 15-08-2009 03:42 PM

Vẫn ko đc. Eroor nó chỉ lên cái dòng này

#separate void LCD_Init ();// ham khoi tao LCD

mà cụ thể là cái chữ #separate. Là sao ạ:|

vidieukhiencdn 15-08-2009 04:20 PM

1 Attachment(s)
Trích:

Nguyên văn bởi nhanthienthan (Post 28678)
Vẫn ko đc. Eroor nó chỉ lên cái dòng này

#separate void LCD_Init ();// ham khoi tao LCD

mà cụ thể là cái chữ #separate. Là sao ạ:|

Đã chỉnh dùm cái LCD hết lỗi bạn xem nhé, có kèm theo cho bạn cái file proteus để test luôn. Chạy ok

Chúc vui

8051topic 15-08-2009 10:30 PM

Mọi người cho mình hỏi xíu: cấp nguồn vào mà LCD sáng trưng lên vậy có chắc là con LCD còn sống không?
Chân Contrast nối Vcc, GND, hay bỏ lửng độ sáng cũng không thay đổi nữa.
Mình mới làm thôi, nhờ mọi người chia sẻ kinh nghiệm với!

Mr.Bi 16-08-2009 12:11 AM

Trích:

Nguyên văn bởi 8051topic (Post 28690)
Mọi người cho mình hỏi xíu: cấp nguồn vào mà LCD sáng trưng lên vậy có chắc là con LCD còn sống không?
Chân Contrast nối Vcc, GND, hay bỏ lửng độ sáng cũng không thay đổi nữa.
Mình mới làm thôi, nhờ mọi người chia sẻ kinh nghiệm với!

LCD sáng là led trong màn hình sáng chứ chưa chắc LCD còn hoạt động tốt .
nên dùng 1 biến trở , nối chân giữa biến trở vào chân Contrast , 2 chân còn lại của biến trở nối Vcc và GND . chỉnh biến trở để thấy 1 hàng trên màu đen là LCd còn sống

vidieukhiencdn 16-08-2009 12:28 AM

1 Attachment(s)
Trích:

Nguyên văn bởi 8051topic (Post 28690)
Mọi người cho mình hỏi xíu: cấp nguồn vào mà LCD sáng trưng lên vậy có chắc là con LCD còn sống không?
Chân Contrast nối Vcc, GND, hay bỏ lửng độ sáng cũng không thay đổi nữa.
Mình mới làm thôi, nhờ mọi người chia sẻ kinh nghiệm với!

Bạn mắc như hình vẽ rùi chỉnh VR xem sao nhé

8051topic 16-08-2009 03:52 PM

Vậy chắc con LCD của mình chết rồi, vì mình chỉ cấp nguồn là nó sáng liền còn chân Vee chỉnh contrast thì chỉnh sao nó cũng không hiển thị gì hết.
@vidieukhiencdn: hai chân 15, 16 mình bỏ trống nhưng thấy sơ đồ của bạn mình cũng mắc thử và kết quả cũng vậy luôn, chắc là tiêu lun rồi.
Hi!

nhanthienthan 16-08-2009 04:56 PM

Trích:

Nguyên văn bởi vidieukhiencdn (Post 28681)
Đã chỉnh dùm cái LCD hết lỗi bạn xem nhé, có kèm theo cho bạn cái file proteus để test luôn. Chạy ok

Chúc vui

Cảm ơn bạn, nó đã chạy tốt. Nhưng mà mình vẫn ko hiểu vì sao cái chương trình của bạn giống đúc của mình mà của bạn chạy đc mà của mình lại ko :(

nhanthienthan 16-08-2009 05:19 PM

Quái, quái thiệt, ban đầu tải cái chương trình của bạn về thì chạy tốt. Đến khi move nó đi chỗ khác là lại xuất hiện cái lỗi lúc trước mình nói. Bất lực quá :((

vidieukhiencdn 16-08-2009 05:39 PM

-CT mình sửa là của bạn chứ mình thêm bớt j đâu

-Nếu vậy thì mình bó tay rùi, bạn nên sửa ngay trên code mình gửi đừng chép lung tung kẻo báo lỗi

chúc thành công

trantiendt9 13-10-2011 11:01 AM

lcd_4bit
 
Trích:

Nguyên văn bởi vidieukhiencdn (Post 28681)
Đã chỉnh dùm cái LCD hết lỗi bạn xem nhé, có kèm theo cho bạn cái file proteus để test luôn. Chạy ok

Chúc vui

bạn ơi,cho mình hỏi,mình chạy file lcd_4bit.c thì báo lỗi ở dòng #separate void LCD_Init ();
nhưng khi mô phỏng lại chạy bình thường không vấn đề gì,nhưng khi test thử trên mạch thật lcd mình không hiện dữ liệu j cả :) thank

hangocminh1989 14-10-2011 01:05 AM

Trích:

Nguyên văn bởi trantiendt9 (Post 50602)
bạn ơi,cho mình hỏi,mình chạy file lcd_4bit.c thì báo lỗi ở dòng #separate void LCD_Init ();
nhưng khi mô phỏng lại chạy bình thường không vấn đề gì,nhưng khi test thử trên mạch thật lcd mình không hiện dữ liệu j cả :) thank

báo lỗi thế nào bạn? bạn dịch file nào? gửi cả cái code lên đây coi nào?


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

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