Thông báo

Collapse
No announcement yet.

[Help] LCD 16x2

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

  • [Help] LCD 16x2

    Chào cả nhà
    Mọi người cho em hỏi cái vấn đề sau ạ:
    Em lập trình cho LCD 16x2 hiển thị 2 màn hình thông tin. màn hình 1 hiện thời gian, màn hình 2 hiện thông tin về ADC. để chuyển qua lại giữa 2 màn hình này em dùng 1 nút bấm cho vào ngắt I/O.mỗi lần bấm tăng biến i++
    (em cho i thay đổi 0,1,0,1,0,.. sao mỗi lần bấm thôi)
    code trong hàm main em viết theo dạng sau:
    Code:
    while(1)
    {
    switch(i)
    {
       case 0: hiengio();
         break;
       case 1: hienadc();
         break();
    }
    }
    Vấn đề em gặp phải là khi chuyển qua lại giữa 2 màn hình thì còn một số ký tự của màn hình 2 xót lại ở những vị trí trống của màn hình 1 và ngược lại.
    em đã thử thêm lệnh clear LCD vào trong các hàm con hiengio() và hienadc().Kết quả là các ký tự xót lại kia bị xoá, nhưng màn hình LCD lại nhấp nháy và bị mờ đi, không nhìn thấy được thông tin. !!
    Em nghĩ là do LCD bị Xoá,ghi,xoá,ghi,...liên tục nên mới bị vậy. Mọi người xem giúp em vấn đề này có cách nào khắc phục không ạ, cảm ơn mọi người nhiều !!!


  • #2
    Nguyên văn bởi lee_trieu Xem bài viết
    Chào cả nhà
    Mọi người cho em hỏi cái vấn đề sau ạ:
    Em lập trình cho LCD 16x2 hiển thị 2 màn hình thông tin. màn hình 1 hiện thời gian, màn hình 2 hiện thông tin về ADC. để chuyển qua lại giữa 2 màn hình này em dùng 1 nút bấm cho vào ngắt I/O.mỗi lần bấm tăng biến i++
    (em cho i thay đổi 0,1,0,1,0,.. sao mỗi lần bấm thôi)
    code trong hàm main em viết theo dạng sau:
    Code:
    while(1)
    {
    switch(i)
    {
       case 0: hiengio();
         break;
       case 1: hienadc();
         break();
    }
    }
    Vấn đề em gặp phải là khi chuyển qua lại giữa 2 màn hình thì còn một số ký tự của màn hình 2 xót lại ở những vị trí trống của màn hình 1 và ngược lại.
    em đã thử thêm lệnh clear LCD vào trong các hàm con hiengio() và hienadc().Kết quả là các ký tự xót lại kia bị xoá, nhưng màn hình LCD lại nhấp nháy và bị mờ đi, không nhìn thấy được thông tin. !!
    Em nghĩ là do LCD bị Xoá,ghi,xoá,ghi,...liên tục nên mới bị vậy. Mọi người xem giúp em vấn đề này có cách nào khắc phục không ạ, cảm ơn mọi người nhiều !!!
    Nếu bạn không xóa lcd, thì kí tự ở cuối ở những chỗ mà kí tự mới viết không tới sẽ vẫn còn. Cách này nếu bạn không thích dùng lcd_clear() thì khi xuất giá chuỗi mới nên thêm 1 vài cái dấu cách ở cuối để nó đè lên kí tự thừa cũ.
    Việc dùng lệnh lcd_clear() gây mờ, nhấp nháy ở kí tự cuối (càng về cuối càng mờ ) thường xảy ra với việc dùng thư viện lcd tự viết và viết không chuẩn. Khi xóa lcd cần ít nhất 1.64ms và để chắc ăn người viết thư viện đã dùng cách đưa hàm delay tầm > 2ms vào trong hàm tạo xung. Như vậy khi viết 1 ký tự lên lcd mất > 2ms và viết 1 chuỗi thì mất rất nhiều thời gian => thời gian tồn tại kí tự ngắn => nháy + mờ.
    Để giải quyết việc này thì chuyển hàm delay 2ms vào trong hàm lcd_clear() còn giá trị delay cũ trong hàm tạo xung để còn lại tầm 50us. Bạn sẽ thấy lcd dù có xóa liên tục cũng không bị nháy và mờ đồng thời tốc độ hiển thị tăng lên vài chục lần.

    Comment


    • #3
      Nguyên văn bởi duong_act Xem bài viết
      Nếu bạn không xóa lcd, thì kí tự ở cuối ở những chỗ mà kí tự mới viết không tới sẽ vẫn còn. Cách này nếu bạn không thích dùng lcd_clear() thì khi xuất giá chuỗi mới nên thêm 1 vài cái dấu cách ở cuối để nó đè lên kí tự thừa cũ.
      Việc dùng lệnh lcd_clear() gây mờ, nhấp nháy ở kí tự cuối (càng về cuối càng mờ ) thường xảy ra với việc dùng thư viện lcd tự viết và viết không chuẩn. Khi xóa lcd cần ít nhất 1.64ms và để chắc ăn người viết thư viện đã dùng cách đưa hàm delay tầm > 2ms vào trong hàm tạo xung. Như vậy khi viết 1 ký tự lên lcd mất > 2ms và viết 1 chuỗi thì mất rất nhiều thời gian => thời gian tồn tại kí tự ngắn => nháy + mờ.
      Để giải quyết việc này thì chuyển hàm delay 2ms vào trong hàm lcd_clear() còn giá trị delay cũ trong hàm tạo xung để còn lại tầm 50us. Bạn sẽ thấy lcd dù có xóa liên tục cũng không bị nháy và mờ đồng thời tốc độ hiển thị tăng lên vài chục lần.
      Dạ em cảm ơn anh !! Nhưng anh ơi hàn lcd_clear() của em đã có sẵn delay 2ms rồi ạ. nó thế này
      Code:
      void lcd_clear(void)
      {
          lcd_cmd(0,0x01);        // display off
          lcd_delay_ms(2);     // wait for LCD
      }
      còn đây là hàm ghi ký tự ạ
      Code:
      void lcd_putc(char c)
      {
          switch(c){
              case '\f':
                  lcd_cmd(0, 0x01);
                  lcd_delay_ms(2);     // wait for LCD
                  break;
              case '\n':
                  lcd_gotoxy(0, 0x01);
                  break;
              default:
                  lcd_cmd(1, c);
                  lcd_delay_ms(2);     // wait for LCD
                  break;
          }
      }
      Trong cả hai hàm con trên đều có delay 2ms, thậm chí là 4ms ở hàm ghi ký tự. vậy giải quyết sao anh??? Em cảm ơn anh nhiều !!

      Comment


      • #4
        Bạn dùng MCU nào ?
        Bạn chuyển toàn bộ thư viện lcd qua đây nhé.

        Comment


        • #5
          Nguyên văn bởi duong_act Xem bài viết
          Bạn dùng MCU nào ?
          Bạn chuyển toàn bộ thư viện lcd qua đây nhé.
          Dạ em dùng msp430 ạ !
          Thư viện đây ạ https://dl.dropboxusercontent.com/u/...%20Library.rar
          Anh xem giúp em với, em thường bị mấy cái liên quan đến hàm lcd_clear() lắm !!
          Em cảm ơn anh nhiều !!

          Comment


          • #6
            Nguyên văn bởi lee_trieu Xem bài viết
            Dạ em dùng msp430 ạ !
            Thư viện đây ạ https://dl.dropboxusercontent.com/u/...%20Library.rar
            Anh xem giúp em với, em thường bị mấy cái liên quan đến hàm lcd_clear() lắm !!
            Em cảm ơn anh nhiều !!
            Sửa lại hàm lcd_putc(c) như sau:
            Code:
            void lcd_putc(char c)
            {
                switch(c){
                    case '\f':
                        lcd_cmd(0, 0x01);
                        lcd_delay_ms(2);     // wait for LCD
                        break;
                    case '\n':
                        lcd_gotoxy(0, 0x01);
                        lcd_delay_ms(2);     // wait for LCD
                        break;
                    default:
                        lcd_cmd(1, c);
                        break;
                }
            }

            Comment


            • #7
              Nguyên văn bởi duong_act Xem bài viết
              Sửa lại hàm lcd_putc(c) như sau:
              Code:
              void lcd_putc(char c)
              {
                  switch(c){
                      case '\f':
                          lcd_cmd(0, 0x01);
                          lcd_delay_ms(2);     // wait for LCD
                          break;
                      case '\n':
                          lcd_gotoxy(0, 0x01);
                          lcd_delay_ms(2);     // wait for LCD
                          break;
                      default:
                          lcd_cmd(1, c);
                          break;
                  }
              }
              Dạ..em đã sửa, nhưng nó vẫn không cải thiện được mấy ạ, vẫn còn bị chớp và mờ lắm ạ !!!có cách nào mà mình chỉ clear lcd 1 lần duy nhất sau đó chỉ hiện thị không clear nữa ko anh??

              Comment


              • #8
                Thì bạn bỏ hàm clear đi.

                Comment


                • #9
                  Nguyên văn bởi duong_act Xem bài viết
                  Thì bạn bỏ hàm clear đi.
                  Dạ...nếu mình bỏ hàm clear ra thì mấy cái ký tự còn sót lại xữ lý sao anh??? dùng khoảng trắng lắp nó hay sao a??

                  Comment


                  • #10
                    Nguyên văn bởi lee_trieu Xem bài viết
                    Dạ...nếu mình bỏ hàm clear ra thì mấy cái ký tự còn sót lại xữ lý sao anh??? dùng khoảng trắng lắp nó hay sao a??
                    Cho mình xem toàn bộ project đi.

                    Comment


                    • #11
                      Nguyên văn bởi lee_trieu Xem bài viết
                      Dạ...nếu mình bỏ hàm clear ra thì mấy cái ký tự còn sót lại xữ lý sao anh??? dùng khoảng trắng lắp nó hay sao a??
                      Cho mình xem toàn bộ project đi.

                      Comment


                      • #12
                        Nguyên văn bởi duong_act Xem bài viết
                        Cho mình xem toàn bộ project đi.
                        Dạ đây ạ
                        https://dl.dropboxusercontent.com/u/.../RTC%20LCD.rar
                        Dùng IAR để mở nha anh !!

                        Comment


                        • #13
                          Trong "while(1)" thêm 1 hàm delay vào bạn nhé, tầm 50ms sẽ thấy thay đổi .

                          Comment


                          • #14
                            Nguyên văn bởi duong_act Xem bài viết
                            Trong "while(1)" thêm 1 hàm delay vào bạn nhé, tầm 50ms sẽ thấy thay đổi .
                            dạ nó vẫn sót lại anh ơi
                            Code:
                            while(1)
                              {
                                 read_bq32000();//Doc thoi gian tu BQ32000
                                 //display_time(); //Hien gio,phut,giay ra dong 1 LCD
                                 //display_date();//Hien ngay,thang,nam ra dong 2 LCD 
                                __delay_cycles(50000);
                                switch(i)
                                {
                                case 0:display_clock();
                                  break;
                                case 1:display_adc();
                                  break;
                                }
                              
                              }
                            Hình như nếu không clear màn hình thì nó bị sót hay sao ah, mà clear thì nó lại nháy và mờ

                            Comment


                            • #15
                              mình đoán cậu dùng hàm goto khi xuất dữ liệu ra nên nó mới như vậy.. còn mờ với nhấp nháy là do gọi lệnh xóa ghi liên tục trong các đoạn hienadc(); với hiengio(); nên mới bị vậy.
                              cậu nên cho 1 hàm xóa LCD trong đoạn main chỗ (switch - case) đấy

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • mansion123
                                Bật mí những điều ít ai biết về thi công gỗ óc chó
                                bởi mansion123
                                Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                                ...
                                hôm nay, 16:08
                              • tuyennhan
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi tuyennhan
                                Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                                Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                                hôm nay, 07:44
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Cám ơn những lời chúc tốt đẹp của em.

                                Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                                Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                                hôm nay, 02:00
                              • nhathung1101
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi nhathung1101
                                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                Hôm qua, 22:18
                              • 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 qua, 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 qua, 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 qua, 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...
                                21-02-2025, 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...
                                21-02-2025, 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
                              Đang tải...
                              X