Thông báo

Collapse
No announcement yet.

giúp em về LCD với

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

  • giúp em về LCD với

    em là người mới học 8051, bác nào giúp em chuong trình hiển thị chữ "My Love" lên LCD 16x2 với, bác giúp em cả cái mạch mô phỏng proteus luôn nhé, thank các bác trc nhé

  • #2
    tham khảo đoạn code này đi, xem có giúp được gì cho bạn

    ;chuong trinh nay da o.k
    RS EQU P3.0
    RW EQU P3.1
    E EQU P3.2
    ORG 0000H

    LCALL KHOI_TAOLCD
    MOV 30H,#'0' ;dung o nho chua so dem
    MOV 31H,#'0'
    MOV 32H,#'0'
    MOV 33H,#'0'
    MOV 34H,#'0'
    MOV 35H,#'0'
    MOV 36H,#'0'
    MOV 37H,#'0'
    MAIN:
    LCALL DAU_DONG
    LCALL PAGE1
    LCALL DELAY
    JB P1.0,THOAT
    LCALL PAGE2
    THOAT: JB P1.1,EXIT
    LCALL PAGE3
    EXIT: SJMP MAIN
    KHOI_TAOLCD:
    MOV A,#06H ;dich con tro sang phai
    LCALL GHI_LENH
    MOV A,#38H ;khai bao 2 line
    LCALL GHI_LENH
    MOV A,#0CH ;bat hien thi ,tat con tro
    LCALL GHI_LENH
    MOV A,#1H ;xoa man hinh hien thi
    LCALL GHI_LENH
    RET
    PAGE1:
    MOV R0,#0
    TT: MOV A,R0
    MOV DPTR,#MYDATA
    movc a,@a+dptr
    LCALL HIEN_THIDULIEU
    INC R0
    CJNE R0,#16,TT
    MOV R0,#0
    LCALL XDONG
    DONG2: MOV A,R0
    MOV DPTR,#MYDATA5
    movc a,@a+dptr
    LCALL HIEN_THIDULIEU
    INC R0
    CJNE R0,#16,DONG2
    RET
    PAGE2:

    LCALL XOA_LCD
    MOV R0,#0
    TT1: MOV A,R0
    MOV DPTR,#MYDATA1
    movc a,@a+dptr
    LCALL HIEN_THIDULIEU
    INC R0
    CJNE R0,#16,TT1
    LCALL KEU_PASS
    lcall vitri_lcd1
    lcall vitri_lcd2
    lcall vitri_lcd3
    lcall vitri_lcd4
    MOV A,33H
    LCALL HIEN_THIDULIEU
    MOV A,32H
    LCALL HIEN_THIDULIEU
    MOV A,31H
    LCALL HIEN_THIDULIEU
    MOV A,30H
    LCALL HIEN_THIDULIEU
    ;KHI NHAN SONG
    INC 30H ;THI MOI TANG
    MOV A,30H
    CJNE A,#58, TT1
    MOV 30H,#'0'
    INC 31H
    MOV A,31H
    CJNE A,#58, TT1
    MOV 31H,#'0'
    INC 32H
    MOV A,32H
    CJNE A,#58, TT1
    MOV 32H,#'0'
    INC 33H
    MOV A,33H
    CJNE A,#58, TT1
    MOV 33H,#'0'
    KT1: ret
    RET
    PAGE3:
    LCALL XOA_LCD
    MOV R0,#0
    TT2: MOV A,R0
    MOV DPTR,#MYDATA2
    movc a,@a+dptr
    LCALL HIEN_THIDULIEU
    INC R0
    CJNE R0,#16,TT2
    LCALL KEU_FAIL
    LCALL DELAY
    LCALL KEU_FAIL
    lcall delay
    LCALL KEU_FAIL
    lcall delay
    RET
    XDONG:
    MOV P0,#90H
    CLR RS ;=0,LENH
    CLR RW ;=0,GHI
    SETB E
    CLR E
    ACALL READY
    RET

    DAU_DONG:
    MOV P0,#80H
    CLR RS ;=0,LENH
    CLR RW ;=0,GHI
    SETB E
    CLR E
    ACALL READY
    RET
    XOA_LCD:
    MOV P0,#1H
    CLR RS ;=0,LENH
    CLR RW ;=0,GHI
    SETB E
    CLR E
    ACALL READY
    RET
    GHI_LENH:
    MOV P0,A
    CLR RS ;=0,LENH
    CLR RW ;=0,GHI
    SETB E
    CLR E
    ACALL READY
    RET

    HIEN_THIDULIEU:
    MOV P0,A
    SETB RS ;=1,DU LIEU
    CLR RW
    SETB E
    CLR E
    ACALL READY
    RET
    KEU_PASS:
    MOV R4,17
    Q: CLR P3.7
    LCALL DELAY1
    SETB P3.7
    LCALL DELAY1
    DJNZ R4,Q
    RET
    KEU_FAIL:
    MOV R4,15
    H: CLR P3.7
    LCALL DELAY2
    SETB P3.7
    LCALL DELAY2
    DJNZ R4,H
    RET
    READY: SETB P0.7 ;P0.7: input
    CLR RS ;RS=0: thanh ghi le^.nh
    SETB RW ;R/W=1: ddo.c
    BACK:
    CLR E ;E=0 -> ta.o ca.nh le^n
    SETB E ;E=1
    JB P0.7,BACK ;cho co ban =0
    RET
    VITRI_LCD1:
    MOV A,#8FH ;o thu 16 cua line 1 lcd
    LCALL GHI_LENH
    LCALL DELAY
    RET
    VITRI_LCD2:
    MOV A,#8EH
    LCALL GHI_LENH
    LCALL DELAY
    RET

    VITRI_LCD3:
    MOV A,#8DH
    LCALL GHI_LENH
    LCALL DELAY
    RET

    VITRI_LCD4:
    MOV A,#8CH
    LCALL GHI_LENH
    LCALL DELAY
    RET

    VITRI_LCD5:
    MOV A,#0CFH
    LCALL GHI_LENH
    LCALL DELAY
    RET
    VITRI_LCD6:
    MOV A,#0CEH
    LCALL GHI_LENH
    LCALL DELAY
    RET

    VITRI_LCD7:
    MOV A,#0CDH
    LCALL GHI_LENH
    LCALL DELAY
    RET

    VITRI_LCD8:
    MOV A,#0CCH
    LCALL GHI_LENH
    LCALL DELAY
    RET
    DELAY:
    MOV R6,#255
    DEL1: MOV R7,#255
    DEL2: DJNZ R7,DEL2
    DJNZ R6,DEL1
    RET
    DELAY1: MOV R6,#5
    DEL3: MOV R7,#92
    DEL4: DJNZ R7,DEL4
    DJNZ R6,DEL3
    RET

    DELAY2: MOV R6,#0FH
    DEL5: MOV R7,#0EH
    DEL6: DJNZ R7,DEL6
    DJNZ R6,DEL5
    RET

    ORG 200H
    MYDATA:
    db " empty test "
    ORG 250H
    MYDATA5:
    DB " READY ! "

    ORG 300H
    MYDATA1:
    DB"***** PASS *****"
    ORG 350H
    MYDATA2:
    DB "***** FAIL *****"
    END

    Comment


    • #3
      thank bac busy đã giúp đỡ, nhưng bác có code Viết bằng C ko, asm em ko biết j cả

      Comment


      • #4
        xem thử đi đây là mình chỉ conver lại thôi
        Code:
        // Ð.nh ngh.a các chân c.a LCD1602
        // Trong ví d. m.u s. d.ng 8 bit ð. ði.u khi.n LCD.
        #include <REGX51.H>
        #include <stdio.h>
        #define rs P3_5
        #define rw P3_6
        #define enable P3_7
        #define lcd_data P1
        unsigned char const LCD_INIT_STRING[4] = {1,0x38,6};
        unsigned char lcd_read_byte()
        {
        unsigned char dat;
        lcd_data = 0xFF;
        rw = 1;
        rw = 1;
        enable = 1;
        enable = 1;
        dat = lcd_data;
        enable = 0;
        return( dat);
        }
        void delay_us(unsigned char n)
        {
        unsigned char i;
        for(i=0;i<n;i++);
        }
        void delay_ms(unsigned int n)
        {
        unsigned int i;
        for(i=0;i<n;i++) delay_us(255);
        }
        void lcd_send_data( unsigned char n )
        {
        lcd_data = n;
        lcd_data = n;
        delay_us(10);
        enable = 1;
        delay_us(10);
        enable = 0;
        delay_us(10);
        }
        void lcd_send_byte( unsigned char address, unsigned char n )
        {
        rs = 0;
        while ( lcd_read_byte()&0x80) ; 
        rs = address;
        delay_us(10);
        rw = 0;
        delay_us(10);
        enable = 0;
        lcd_send_data(n);
        }
        void lcd_init()
        {
        char i;
        rs = 0;
        rw = 0;
        enable = 0;
        delay_ms(15);
        for(i=0;i<3;++i)
        lcd_send_byte(0,LCD_INIT_STRING[i]);
        }
        void lcd_gotoxy( unsigned char x, unsigned char y)
        {
        unsigned char address;
        switch(y)
        {
        case 1 : address=0x80;break;
        case 2 : address=0xC0;break;
        }
        address+=x-1;
        lcd_send_byte(0,address);
        }
        void lcd_putc( char c)
        {
        lcd_send_byte(1,c);
        }
        void lcd_put_str( const char *msg)
        {
        while(*msg) lcd_putc(*msg++);
        }
        main()
        {
        lcd_init();
        lcd_gotoxy(1,1);
        lcd_put_str ("LCD 1602 DEMO");
        lcd_gotoxy(1,2);
        lcd_put_str ("Chuc ban thanh cong"); 
        while(1);
        }

        Comment


        • #5
          làm gì viết dài ghê thế ! giao tiếp LCD 8bit là đơn giản nhất , nhưng mất đến 11 chân VDK. Sau đó đến 4 bit (chỉ mất 1 port), tiếp đến là chỉ dùng 3 chân VDK vẫn giao tiếp đc với LCD (wa kon 74HC164)

          U mới học thì code giao tiếp 8 bit nè
          Code:
          #include<AT89S53.h>
          
          sbit RW   = 0x94; // RW = P1.4
          sbit RS   = 0x95; // RS = P1.5
          sbit E    = 0x96; // E = P1.6
          		      // data = P2
          
          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()
          { RW = 0 ; RS = 1 ; E = 1; E = 0 ; delay_ms(1);}
          
          void LCD_PutCmd()
          { RW = 0 ; RS = 0 ; E = 1; E = 0 ; delay_ms(1);}
          
          void int_LCD()
          { delay_ms(100);
            P2= 0x38 ; LCD_PutCmd() ; 	   
            P2= 0x0C ; LCD_PutCmd() ;
            P2= 0x01 ; LCD_PutCmd() ;
            P2= 0x06 ; LCD_PutCmd() ;
          }
          
          
          main()
          { P0 = 0xFF ; 
            P1 = 0xFF ;
            P2 = 0xFF ; 
            
            
            int_LCD();
          
            P2 = 0x80 ; LCD_PutCmd() ; // cho hiện dong Ready! ở dòng 1 cột 1
            P2 = 'R' ; LCD_PutChar() ;
            P2 = 'e' ; LCD_PutChar() ;
            P2 = 'a' ; LCD_PutChar() ;
            P2 = 'd' ; LCD_PutChar() ;
            P2 = 'y' ; LCD_PutChar() ;
            P2 = '!' ; LCD_PutChar() ;
            while(1);
          }

          Comment


          • #6
            bạn có thể tham khảo ở đây http://08tdt.com/forum/showthread.php?t=20

            Comment


            • #7
              các ơn các bac nhiều nha, em đã giải quyết đuọc bài này rồi,

              Comment


              • #8
                Nguyên văn bởi han_nang_008 Xem bài viết
                em là người mới học 8051, bác nào giúp em chuong trình hiển thị chữ "My Love" lên LCD 16x2 với, bác giúp em cả cái mạch mô phỏng proteus luôn nhé, thank các bác trc nhé
                hehe,chắc bác này làm để tặng người yêu đây

                Comment


                • #9
                  Bạn cài proteus ra là có mạch luôn rồi mà
                  NGUYỄN XUÂN VŨ
                  Mua bán, sửa chữa PLC, biến tần
                  Vỉ mạch điện tử công nghiệp các loại
                  0978462163

                  Comment


                  • #10
                    trong mục sample có lcd_demo đó vào đó xem
                    rồi nạp file bạn lập trình vào
                    ok nhé !
                    lcd có 2 chế độ hoạt động ( 8 bit và 4 bit)tùy thuộc vào code bạn khởi tạo lcd
                    đọc thêm datasheet sẽ giúp ích nhiều
                    chúc bạn thành công!
                    0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
                    ||
                    PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • mèomướp
                      Trả lời cho Sửa bộ nguồn DC 60V 45A
                      bởi mèomướp
                      Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                      Hôm qua, 13:11
                    • tuyennhan
                      Trả lời cho Sửa bộ nguồn DC 60V 45A
                      bởi tuyennhan
                      Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                      Hôm qua, 09:25
                    • tuyennhan
                      Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                      bởi tuyennhan
                      Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                      Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                      Hôm qua, 09:10
                    • Ng.Phuong.5
                      Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                      bởi Ng.Phuong.5
                      Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                      Mấy con...
                      09-01-2025, 19:44
                    • viettinh
                      Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                      bởi viettinh
                      Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                      Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                      09-01-2025, 18:12
                    • nguyendinhvan
                      Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                      bởi nguyendinhvan
                      Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                      Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                      Cách đơn giản...
                      09-01-2025, 00:04
                    • mèomướp
                      Trả lời cho Sửa bộ nguồn DC 60V 45A
                      bởi mèomướp
                      Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                      08-01-2025, 19:02
                    • tuyennhan
                      Trả lời cho Sửa bộ nguồn DC 60V 45A
                      bởi tuyennhan
                      Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                      08-01-2025, 15:43
                    • tuyennhan
                      Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                      bởi tuyennhan
                      Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                      08-01-2025, 15:28
                    • mèomướp
                      Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                      bởi mèomướp
                      Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                      08-01-2025, 11:44
                    Đang tải...
                    X