Thông báo

Collapse
No announcement yet.

help me!!!!! LCD TC1602A

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

  • help me!!!!! LCD TC1602A

    tui viết chương trình đơn giản để hiển thị LCD, tui đã mô phỏng trong Proteus thì nó hoạt động OK. nhưng khi tui chạy trên mạch thật thì nó chỉ hiển thị được có hàng 1 thôi, còn hàng 2 thì không thấy gì.
    tui không biết địa chỉ bắt đầu của hàng 2 là bao nhiêu, bạn nào đã swr dụng LCD này rồi thì cho tui biết nhé, thank!!!!!
    tui post đoạn mã tui viết lên cho các ban xem và góp ý cho tui:
    ;================================================= ==
    ; LCD TC1602A: 16x2
    ;================================================= ==
    RS BIT P3.0
    RW BIT P3.1
    EN BIT P3.2

    ORG 00H
    MOV A,#38H
    ACALL COMNWRT
    ACALL DELAY

    MOV A,#0CH
    ACALL COMNWRT
    ACALL DELAY

    BEGIN:
    MOV A,#01H
    ACALL COMNWRT
    ACALL DELAY

    MOV A,#06H
    ACALL COMNWRT
    ACALL DELAY

    MOV A,#80H
    ACALL COMNWRT
    ACALL DELAY

    MOV DPTR,#TABLE
    MOV R2,#16

    LOOP:
    CLR A
    MOVC A,@A+DPTR
    ACALL DATAWRT
    ACALL DELAY
    INC DPTR
    DJNZ R2,LOOP

    MOV A,#0C0H
    ACALL COMNWRT
    ACALL DELAY

    MOV DPTR,#TABLE1
    MOV R2,#15

    LOOP2:
    CLR A
    MOVC A,@A+DPTR
    ACALL DATAWRT
    ACALL DELAY
    INC DPTR
    DJNZ R2,LOOP2

    HERE: SJMP HERE

    COMNWRT:
    MOV P1,A
    CLR RS
    CLR RW
    SETB EN
    CLR EN
    RET

    DATAWRT:
    MOV P1,A
    SETB RS
    CLR RW
    SETB EN
    CLR EN
    RET

    TABLE:
    DB 'HELLO!I LOVE YOU'

    TABLE1:
    DB 'SAO KHONG THAY!'

    DELAY:
    MOV R3,#50
    HERE2:
    MOV R4,#255
    HERE3:
    DJNZ R4,HERE3
    DJNZ R3,HERE2
    RET
    END

  • #2
    Cái này nhiều người hỏi rồi. Bạn tìm laịu trong diễn đàn nhé.
    Proteur chỉ mô phỏng nguyên tắc hoạt động do vậy bạn viết đúng là OK. Nhưng để LCD thực tế chạy thì còn cần vài vấn đề về setup phần cứng.
    Trong trường hợp này bạn chưa đặt điện áp VEE ( contrast) cho LCD. Nó vẫn chạy nhưng nội dung hiện lên bạn không nhìn thấy được.
    Xử lý: Đặt 1 biến trở khoảng 5K giữa VCC và GND. Điểm điều chỉnh của biến trở nối vào VEE. Điều chỉnh biến trở bạn sẽ thấy màn hình hiển thị dần từ mờ đến đậm. Khi nào ưng ý bạn có thể đo giá trị biến trở và thay bằng điện trở.

    Sơ đồ cụ thể bạn vào mục LCD1602 ở www.minhhaco.com. Có cả SCH và các ứng dụng mẫu cho PIC và 51.
    Chúc thành công.
    Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

    Biến tần
    Máy giặt
    Lò vi sóng
    Bếp từ.
    Tủ lạnh.
    Điều hòa

    Comment


    • #3
      Sorry vì chưa đọc kỹ.
      Bạn chỉ hiện 1 dòng do ban đầu khi Init xong nó oqr đầu dòng địa chỉ là 0x00. Sau khi ghi xong 1 dòng bạn cần chuyển sang dòng 2.


      Thêm

      MOV A,#80H
      ACALL COMNWRT
      ACALL DELAY

      vào trước LOOP2

      Lúc đó
      dòng 1 sẽ hiện
      HELLO!I LOVE YOU
      và dòng 2 sẽ hiện

      BAY GIO THAY ROI
      Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

      Biến tần
      Máy giặt
      Lò vi sóng
      Bếp từ.
      Tủ lạnh.
      Điều hòa

      Comment


      • #4
        thank! bác MinhHa nhé, về việc contrast thì mình biết rồi nhưng vấn đề không phải ở đây.
        thứ hai là trong chương trình của mình có:
        MOV A,#0C0H ; đưa con trỏ về đầu dòng thứ 2
        ACALL COMNWRT
        ACALL DELAY

        mình nghĩ rằng #0C0H là địa chỉ của đầu dòng thứ 2 (theo một số datasheet) nhưng không được nên có lẽ là một giá trị khác. Mình cũng đã thử cho LCD hiển thị mỗi dòng 2 (địa chỉ #0C0H) nhưng cũng không thấy gì, trong khi với chương trình đó mà cho hiển thị dòng 1 (địa chỉ là #80h) thì OK. Nên tui nghĩ vấn đề là do sai địa chỉ bắt đầu dòng thứ 2.
        sẵn đây hỏi luôn: hình như công ty của bác MinhHa có kinh doanh linh kiện RF, vậy không biết công ty của bác có bán chip+kit RFID không, nếu có thì xin cho biết là loại nào, giá cả...cùng các thông tin khác.

        Comment


        • #5
          Trong LCD nó đánh vị trí dòng từ 0. bạn tính dòng 2 là 0x0C là đúng. Nhưng LCD1602 chỉ có 2 dòng nên chỉ là 0x00 ( dòng 0) và 0x80( dòng 1).
          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

          Biến tần
          Máy giặt
          Lò vi sóng
          Bếp từ.
          Tủ lạnh.
          Điều hòa

          Comment


          • #6
            để tôi về coi lại thử coi phải như vậy không rồi cho U hay.

            Comment


            • #7
              Anh MinhHa, hình như anh và bạn ilovetronic có chút hiểu nhầm.

              LCD đánh số dòng từ 0.

              Với LCD 2 dòng, địa chỉ đầu của dòng thứ nhất (tức dòng 0) là 0x00. Địa chỉ đầu của dòng thứ hai (tức là dòng 1) là 0x40.

              Di chuyển cursor dùng lệnh có mã = 0x80 + địa chỉ. Do đó chuyển về đầu dòng thứ hai (dòng 1) thì đưa ra lệnh có mã = 0x80 + 0x40 = 0xC0. Việc này bạn ilovetronic làm đúng rồi.

              Theo một số appnote, người ta khuyên là sau quá trình tự khởi tạo của LCD (khoảng thời gian ít nhất 15ms sau khi cấp nguồn), người lập trình có thể gửi liên tiếp 3 lần một byte mã lệnh có giá trị = 0x30 cho LCD (có polling flag cho từng lần gửi hoặc đợi 5ms) trước khi bắt đầu các thủ tục khởi tạo thông thường khác.

              Em đã từng gặp trường hợp chỉ hiển thị được một dòng, một số có thể do LCD hỏng, nhưng một số lại có thể chạy lại bình thường sau khi làm theo appnote trên.

              Thân mến,
              blackmoon.

              Comment


              • #8
                bác blackmoon cho em cái appnote đó nhé.Có lẻ vấn đề nằm ở đây, em về thử lại xem sao

                Comment


                • #9
                  Hi ilovetronic,

                  Bạn có thể tham khảo link sau:
                  http://www.myke.com/lcd.htm

                  Thân mến,
                  blackmoon.

                  Comment


                  • #10
                    thank's blackmoon
                    em đã "gửi liên tiếp 3 lần một byte mã lệnh có giá trị = 0x30 cho LCD" và LCD đã hoạt động OK. nhưng em vẫn chưa hiểu 30H là mã lệnh để làm cái gì nữa.

                    Comment


                    • #11
                      3 lần 0x30 là để soft reset
                      Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

                      Biến tần
                      Máy giặt
                      Lò vi sóng
                      Bếp từ.
                      Tủ lạnh.
                      Điều hòa

                      Comment


                      • #12
                        làm thế nào để dịch từng dòng của lcd TC1602a

                        chào các bác
                        mình xin hỏi làm cách nào để có thể dịch sang trái hay sang phải từng dòng của lcd TC1602a.
                        lúc mình ghi lệnh dịch thì chỉ dịch được cùng lúc 2 dòng thôi.
                        bác nào đã làm rồi làm ơn chi giúp.

                        Comment


                        • #13
                          Tôi có một số ví dụ giao tiếp C51 với LCD 16x2, mode 4 bit/8bit, ngôn ngữ Assemble,C, chương trình dịch Keil, Reads51. Mời các bác tham khảo tại linhk:
                          http://www.diendandientu.com/diendan...d?thread=10222
                          0912666017

                          Comment


                          • #14
                            Các bac oi cho hoi sao em lap trinh trong Reads51

                            Nó cu bao loi o dong khai bao

                            RS EQU P3.0
                            RW EQU P3.1
                            EN EQU P3.2


                            No khong chap nhan dinh nghia EQU la sao ha may bac.

                            Comment


                            • #15
                              Bấcc ilovetronic gui cho em chuong trinh LCD TC1602A ma Bác vừa làm em cũng có một con như bác mà làm không được. Chương trình của bác em sửa lại mà không chạy.


                              #include <Sfr51.inc>
                              #include <Rc51Regs.inc>


                              RS BIT P3.0
                              RW BIT P3.1
                              EN BIT P3.2

                              ORG 00H

                              MOV A,#30h
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV A,#30h
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV A,#30h
                              ACALL COMNWRT
                              ACALL DELAY


                              MOV A,#38H
                              ACALL COMNWRT
                              ACALL DELAY


                              MOV A,#0CH
                              ACALL COMNWRT
                              ACALL DELAY


                              BEGIN:
                              MOV A,#01H
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV A,#06H
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV A,#00H ;080
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV DPTR,#TABLE
                              MOV R2,#16

                              LOOP:
                              CLR A
                              MOVC A,@A+DPTR
                              ACALL DATAWRT
                              ACALL DELAY
                              INC DPTR
                              DJNZ R2,LOOP

                              MOV A,#040H ;0C0
                              ACALL COMNWRT
                              ACALL DELAY

                              MOV DPTR,#TABLE1
                              MOV R2,#15

                              MOV A,#80H
                              ACALL COMNWRT
                              ACALL DELAY

                              LOOP2:
                              CLR A
                              MOVC A,@A+DPTR
                              ACALL DATAWRT
                              ACALL DELAY
                              INC DPTR
                              DJNZ R2,LOOP2

                              HERE: SJMP HERE

                              COMNWRT:
                              MOV P1,A
                              CLR RS
                              CLR RW
                              SETB EN
                              CLR EN
                              RET

                              DATAWRT:
                              MOV P1,A
                              SETB RS
                              CLR RW
                              SETB EN
                              CLR EN
                              RET

                              TABLE:
                              DB "HELLO!I LOVE YOU"

                              TABLE1:
                              DB "SAO KHONG THAY!"

                              DELAY:
                              MOV R3,#50
                              HERE2:
                              MOV R4,#255
                              HERE3:
                              DJNZ R4,HERE3
                              DJNZ R3,HERE2
                              RET
                              END

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X