PDA

View Full Version : Hỏi về cái error trong LCD ?


nhanthienthan
14-08-2009, 11:46 PM
Chương trình viết chữ XIN CHAO đơn giản như thế này

#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
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
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
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
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
Đã 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
Đã 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
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?