Thông báo

Collapse
No announcement yet.

Giao tiếp LCD với AT89C51

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

  • Giao tiếp LCD với AT89C51

    Chào các bạn! Mình chưa thành thạo lắm trong Giao tiếp LCD 16*2 với 89C51. Mình đã mất mấy đêm liền lập trình mà kết quả là ...không chạy được !!!
    Vì vậy, mình gửi kèm file ASM, và mạch mô phỏng và mong các bạn giúp mình kiểm tra lỗi sai nhé ! Mình đã ...bó tay rồi !!!
    Thankyou !!!
    Attached Files

    Mobile: 0169.966.3867
    Email:

  • #2
    bạn nào cần đồ án về tivi LCD thì có thể liên lạc với mình vì mình vừa mới hoàn thành xong bảo vệ đồ án tốt nghiệp mà trong lúc làm mình phải chạy vạy mãi mới sưu tập được nhưng jo thì mình tặng các bạn để khỏi phải đi tim
    Tôi vẫn mãi là người ham học hỏi
    chúc các bạn vui vẻ

    Comment


    • #3
      điều khiển một LCD phai qua 4 bước chính này.

      1. xoa toan bo man hinh
      2. dat che do hien thi
      3. dat vi tri con tro (noi ban dau cua ki tu hien thi)
      4. hien thi ky tu

      Trước khi xuất bất kì dữ liệu nào lên LCD phải kiểm tra LCD có bận không đã. Và LCD muốn chạy được cần phải có những thiết lập đầu phù hợp với chương trình mà mình định viết.

      Comment


      • #4
        Tớ vốn đã " chậm hiểu " về LCD mà Bạn votuananh nói chung chung đại khái như thế thì tớ lại càng " don't understant ".
        Bạn nói rõ hơn về cách khởi tạo ban đầu ( những lệnh cần để LCD bắt đầu hiển thị ) được không ?

        Mobile: 0169.966.3867
        Email:

        Comment


        • #5
          Hay quá, E cũng đang mắc về hiển thị LCD 1602. Em đã test LCD với AT89C51, 89C2051 và cả bằng... tay nữa đều failed! E làm đúng theo hướng dẫn, dưới là mã C của Em, các tiền bối chỉ giáo E với.
          // Connecting LCD1602 to AT89C2051
          // D0-D7 LCD wire to P1.0- P1.7 89C2051
          // RS pin wire to P3.4
          // EN pin wire to P3.5
          // RW pin wire to Ground
          // Version 0.0 - @ 10 July, 2008.
          //************************************************** *********
          #include<AT892051.h>
          #include<STDIO.H>

          sbit RS=P3^4;
          sbit EN=P3^5;
          //************************************************** *******
          void delay(unsigned char time)
          {
          unsigned char i,j,k;
          for (i=0;i<time;i++)
          {
          for (j=0;j<time;j++)
          {
          for (k=0; k<time; k++)
          {
          }
          }
          }
          }
          //************************************************** *******
          write_LCD_command(unsigned char command_code)
          {
          RS=0; // RS=0 mean command to execute
          P1=command_code;
          EN=1; // high...
          delay(1); // Make necessary wide pulse
          EN=0; // ..to low transition
          delay(10); // wait for LCD get done
          }
          //************************************************** *******
          write_LCD_data(unsigned char data_code)
          {
          RS=1; // RS=1 mean data to display
          P1=data_code;
          EN=1; // high...
          delay(1); // Make necessary wide pulse
          EN=0; // ... to low trasition
          delay(10); // wait for LCD get done
          }
          //************************************************** ********
          void External0_interrupt_srb(void) interrupt 0 // Test LCD when External 0 interrupt
          {
          write_LCD_data(0x35); // display '5'
          delay(35); // Wait to see
          }
          //************************************************** ********
          void LCD_init(void)
          {
          write_LCD_command(0x01); // Clear display
          write_LCD_command(0x0F); // Display on, Cursor underline & blink
          write_LCD_command(0x38); // 8 bit interface, 2 line, 5x7 dot format Mode
          }
          //************************************************** *********
          void main()
          {
          LCD_init();
          write_LCD_data(0x37); // Test LCD when powered on ( display '7')
          EX0=1; // enable external 0 interrupt
          EA=1; // enable interrupts
          while(1);
          }

          Comment


          • #6
            bạn nên đặt một lệch xóa đầu dòng 0x01, tiếp đó bạn tiến hành thiết lập vị trí cho con trỏ, chế độ xuất dữ liệu vd 0x38 //xuất 8 bit, 2 dòng, font 5x8 rồi còn bạn muốn chạy ngang hay con trỏ như thế nào thì bạn có thể đặt thêm

            còn bài viết của bạn buiduonggia bạn nối mát chân // RW pin wire to Ground là không ổn rồi. Đoạn mã này bạn chi quan tâm đến việc đẩy giữ liệu ra LCD. Trong LCD cũng có một con vi điều khiển. Bạn lập trình cho LCD bạn phải kiểm tra xem LCD có bận không mới tiến hành đẩy dữ liệu được. Bẳng cách kiểm tra LCD ở các bit của RS=0,RW=1 nếu D7 = 1 thì bạn mới được phép đẩy dữ liệu cho LCD, con D7 = 0 thì phải chờ và kiểm tra cho nến khi D7 = 1 thì mới được đẩy dữ liệu.

            Comment


            • #7
              Nguyên văn bởi success.tl Xem bài viết
              Chào các bạn! Mình chưa thành thạo lắm trong Giao tiếp LCD 16*2 với 89C51. Mình đã mất mấy đêm liền lập trình mà kết quả là ...không chạy được !!!
              Vì vậy, mình gửi kèm file ASM, và mạch mô phỏng và mong các bạn giúp mình kiểm tra lỗi sai nhé ! Mình đã ...bó tay rồi !!!
              Phần khởi tạo không đúng thủ tục (file:ASM). Bạn nên theo đúng hướng dẫn của nhà chế tạo. Bạn xem lại các bài trước, có bài đề cập về khởi tạo LCD.

              Comment


              • #8
                khuyên mấy u nên dùng 89S , vừa ổn định mà nạp ICSP ( gắn lun chip trên mạch & nạp )
                u chưa làm LCD lần nào thì nên dùng 8bit , dealy thay cho hỏi cờ bận , sau khi LCD đã chạy oy , lúc đó biến hóa thế nào về mạch + chương trình thì tùy u !

                Code:
                #include<AT89S53.h>
                sbit RS = 0x94; // RS = P1_4
                sbit RW = 0x95; // RW = P1_5
                sbit E  = 0x96; // E  = P1_6
                
                void delay_ms( unsigned int ms )
                { unsigned int i,j;
                  for (i=0;i<ms;i++)
                  for (j=0;j<120;j++){};
                }
                
                void LCD_PutChar(unsigned char k )
                { P2=k ; RS=1 ; RW=0 ; E=1 ; E=0 ; delay_ms(1);}
                
                void LCD_PutCmd(unsigned char k )
                { P2=k ; RS=0 ; RW=0 ; E=1 ; E=0 ; delay_ms(3);}
                  
                
                void int_LCD()
                { delay_ms(100);
                  LCD_PutCmd(0x38) ;	   
                  LCD_PutCmd(0x0C) ;
                  LCD_PutCmd(0x06) ;
                  LCD_PutCmd(0x01) ;
                }
                
                main()
                {int_LCD();
                  LCD_PutCmd(0x80) ; // gui lenh xuat chu o dong 1 cot 1 of LCD
                  LCD_Putchar('x');
                  while(1);
                }

                Comment


                • #9
                  đoạn mã C cho LCD

                  /*
                  1. xoa toan bo man hinh
                  2. dat che do hien thi
                  3. dat vi tri con tro (noi ban dau cua ki tu hien thi)
                  4. hien thi ky tu
                  */


                  #include <reg52.h>
                  #include <stdio.h>
                  #include <string.h>

                  sbit rs=P1^0;
                  sbit rw=P1^1;
                  sbit en=P1^2;
                  sbit db7=P2^7;
                  const int n=750;


                  void tre(unsigned long int v)
                  {
                  unsigned long int i;
                  for(i=0;i<v;i++);
                  }
                  int chophep(void)
                  {
                  int ra;
                  en=1; tre(n); en=0;
                  return ra=1;
                  }
                  void kt_lcd(void)
                  {

                  while(db7==1&&chophep()&&rw==1&&rs==0);
                  }
                  void lenh(unsigned char malenh)
                  {
                  kt_lcd(); chophep();
                  rs=0; rw=0; P2=malenh;
                  }
                  void in(char *s)
                  {
                  int i;
                  for(i=0;i<strlen(s);i++)
                  {
                  kt_lcd(); chophep();
                  rs=1; rw=0;
                  P2=s[i]; tre(n);
                  }
                  }
                  void khoi_tao(void)
                  {
                  lenh(0x01);
                  lenh(0x02);
                  lenh(0x38);
                  lenh(0x06);
                  lenh(0x0e);
                  }
                  void main(void)
                  {
                  khoi_tao();
                  while(1)
                  {
                  lenh(0x80); //cho chay o dong 1
                  in("dientuvietnam.net");
                  lenh(0xC0); // cho chay o dong 2
                  in("LCD day !");
                  }
                  }

                  Comment


                  • #10
                    Mò mẫm mãi cũng ra vấn đề, hóa ra em để Vee cao quá không nhìn được ký tự hiển thị, cứ tưởng ctrình và LCD...tiêu. Em dùng LCD1602A, pull up RS, RW, EN, D7, pulldown cả D7 nữa, điều chỉnh Vee<2V là OK chế độ 8 bít interface. Còn chế độ 4 bit, em cũng mò mẫm mãi, lần này thực sự pó tay.com. Đọc trên minha.com thấy viết chuyên nghiệp quá nên ko hiểu. Các tiền bối chỉ giáo em với: Ghi lệnh 0x20 có phải chia làm 2 nibble không? D0-D4 nên nối vào vào đâu? Muốn đặt LCD ở 2 line, Underline, Blink thì lệnh tiếp theo là gì? Ghi lệnh, hỏi cờ bận LCD như thế nào??

                    Comment


                    • #11
                      Nguyên văn bởi dungcoi Xem bài viết
                      bạn nào cần đồ án về tivi LCD thì có thể liên lạc với mình vì mình vừa mới hoàn thành xong bảo vệ đồ án tốt nghiệp mà trong lúc làm mình phải chạy vạy mãi mới sưu tập được nhưng jo thì mình tặng các bạn để khỏi phải đi tim
                      Vậy phiền bác có thể share tài liệu được ko??? Mail mình là thanhcaothu38@yahoo.com .Thanks bác nhiều nhiều!

                      Comment


                      • #12
                        em cũng đang cần , share cho em nữa nhé
                        mail:vocam.h@gmail.com
                        thanks!
                        0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
                        ||
                        PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

                        Comment


                        • #13
                          ;----CHUONG TRINH HIEN THI 3 CHU CAI -----
                          ;-----TANG CAC BAN MOI TIM HIEU LCD-------
                          ;------NHO SAU NAY DUNG KHI DE NHUNG NGUOI CHUA BIET NHE CAC BAN
                          ORG 0
                          SETB P0.3 ;DEN LED
                          ;-----------------------------------
                          MOV A,#00111000B ;HIEN THI 2 HANG
                          ACALL LENH
                          MOV A,#0CH ;BAT HIEN THI TAT CON TRO
                          ACALL LENH
                          MOV A,#01H ;XOA HIEN MAN HINH
                          ACALL LENH
                          ;----------------------------------
                          MOV A,#84H ;DINH DIA CHI O THU 4
                          ACALL LENH
                          ;-----------------------------
                          MOV A,#"L" ;HIEN THI CHU L
                          ACALL HIENTHI
                          MOV A,#"E" ;HIEN THI CHU E
                          ACALL HIENTHI
                          MOV A,#"O" ;HIEN THI CHU O
                          ACALL HIENTHI
                          ;----------------------------------
                          JMP $
                          LENH: ACALL READY
                          MOV P2,A
                          CLR P0.0 ;DAT RS=0 DE GUI LENH
                          CLR P0.1 ;R/W=0 DE GHI DATA
                          SETB P0.2 ;DAT E= 1 CHO XUNG CAO
                          CLR P0.2 ;DAT E=0 CHO XUNG XUONG THAP
                          RET
                          HIENTHI:
                          ACALL READY
                          MOV P2,A
                          SETB P0.0 ;DAT RS=1 DE GUI DATA
                          CLR P0.1 ;R/W = 0 DE GHI DATA
                          SETB P0.2 ;DAT E= 1 CHO XUNG CAO
                          CLR P0.2 ;DAT E= 0 CHO XUNG XUONG THAP
                          RET
                          DELAY: MOV R4,#200
                          LAP: MOV R3,#200
                          DJNZ R3,$
                          DJNZ R4,LAP
                          RET
                          READY:
                          SETB P2.7 ;LAY P2.7 LAM CONG KTRA
                          CLR P0.0 ;RS=0 DE TRUY CAP TG LENH
                          SETB P0.1 ;R/W=1 DOc TG LENH
                          BACK: CLR P0.2 ;E=0 CHOT DU LIEU
                          SETB P0.2 ;E=1 NHAN XUNG CAO XUONG THAP
                          JB P2.7,BACK ;DOI DEN KHI CO BAN=0
                          RET
                          END
                          ;Chúng ta có quyền nói xấu người khác.
                          ;Có quyền kêu ngạo.
                          ;Nhưng ta cũng nên suy nghĩ lại lời nói và hạnh động của mình.
                          :Chúc thành công!

                          Comment


                          • #14
                            bác dungcoi vừa làm đồ án về LCD chắc bác tìm hiểu xâu nắm nhỉ.bác co thể chỉ cho em về cách hiển thị lên man hình LCD với.
                            em không biết viết chương trình để điêu khiển các chân RS,RW,E trong codevision .bác giúp em với nha,em cảm ơn bác.hjhj.co gi bác gủi cho e vao địa chỉ này nha; giatuyenkimanh@gmail.com

                            Comment


                            • #15
                              sucess giống mình rồi. Mấy ngày nay buồn buồn lại lôi keil c với proteus ra thử nghịch điều khiển cái LCD nó hiện chữ. Làm y như mấy cái
                              hướng dẫn trên mạng mà ko hiểu sao ko chạy.
                              Có bác nào hảo tâm thì share cho em bộ code c với mô phỏng proteus làm việc với LCD với, để em xem mấy cái hàm phụ của LCD nó ntn.
                              Mail: fantasynd89@gmail.com
                              em xin cám ơn các bác trước.

                              Comment

                              Về tác giả

                              Collapse

                              success.tl Tìm hiểu thêm về success.tl

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

                              Collapse

                              Đang tải...
                              X