Thông báo

Collapse
No announcement yet.

đến nản với con LCD. cao thủ nào giúp em vói

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    nó hiện như vậy là đã khởi tạo được LCD rồi đó bạn. Bạn xem trong file lcd.c có khúc này trong hàm lcd_putc:

    if(isprint(c)){
    lcd_put_byte(1, c);
    while(lcd_busy());
    }


    mình không biết hàm isprint có tác dụng gì nhưng mình nghĩ nên sửa lại thành :

    lcd_put_byte(1,c);
    while(lcd_busy());


    Do bạn đã khởi tạo được LCD nên chắc chắn là bạn đã gửi được byte ra LCD do đó trong hàm main bạn có thể dùng hàm lcd_put_byte để test việc gửi kí tự cũng được. Ví dụ ghi là : lcd_put_byte(1,65);(Hiện chữ A)

    Comment


    • #32
      tình hình là mình đã sửa file lcd.c như bạn nói, thử đủ kiểu (lcd_putc(0x30); lcd_puts("hello"); lcd_put_byte(1, 65);...) nhưng vẫn không có hiện tượng gì hết ! có phải lỗi của thư viện lcd.c ???

      Comment


      • #33
        Mình đã chạy debug và phát hiện ra đoạn code sau không chạy

        Code:
        	temp.Val = b;
        	
        	// send the high nibble
        	LCD_DATA4 = temp.bits.b4;
        	LCD_DATA5 = temp.bits.b5;
        	LCD_DATA6 = temp.bits.b6;
        	LCD_DATA7 = temp.bits.b7;
        	__delay_us(20);
        	LCD_EN =  1;
        	__delay_us(20);
        	LCD_EN = 0;
        	// send the low nibble
        	LCD_DATA4 = temp.bits.b0;
        	LCD_DATA5 = temp.bits.b1;
        	LCD_DATA6 = temp.bits.b2;
        	LCD_DATA7 = temp.bits.b3;
        nó nằm trong hàm lcd_put_byte(); của thư viện LCD.c. Khi debug thì giá trị port A lẫn port E không thay đổi bất kể giá trị của temp.bits.bx tương ưng là 1 hay 0. Tại sao nhỉ ???

        Comment


        • #34
          TRISE = 0x00; // thiết lập là output
          TRISA = 0x00; // thiết lập la output

          không biết bạn có dùng portE hay portA de dùng cho LCD ko
          mình nghĩ bạn thiếu phần configure cổng vào và ra (TRIS PORT sử dụng cho LCD), trong lcd.h

          Comment


          • #35
            Nguyên văn bởi quang102 Xem bài viết
            TRISE = 0x00; // thiết lập là output
            TRISA = 0x00; // thiết lập la output

            không biết bạn có dùng portE hay portA de dùng cho LCD ko
            mình nghĩ bạn thiếu phần configure cổng vào và ra (TRIS PORT sử dụng cho LCD), trong lcd.h
            Mình đã thiết lập trong void main(); như sau:

            Code:
            TRISA = 0x00;
            	ADCON1 = 0x07;
            	PORTA = 0x00;
            	TRISE = 0x00;
            	PORTE = 0x00;
            Trong thư viện lcd.h mình cũng đã cấu hình các chân cho LCD tương ứng với mạch mình làm:

            Code:
            /* Pins mapping */
            #ifndef		LCD_RS
            #define	LCD_RS		RE2
            #define	LCD_EN		RE0
            #define	LCD_RW		RE1
            #define	LCD_DATA4	RA3
            #define	LCD_DATA5	RA2
            #define	LCD_DATA6	RA1
            #define	LCD_DATA7	RA0
            
            #define	LCD_RS_TRIS		TRISE2
            #define	LCD_EN_TRIS		TRISE0
            #define	LCD_RW_TRIS		TRISE1
            #define	LCD_DATA4_TRIS	TRISA3
            #define	LCD_DATA5_TRIS	TRISA2
            #define	LCD_DATA6_TRIS	TRISA1
            #define	LCD_DATA7_TRIS	TRISA0
            #endif
            Vậy lỗi do đâu ? Mình cũng đã cấu hình lại thanh ghi ADCON1 = 0x07;

            Comment


            • #36
              Cuối cùng mình cũng phát hiện ra chỗ sai.
              @trimen: không phải cấu hình thanh ghi ADCON1 = 0x07; đâu. Đúng ra là phải cấu hình thanh ghi ANSEL = 0x00; mới đúng (tất cả các chân đều là chân digital i/o)

              Comment


              • #37
                à bạn xài pic16f877a đúng không, thanh ghi ANSEL mình tìm không thấy trong datasheet mình chỉ thấy thanh ghi ADCON1 ghi vậy, vậy chạy chưa bạn, bạn xem kĩ trong file LCD.h có ghi :

                #ifndef LCD_RS
                #define LCD_RS RE2
                #define LCD_EN RE0
                #define LCD_RW RE1
                #define LCD_DATA4 RA3
                #define LCD_DATA5 RA2
                #define LCD_DATA6 RA1
                #define LCD_DATA7 RA0

                #define LCD_RS_TRIS TRISE2
                #define LCD_EN_TRIS TRISE0
                #define LCD_RW_TRIS TRISE1
                #define LCD_DATA4_TRIS TRISA3
                #define LCD_DATA5_TRIS TRISA2
                #define LCD_DATA6_TRIS TRISA1
                #define LCD_DATA7_TRIS TRISA0
                #endif

                Tức là trong chuơng trình chính phải define LCD_RS thì nó mới hiểu các chân bạn định nghĩa cho LCD.Trong chuơng trình chính bạn phải ghi là:
                #define LCD_RS

                Comment


                • #38
                  À, mình dùng 887 chứ không phải 877A. Trong chương trình chính mình cũng không ghi #define LCD_RS như bạn nói. Vẫn chạy được bình thường

                  Comment


                  • #39
                    Nhân tiện mình còn 1 vấn đề với cái LCD này, nhờ mọi người vào tìm cách khắc phục giúp.
                    Cụ thể là khi cắm nguồn lên thì LCD hoạt động bình thường, sau đó bấm nút reset PIC thì LCD xuất ra những kí tự lạ, bấm reset lần nữa thì nội dung hiển thị trở lại như mong muốn. Trong ct chính mình đã __delay_ms(100); trước lệnh lcd_init(); và sau đó là __delay_ms(10);. Tại sao ?

                    Comment

                    Về tác giả

                    Collapse

                    bienhou Tìm hiểu thêm về bienhou

                    Bài viết mới nhất

                    Collapse

                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                      Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                      hôm nay, 14:51
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                      Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                      hôm nay, 14:39
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                      Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                      hôm nay, 14:28
                    • bqviet
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi bqviet
                      Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                      Hôm qua, 20:26
                    • mèomướp
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi mèomướp
                      Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                      Hôm qua, 12:32
                    • vi van pham
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi vi van pham
                      Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                      Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                      20-02-2025, 21:31
                    • bqviet
                      Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                      bởi bqviet
                      Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                      20-02-2025, 17:22
                    • dinhthuong80
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi dinhthuong80
                      Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                      Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                      20-02-2025, 11:52
                    • vi van pham
                      Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                      bởi vi van pham
                      Uống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?

                      Cái khó bó cái...
                      19-02-2025, 23:05
                    • nhathung1101
                      Trả lời cho Tiếng Anh cho người Việt
                      bởi nhathung1101
                      Nếu chú tâm thì học tiếng Việt cũng đủ rồi, thừa sức làm việc rồi.

                      Học tiếng Anh cũng chỉ phụ trợ để đọc thêm tài liệu, hướng dẫn.

                      Nhưng có hiểu điều đó không mới là vấn đề. Khi mà học ngoại ngữ để đi đạp xích lô đón khách???...
                      19-02-2025, 21:27
                    Đang tải...
                    X