Thông báo

Collapse
No announcement yet.

LCD 16x2 chỉ hiển thị được 1 dòng???

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

  • LCD 16x2 chỉ hiển thị được 1 dòng???

    Tình hình là em đang lập trình cho LCD 16x2. Mô phỏng trên Proteus thì chạy bình thường. Nhưng khi lắp vào mạch thì chỉ hiển thị được dòng trên. Có bác nào gặp lỗi này rồi vào giúp em vs. (LCD em mới mua ko lẽ hư rồi)

  • #2
    Nguyên văn bởi magicboy_267 Xem bài viết
    Tình hình là em đang lập trình cho LCD 16x2. Mô phỏng trên Proteus thì chạy bình thường. Nhưng khi lắp vào mạch thì chỉ hiển thị được dòng trên. Có bác nào gặp lỗi này rồi vào giúp em vs. (LCD em mới mua ko lẽ hư rồi)
    bạn kiểm tra phần cứng.xem có bị lỗi gì ko.Thạch anh.sử dụng trong mạch có đúng tần số ko?
    TRUNG TÂM ĐIỆN TỬ VIỄN THÔNG - TUẤN MAI
    Địa chỉ:Đội 5 kim chung - Đông anh- Hà nội
    Mobile : 0978304449
    yahoo: trongtuanvctv
    Mail:

    Comment


    • #3
      Nguyên văn bởi trongtuanvct Xem bài viết
      bạn kiểm tra phần cứng.xem có bị lỗi gì ko.Thạch anh.sử dụng trong mạch có đúng tần số ko?
      Mình đã kiểm tra rồi. Mọi thứ bình thường. mình nghĩ hiển thị đc dòng 1 thì dòng 2 cũng phải đc chứ. Ko lẽ LCD đã hư rồi.hic hic.

      Comment


      • #4
        Bạn đưa code lên xem thử, có khi tại code mà proteus vẫn bình thường ấy!

        Comment


        • #5
          theo mình bạn kiểm tra thạnh anh dao động.khi bạn lập trình thì bạn sử dụng loại bao nhiêu MHZ.thì khi bạn lắp mạch thực tế bạn cũng phải sử dụng thạch anh đúng tần số đó.bạn có thể gửi sơ đồ phần cứng.và phần mềm cho mình mình sẽ kiểm tra cho.
          TRUNG TÂM ĐIỆN TỬ VIỄN THÔNG - TUẤN MAI
          Địa chỉ:Đội 5 kim chung - Đông anh- Hà nội
          Mobile : 0978304449
          yahoo: trongtuanvctv
          Mail:

          Comment


          • #6
            Nguyên văn bởi chanhvan08 Xem bài viết
            Bạn đưa code lên xem thử, có khi tại code mà proteus vẫn bình thường ấy!
            code của mình đây


            #include <REGX51.H>
            #include <string.h>
            #include <math.h>
            #include <stdlib.h>
            sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
            sbit BF = 0xA7; // co ban, bit DB7.
            sbit RS = P1^2; // chon thanh ghi
            sbit RW = P1^1; // doc/ghi
            sbit EN = P1^0; //cho phep chot du lieu
            /*===========cac chuong trinh con cua LCD==========*/
            /*--------------kiem tra su san sang cua LCD------------------------*/
            void delay(long time);
            void wait(void)
            {
            RS=0; //chon thanh ghi lenh
            RW=1; //?oc tu LCD
            LCDdata=0xff; //gia tri 0xff
            while(BF) //kiem tra co ban
            {
            EN=0; //dua xung cao xuong thap ?e chot.
            EN=1; //dua chan cho phep len cao
            }
            }
            /*------------------------thiet lap lenh cho LCD--------------------------*/
            void LCDcontrol(unsigned char x)
            {
            RS=0;//chon thanh ghi lenh
            RW=0;//ghi len LCD.
            LCDdata=x ;// gia tri x
            EN=1;//cho phep muc cao
            EN=0;//xung cao xuong thap
            wait();//?oi LCD san sang.
            }
            /*------------------------------Khoi tao LCD-------------------------*/
            void LCDinit(void)
            {
            LCDcontrol(0x38);//2 dong va ma tran 5x7;
            LCDcontrol(0x0c);//bat man hinh, bat con tro
            LCDcontrol(0x01);//xoa man hinh
            }
            /*-------------------------thiet lap du lieu cho LCD-----------------*/
            void LCDwrite(unsigned char c)
            {
            RS=1;//ghi du lieu
            RW=0;//ghi du lieu len LCD
            LCDdata=c;//gia tri C
            EN=1;//cho phep muc cao
            EN=0;//xung cao xuong thap
            wait();//cho
            }
            void LCDwrites(unsigned char *s)
            {
            unsigned char data lens,count;
            lens=strlen(s);
            for(count=0;count<lens;count++)
            {
            LCDwrite(*(s+count));
            }
            }

            void LCDwrites2(unsigned char *s)
            {
            unsigned char data lens,count;
            lens=strlen(s);
            for(count=0;count<lens;count++)
            {
            LCDwrite(*(s+count));
            delay(1000);
            }
            }
            /*=====================chuong trinh tre================*/
            void delay(long time)
            {
            while(time--);
            }
            /*========================ham chinh==================*/
            sbit RD_adc=P1^3;
            sbit WR_adc=P1^4;
            sbit INTR=P1^5;

            void docadc()
            {
            WR_adc=1;
            delay(200);
            WR_adc=0;
            while(!INTR);
            RD_adc=0;
            delay(200);
            }


            void main(void)
            {
            unsigned char p=0,s=0;
            LCDinit(); // khoi tao LCD
            LCDcontrol(0x83);
            LCDwrites2("Temperature");
            LCDcontrol(0xC5);
            LCDwrites2("Sensor");
            delay(25000);
            LCDcontrol(0x01);
            LCDcontrol(0x80);
            LCDwrites2("Copyright(C)2012");
            delay(25000);
            LCDcontrol(0x01);
            LCDcontrol(0x80);
            LCDwrites("Nhiet do:");

            while(1)
            {
            LCDcontrol(0xc5);
            docadc();
            s=P0;
            if (s<100)
            {
            LCDwrite(s/10+0x30);
            LCDwrite(s%10+0x30);
            } else
            {
            LCDwrite(s/100+0x30);
            p=s%100;
            LCDwrite(p/10+0x30);
            LCDwrite(p%10+0x30);
            }
            LCDwrites(" oC");
            delay(20000);
            }

            }

            Comment


            • #7
              về phần code này.mình thấy ko có lỗi gì cả.Bạn đưa sơ đồ nguyên lý mạch lên.để mọi người cùng nghiên cứu
              TRUNG TÂM ĐIỆN TỬ VIỄN THÔNG - TUẤN MAI
              Địa chỉ:Đội 5 kim chung - Đông anh- Hà nội
              Mobile : 0978304449
              yahoo: trongtuanvctv
              Mail:

              Comment


              • #8
                Nguyên văn bởi trongtuanvct Xem bài viết
                theo mình bạn kiểm tra thạnh anh dao động.khi bạn lập trình thì bạn sử dụng loại bao nhiêu MHZ.thì khi bạn lắp mạch thực tế bạn cũng phải sử dụng thạch anh đúng tần số đó.bạn có thể gửi sơ đồ phần cứng.và phần mềm cho mình mình sẽ kiểm tra cho.
                mình dùng thạch anh 12MHz.
                Sơ đồ của mình đây: (sao ko up dc file dsn nhỉ)
                Attached Files

                Comment


                • #9
                  bạn gửi một sơ đồ hoàn chỉnh đi.gửi sơ đồ như vậy thì làm sao biết được điểm bị lỗi.mà mạch quét LCD này phải dùng thạch anh 25MHZ chứ.TA 12MHZ.thì làm sao hoạt động được
                  TRUNG TÂM ĐIỆN TỬ VIỄN THÔNG - TUẤN MAI
                  Địa chỉ:Đội 5 kim chung - Đông anh- Hà nội
                  Mobile : 0978304449
                  yahoo: trongtuanvctv
                  Mail:

                  Comment


                  • #10
                    #define Disp_func 0x38
                    #define Disp_entry 0x06
                    #define Disp_cnlt 0x08
                    #define Disp_on 0x04
                    void Init_lcd(void){
                    Dips_cmd(Disp_func);
                    Dips_cmd(Disp_entry);
                    Dips_cmd(Disp_cnlt|Disp_on);
                    Dips_cmd (0x01);
                    }
                    như vậy mới lên được 2 dòng
                    thêm hàm này
                    LCDcontrol(0x40);// hiển thị tại dòng thứ 2
                    lúc đó mới lên được dong 2 của LCD

                    Comment


                    • #11
                      Hàm LCDinit bạn nên gởi ít nhất là 2 lệnh 0x38 ấy!

                      Comment


                      • #12
                        cám ơn tất cả mọi người. Mình làm đc rồi.hihi.

                        Comment


                        • #13
                          the mà không chia sẻ tại sao bị như thế cho mọi người. Muốn người khác chia sẻ mà chính mình chẳng chịu chia sẻ cho ai cái gì...........

                          Comment


                          • #14
                            Nguyên văn bởi magicboy_267 Xem bài viết
                            cám ơn tất cả mọi người. Mình làm đc rồi.hihi.
                            bạn chia sẻ lên diễn đàn để mọi người cùng rút kinh nghiệm đi
                            mình cũng đang quan tâm đề tài này . Cảm ơn bạn (nếu bạn share)

                            Su dung LCD 16x2
                            mới tìm đc

                            Comment


                            • #15
                              Có ai làm được chế độ 1 dòng ma trận 5x11 chưa? Tôi làm nhưng ko đc, font vẫn vậy, chỉ có nhìn ngiêng màn hình thì thấy có cái form 5x11 thôi
                              |

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X