Thông báo

Collapse
No announcement yet.

lcd mãi ko chạy. nhờ các cao thủ debug giùm cái code!!!

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

  • lcd mãi ko chạy. nhờ các cao thủ debug giùm cái code!!!

    em đang làm bài tập lớn về 8051, chủ yếu là điều khiển LCD. phần code cũng đã viết xong xuôi rồi. Đem chạy thử trên proteus thấy rất OK. Còn đem thử trên thiết bị thật thì mãi nó ko chạy, màn hình LCD chỉ hiện 1 hàng đen xì ở dòng 2 ( loại 16x2 ). đây là file code.asm của nó, nhờ các cao thủ xem xét xem co' gì ko đúng giùm em ( viết cho at89c51. dùng reads51 dịch) .
    Attached Files

  • #2
    Hì hì, em không phải là cao thủ nhưng mà con LCD em cũng đã vọc qua rồi, đọc đoạn code bác viết sao em thấy phức tạp quá (cái món Asemblly này mà không gửi kèm thuật toán thì mệt với nó thật), đoạn code em viết đơn giản hơn, bác lấy về xem nha... (bác đừng quá tin vào proteus, dù gì thì nó cũng chỉ là một phần mềm mô phỏng thôi, mà mô phỏng thì sao giống thật được, hồi trước em cũng phát mệt vì nó đó )
    PS:À mà lưu ý với bác, nếu hiển thị ký tự 5x10 thì chỉ hiện được 1 hàng thối đó bác.
    Attached Files
    Và con tim đã vui trở lại ....

    Comment


    • #3
      ah phức tạp bởi vì yêu cầu của cái sơ đồ nguyên lý nó thế. Các pin 4,5,6 của lcd mình nối vào p0.5-7 , để 2 cáii ngắt INT0 và INT1 dùng làm nút bấm lựa chọn. bạn xem qua cái sơ đồ nguyên lý nhé.
      Attached Files

      Comment


      • #4
        lcd không chạy thường do phần khởi tạo không trúng cách để lcd có thể hiểu được.
        Bạn tham khảo phần sample trong Batronix xem, làm đúng theo là lcd chạy, còn hiển thì thế nào do ta thêm thắt. Chúc thành công.
        Last edited by duc thang; 04-05-2008, 16:37.

        Comment


        • #5
          trong phần khởi tạo, bạn gửi lênh #30H xuống LCD trước là OK. Cái này trong Appnote về LCD

          Comment


          • #6
            Một file mẫu đã chạy tốt, bạn thử xem
            Attached Files

            Comment


            • #7
              đây là đoạn khởi tạo, các bác xem có chỗ nào sai ko:
              ;================================================= ===
              LCD_SETUP:

              MOV A,#0CH ;bat hien thi khong nhap nhay con tro
              ACALL LENH
              MOV A,#06H ;con tro tu dong tang len 1 sau khi hien thi
              ACALL LENH
              RET
              XOA_MH:
              MOV A,#01H
              ACALL LENH
              RET
              ;khoi tao bo nho dem cho LCD,LCD 16x2 chi hien thi duoc 16 ky tu
              BND0 EQU 070H
              BND1 EQU 071H
              BND2 EQU 072H
              BND3 EQU 073H
              BND4 EQU 074H
              BND5 EQU 075H
              BND6 EQU 076H
              BND7 EQU 077H
              BND8 EQU 078H
              BND9 EQU 079H
              BND10 EQU 07AH
              BND11 EQU 07BH
              BND12 EQU 07CH
              BND13 EQU 07DH
              BND14 EQU 07EH
              BND15 EQU 07FH
              ;================================================= =====
              WRITE_BND:
              MOV R0,#070H ;nap con tro tai dia chi dau tien cua BND
              AGAIN:
              MOV A,@R0 ;copy noi dung trong dia chi do R0 chi ra vao P3
              ACALL DL ;de hien nthi len LCD
              INC R0 ;tang con tro len 1 de chi vao dia chi tep theotrong BND
              CJNE R0,#080H,AGAIN;hien thi het 16 ki tu trong BND
              RET
              ;================================================= =====
              CLEAR_BND: ;xoa BND de dung cho chu tiep theo
              MOV R0,#070H
              CLEAR:
              MOV @R0,#' ' ;xoa noi dung BND
              INC R0
              CJNE R0,#080H,CLEAR;xoa cho den khi het BND
              RET
              ;================================================= ===
              LENH:
              ACALL READY ;LCD da san sang chua? kiem tra co ban truoc khi gui lenh
              MOV P2,A
              CLR P0.5 ;RS=0 gui lenh
              CLR P0.6 ;R/W=0 ghi len lcd
              SETB P0.7 ;gui xung H_to_L den chan E cho phep LCD
              CLR P0.7
              RET
              DL:
              ACALL READY ;LCD da san sang chua?kiem tra co ban truoc khi gui data
              MOV P2,A
              SETB P0.5 ;RS=1 gui du lieu
              CLR P0.6 ;R/W=0 ghi len lcd
              SETB P0.7
              CLR P0.7 ;gui xung H_to_L den chan E
              RET
              ;================================================= =====
              READY: SETB P2.7 ;P2.7 lam dau vao
              CLR P0.5 ;RS=0 truy cap thanh ghi lenh
              SETB P0.6 ;R/W=1 doc thanh ghi lenh
              ;doc thanh ghi lenh va kiem tra co ban
              BACK:
              CLR P0.7
              SETB P0.7
              JB P2.7,BACK ;doi den khi co ban =0
              RET
              ;================================================= =====
              ah , em nghe nói là LCD mới tinh thì khi khởi tạo lần đầu phải ghi 3 lần giá trị #30H , vậy phải thêm lệnh này vào chỗ nào?? (LCD của em là mới tậu )
              Last edited by orcian; 04-05-2008, 20:41.

              Comment


              • #8
                Nguyên văn bởi orcian Xem bài viết
                ah , em nghe nói là LCD mới tinh thì khi khởi tạo lần đầu phải ghi 3 lần giá trị #30H , vậy phải thêm lệnh này vào chỗ nào?? (LCD của em là mới tậu )
                Cái này lạ nha, hồi mới mua con LCD về em có phải làm thế đâu, hình như con LCD nó tự khởi tạo mà, nếu mình muốn hiển thị ký tự 5x10 thì mới cần khởi tạo thôi
                PS:"Hình như" chương trình của bác không có vấn đề gì ( vì kiến thức em có hạn thôi), ah mà bác mắc mạch thật theo sơ đồ trên hả, nếu vậy em xin góp ý thế này nha:cái chân 31 ấy bác tương thẳng vào nguồn 5V chứ không phải qua trở đâu
                Và con tim đã vui trở lại ....

                Comment


                • #9
                  Nguyên văn bởi duc thang Xem bài viết
                  lcd không chạy thường do phần khởi tạo không trúng cách để lcd có thể hiểu được.
                  Bạn tham khảo phần sample trong Batronix xem, làm đúng theo là lcd chạy, còn hiển thì thế nào do ta thêm thắt. Chúc thành công.
                  Bác duc thang nói đúng đấy bác orcian ơi, đầu tiên bác nên làm thế nào cho con LCD của mình chạy đã, rồi sau đó mới thêm phần râu ria vào cho nó xôm tụ. Nhớ lại cái hồi mới lập trình cho LCD, em chỉ làm mỗi việc hiện tên mình ra trên con LCD thôi mà cũng hỏi ỏm tỏi quanh diễn đàn đó, hì hì
                  Và con tim đã vui trở lại ....

                  Comment


                  • #10
                    Theo tài liệu đúng là phải gửi 3 lần byte "Function set", #30h ie: set 8 bit, 1 dòng, font 5x7, #38h ie: set 8 bit, 2 dong, font 5x7, #28h ie: set 4 bit, 2 dòng, font 5x7. Gửi bạn tài liệu về LCD, tham khảo trang 12 có code cho LCD.
                    Bạn nên làm theo mẫu cho chạy 2 dòng, sau đó tùy ý sửa đổi sẽ dể dàng hơn. Chúc thành công.
                    Attached Files

                    Comment


                    • #11
                      Nguyên văn bởi orcian Xem bài viết
                      đây là đoạn khởi tạo, các bác xem có chỗ nào sai ko:

                      ah , em nghe nói là LCD mới tinh thì khi khởi tạo lần đầu phải ghi 3 lần giá trị #30H , vậy phải thêm lệnh này vào chỗ nào?? (LCD của em là mới tậu )
                      chương trình của bạn lúc khởi tạo cho lcd thiếu lệnh mov a,#0x38 . cái nì quy định cho lcd biết là cỡ chữ 5x7,còn mov giá trị 0x30 thì bạn làm ngay lúc đầu trc khi mov giá trị 0x0c của bạn, nhớ là 3 lần nhé.

                      Comment


                      • #12
                        Nguyên văn bởi duc thang Xem bài viết
                        Theo tài liệu đúng là phải gửi 3 lần byte "Function set", #30h ie: set 8 bit, 1 dòng, font 5x7, #38h ie: set 8 bit, 2 dong, font 5x7, #28h ie: set 4 bit, 2 dòng, font 5x7. Gửi bạn tài liệu về LCD, tham khảo trang 12 có code cho LCD.
                        Bạn nên làm theo mẫu cho chạy 2 dòng, sau đó tùy ý sửa đổi sẽ dể dàng hơn. Chúc thành công.
                        Đúng là đọc tài liệu thì thấy....đúng như vậy , nhưng mà con LCD của em có cần làm thế đâu mà nó vẫn chạy ầm ầm , hay là tại con LCD của em là đồ Trung Quốc nhỉ ????
                        PS:À mà quên, cũng có thể là do con LCD của em ( và của bác orcian nữa ) là loại 16x2 còn của các bác là loại 20x4 chăng, không bít có phải vậy không nữa
                        Và con tim đã vui trở lại ....

                        Comment


                        • #13
                          cái cỡ chữ em đã quy định trong hàm main trước khi xuất ký tự ra màn hình rồi ( vì có lúc hiện 2 dòng. có lúc hiện 1 dòng chữ chạy ) nên em nghĩ ko cần phải khai báo trong phần khởi tạo nữa. Đây là file asm và file hex em đã sửa lại theo góp ý, nhưng khi chạy vẫn. .. thế .hay là lỗi ở phần cứng , có bác nào có thời gian + linh kiện thi giúp em test cái file.hex được ko
                          thanks các bác nhiều.
                          Attached Files

                          Comment


                          • #14
                            Nguyên văn bởi orcian Xem bài viết
                            cái cỡ chữ em đã quy định trong hàm main trước khi xuất ký tự ra màn hình rồi ( vì có lúc hiện 2 dòng. có lúc hiện 1 dòng chữ chạy ) nên em nghĩ ko cần phải khai báo trong phần khởi tạo nữa. Đây là file asm và file hex em đã sửa lại theo góp ý, nhưng khi chạy vẫn. .. thế .hay là lỗi ở phần cứng , có bác nào có thời gian + linh kiện thi giúp em test cái file.hex được ko
                            thanks các bác nhiều.
                            Nhìn qua phần khởi động (LCD_Setup trong chương trình của bác) thấy viết sai rồi. Thiếu mấy cái delay.

                            Vào đây xem này:

                            Khởi động LCD thế nào có nói ở đây
                            Code mẫu ở đây

                            Cứ làm đúng các bước hướng dẫn là được thôi. Delay có thể dài hơn, nhưng ko được ngắn hơn.

                            Thấy đoạn đầu bác có ghi chú các chân điều khiển nối vào port 0 -> Bác kiểm tra xem có điện trở kéo lên chưa đấy?
                            Phen này ông quyết buôn băng dính,
                            Vừa bán vừa hm... hm... cũng đắt hàng.

                            Comment


                            • #15
                              Cần giúp đỡ!

                              Em có cái code này thử dùng protus mô phỏng thì nó chỉ hiện ra mỗi cái ghạch thôi. Các bác coi giùm em xem thiếu khúc nào hay sai xót mong các bác chỉ giáo. Thanks
                              Attached Files

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X