Thông báo

Collapse
No announcement yet.

Lập trình hiển thị LCD bằng Assembler ( tutorial)

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

  • #31
    Em có vấn đề này rất mong các bác chỉ giúp:
    Hiện em dang làm đề tài LCD + 8051 giao tiếp Keypad dùng để lưu số điện thoại nhưng em không biết làm thế nào để có thể lưu dữ liệu được từ bàn phím vào 8051 mà không bị mất sau khi tắt nguồn?

    Comment


    • #32
      Nguyên văn bởi catbuivagio Xem bài viết
      Các bác cho em hỏi tý trong asm thì dùng cấu trúc
      If A=#ffh,then
      jmp nhãn
      thì khi dịch ra chương trình báo lỗi là sao vậy?
      Bác nào biết gỡ giùm em với ?Thanks
      Sao trong asm lại có cấu trúc if then nhỉ. Cậu xem lại các lệnh hỗ trợ đi. Thêm nữa viết #FFh nó không hiểu đâu, nếu số Hexa là chữ cái ABCDEF ở đầu thì phải thêm 0 đằng trước. Ví dụ A=#0FFh.
      Tiện đây cho tôi hỏi: tại sao sau khi tôi xuất chuỗi kí tự ra LCD rồi gửi lệnh 1Ch và tạo trễ 1s (tôi tra trong sách là lệnh dịch toàn bộ hiển thị sang phải) thì Chuỗi kí tự lại dịch sang trái. Nếu gửi lệnh 18H(tra trong sách là lệnh dịch toàn bộ hiển thị sang trái) và tạo trễ thì chuỗi kí tự biến mất luôn.

      Comment


      • #33
        Lcd

        Các bác cho em hỏi đoạn mã sau sai chỗ nào mà khi em dịch bằng pinacle thì nó báo lỗi:
        disp_str macro string
        irpc char,<string>
        if nul 'char'
        exitm
        endif
        mov a,#'char'
        lcall data_in


        endm
        endm

        Comment


        • #34
          chào bác!

          bây giờ em muốn chuyển đổi ADC0804 rồi lấy giá trị đó hiển thị ra LCD thì làm thế nào hả bác, em thử cái phần chuyển từ BCD sang ASCII của bác nhưng nó hiển thị ko đúng j cả!
          mong bác chỉ giùm. EM GUI MACH VA CHUONG TRINH E VIET MONG BÁC CHỈ GIÚP
          CẢM ƠN BÁC NHIỀU

          ;CHUYEN DOI ADC HIEN THI RA LCD
          ;
          ;http://dientuvietnam.net/forums/show...light=LCD+8BIT


          ;-----------DINH NGHIA BIEN CUA LCD---------------
          BF BIT P0.7
          DU_LIEU_LCD EQU P0
          RS BIT P3.3
          RW BIT P3.4
          E BIT P3.5
          ;-----------DINH NGHIA BIEN CUA ADC---------------
          DU_LIEU_ADC EQU P1
          ARD BIT P3.0
          AWR BIT P3.1
          INTR BIT P3.2

          ORG 0000H
          MAIN:
          MOV TMOD,#01H ;TIMER0 CHE DO 1 (16BIT)
          MOV P2,#00H
          ;----------GOI CAC LENH-------------
          MOV A,#38H ;LCD 2 DONG MA TRAN 5X7
          ACALL CSTROBE
          MOV A,#0CH ;LCD ON, CURSOR ON
          ACALL CSTROBE
          MOV A,#01H ;CLR LCD
          ACALL CSTROBE
          MOV A,#06H ;CURSOR DICH PHAI
          ACALL CSTROBE

          ;---HIEN THI CHU----------
          HT_CHU:
          MOV R0,#0
          MOV A,#0
          CALL GOTOLINE1
          MOV DPTR,#TEXT
          LOOP:
          CLR A
          MOV A,R1
          MOVC A,@A+DPTR
          CALL DSTROBE
          INC R1
          CJNE A,#01H,LOOP
          DO1:
          MOV A,#6
          CALL GOTOLINE2
          MOV A,#"D"
          CALL DSTROBE
          MOV A,#"0"
          CALL DSTROBE
          MOV A,#" "
          CALL DSTROBE
          MOV A,#"C"
          CALL DSTROBE


          DOC_ADC:
          CLR WR
          NOP
          NOP
          NOP
          NOP
          SETB WR ; ADC BAT DAU CHUYEN DOI
          JB INTR,$ ;CHO CHUYEN DOI XONG THIF INTR XUONG MUC 0
          CLR RD ;RD=0 CHO PHEP DOC DU LIEU ADC--> DO...D7
          MOV A,P1 ;CHUYEN DU LIEU ADC LAY DUOC VAO A
          SETB RD
          ;--------CALL BIN2BCD------------
          ;---------BIN2BCD:------------
          CLR C
          SUBB A,#139
          CLR C
          RLC A
          BCD2ASCII_8:
          STEP1:
          MOV B,#100
          DIV AB ;
          MOV R3,A ;
          MOV A,B ;
          MOV B,#10
          DIV AB
          MOV R2,A ;
          MOV A,B
          MOV R1,A ;
          STEP2: ; CHUYEN DOI GIA TRI CUA r3,r2,r1 to ASCII
          MOV A,R3
          ADD A,#30H
          MOV R3,A
          MOV A,R2
          ADD A,#30H
          MOV R2,A
          MOV A,R1
          ADD A,#30H
          MOV R1,A

          MOV A,#0
          CALL GOTOLINE2
          MOV A,R3
          CALL DSTROBE
          MOV A,R2
          CALL DSTROBE
          MOV A,R1
          CALL DSTROBE

          JMP DOC_ADC

          GOTOLINE1:
          CLR RS
          ADD A,#080H
          CALL CSTROBE
          RET
          GOTOLINE2:
          CLR RS
          ADD A,#0C0H
          CALL CSTROBE
          RET
          CSTROBE: ;COMAND STROBE
          ACALL READY ;LCD READY?
          MOV DU_LIEU_LCD,A ;XUAT MA LENH
          CLR RS ;RS=0: NHAN LENH TU MCU
          CLR RW ;R/W=0 --> GHI RA LCD
          SETB E ;E=1 -> TAO CANH XUONG
          CLR E ;E=0, CHOT DU LIEU
          RET

          DSTROBE: ;DATA TROBE
          ACALL READY ;LCD READY?
          MOV DU_LIEU_LCD,A ;XUAT DU LIEU
          SETB RS ;RS=1 LCD HIEU DU LIEU TRUYEN DEN LA CAC LY TU
          CLR RW ;R/W=0 GHI DU LIEU RA LCD
          SETB E ;E=1 -> TAO CANH XUONG DE LCD HOAT DONG
          CLR E ;E=0 CHOT
          RET


          READY: ;KIEM TRA CA BF
          SETB BF ;P0.7 (DB7) (CO BF) LA DAU VAO (INPUT)
          CLR RS ;RS=0 CHON THANH GHI LENH
          SETB RW ;R/W=1 DOC DU LIEU TU LCD
          BACK:
          CLR E ;E=0 TAO CANH LEN
          SETB E ;E=1 CANH LEN
          JB BF,BACK ;CHO CO BAN BF XUONG 0
          RET
          DELAY:
          MOV R0,#10
          LOOPDELAY:
          MOV TL0,#0B0H
          MOV TH0,#3CH
          CLR TF0
          SETB TR0
          JNB TF0,$
          CLR TR0
          CLR TF0
          DJNZ R0,LOOPDELAY
          RET
          DELAY100US:
          MOV R7,50
          LOOP3: DJNZ R7,LOOP3 ; 2us x 50 = 120uS
          RET

          TEXT: DB "NHIET DO LA:"
          DB 01H

          END
          Attached Files
          Last edited by mr.ngoc; 07-11-2009, 10:24.

          Comment


          • #35
            cho em hỏi giá trị nhận được từ ADC là số nhị phận (binary) hay số BCD (255) vậy bác!
            huu

            Comment


            • #36
              Nguyên văn bởi hivongxanh_dt7 Xem bài viết
              he he chào bác manhfd
              hoạt động tích cực quá hả.Tôi xem bài viết của bác rồi.Vậy thì cho góp vui với nhé.
              tôi post luôn mã nguồn và bản mô phỏng LCD bằng protues lên luôn(nói chung đây chỉ là một số hàm cơ bản cho LCD các bạn có thể dễ dàng phát triển lên thành nhiều chức năng hơn như của bạn manhfd ấy (để các bạn tiện theo xem tôi giữ nguyên logic mạch như của bạn manhfd nhé).Hi vọng nó sẽ giúp cho các bạn mới tiếp xúc với LCD bớt khó khăn trong việc làm quen với thiết bị này.
              Chúc các bạn thành công và càng có nhiều bài viết hay chất lượng cho diễn đàn của chúng ta ngày một thêm sôi động nhé
              Mình có thấy file nào đâu ? Vì mình đang làm đề tài bạn nói nên cần gấp, nếu có điều kiện bạn có thể gởi file tới địa chỉ viethoavang@gmail.com được ko ? Thanks bạn nhiều .

              Comment


              • #37
                Lcd

                Muốn nháy số trên LCD thì làm sao hả mấy bác,
                ví dụ như cho 2 số:x,y trên LCD,làm thế nào để cùng hiển thị x va y lên LCD sao cho x nháy con y ko nháy or ngược lại.

                Comment


                • #38
                  Hjx,,,,,hâm mộ các bác quá.

                  Comment


                  • #39
                    trời ơi!!!! chân lý là đây!!! thank bác nhé.....

                    Comment


                    • #40
                      Ai đã từng làm mạch LED NHẢY THEO NHẠC thì cho em tài liệu và hướng dẫn cách làm cho em với . em muốn biết nó để làm đề tài tốt nghiệp.
                      Em muốn làm 1 bảng led khoảng 20 nhánh trở lên chứ dùng con AN6884 hay con lm3915 thì nó ít nhánh quá nhìn không đã mắt.
                      SĐT:0903491005
                      MVT.AK050587@GMAIL.COM

                      Comment


                      • #41
                        Nguyên văn bởi mafd_47 Xem bài viết
                        Phần mở rộng về LCD và các vấn đề liên quan (tiếp)

                        Ở bài viết này tôi xin đề cập đến chương trình hiển thị một đoạn dữ liệu dịch chuyển từ phải sang trái. Với chương trình này tôi chia ra làm hai module :
                        Đoạn dữ liệu có số ký tự >=16( bang kich thước của LCD)
                        Đoạn dữ liệu có số ký tự &lt;16

                        Trước tiên tôi xin nói nguyên tắc hiện chữ chạy dịch chuyển từ phải sang trái
                        Lần đầu xuất hiện 1 ký tự , delay 0,8s, sau đó CLEAR_LCD
                        Bước hai: xuất hiện 2 ký tự , delay 0,8s ..............................\
                        Bước 3 : xuất hiên3 ký tụ .................................................. ....
                        ....
                        Tiếp tục thực hiện cho đến khi xuất hiện hết ký tự

                        Nguyên lý chỉ đơn giản vậy thôi nhưng tại sao tôi lại phải chia ra hai trương hợp là lớn hơn hay nhỏ hơn 16. Chỉ đơn giản vì hai quá trinh hiện chữ chạy là khác nhau, Bây giờ tôi xin đề cập đến Trường hợp thứ nhất

                        1)Đoạn dữ liệu có số ký tự lớn hơn 16

                        2)Với kích thước lớn hơn 16 để hiên thị tôi cchia ra làm 3 bước

                        Bước thư nhấ:t ( trang thái xuât hiện chuỗi:
                        Số lần lặp là 16, mỗi lần lặp tănng lên một ký tự hiển thị,lần thứ nhất một ký tự lần thứ hai hai ký tự hiển thị và............. như vậy khi hoàn thành xong bước thứ nhất 16 ký tự đầu tiên của dữ liệu đC hiển thị

                        Bước thứ hai: Số lần lặp là R3-16 ( R3 là thanh ghi lưu kích thước của chuỗi ) , mỗi lần lặp thì có 16 ký tự xuât hiện và dịc chuyển cho đến khi gặp ký tự cuối cùng của chuỗi

                        Bước thứ 3: Số lần lặp là 15, sau mỗi lần lặp thì bớt đi mộ ký tự hiển thị như vậy ban đầu có15 ký tự hiển thị và khi kết thúc con 0 ký tự
                        Đoạn Code tôi sủ dụng có dùng các module trên các bạn xem lại nhé( lưu ý đến hàm timer0)
                        PHP Code:
                        ;=============================================
                        main:
                          
                        LCALL INIT_LCD             ;Thiet lap cac trang thai ban dau
                          LCALL CLEAR_LCD
                         MAIN1
                        :
                          
                        MOV   DPTR,#MYDATA
                          
                        LCALL DEFINE_DATA_R3
                          

                        ;=========================== Chu chay =========================================

                        ;===========================
                        Giai doan 1========================================
                          
                          
                        MOV   R4,#1 
                          
                        MOV   A,#0EH
                          
                        PUSH  0E0H
                          MOV   R5
                        ,#1
                         
                        step1:                      ; 1->16 buoc dau tien tu 1 den 16 chu se xuat hien
                          MOV   R2
                        ,#0
                          
                        POP   0E0H                 Lay du lieu ACC de dinh vi tri cho con tro
                          LCALL GOTOLINE1            
                        Xac dinh vi tri cua con tro de hien thi chu
                          DEC   A
                          PUSH  0E0H                 
                        Cat A di de cho dung cho dinh vi tri lan sau
                         AGAIN_STEP1
                        :
                          
                        MOV   A,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP1
                          INC   R5                   
                        tang gia tri R5 
                          MOV   A
                        ,R5                  
                          MOV   R4
                        ,A                 gan gia tri R5 cho R4 de dinh so ky tu xuat hien tren LCD
                          MOV   A
                        ,#8H               ; Dung cho ham delay, tao khoang thoi gian tre la 2s
                          
                        lCALL TIMER0_100MS_X       ;14H=20 100MS=2S
                          LCALL CLEAR_LCD
                        ;  MOV   A,#5                 ; Tao khoang thoi gian tre la 500ms
                        ;  LCALL TIMER1_100MS_X       
                          CJNE  R5
                        ,#10H,STEP1

                          
                        POP   0E0H                 Ket thuc buoc 1


                        ;============================giai doan 2=======================================
                          
                        MOV   R5,#1
                          
                        MOV   A,R3                 ;Xac dinh so lan lap o buoc 2R3-16)
                          
                        SUBB  A,#10H
                          
                        MOV   R3,A

                         step2
                        :                       ;17=>R3-16 
                          MOV   A
                        ,R5
                          MOV   R2
                        ,A                  ;Gan gia tri cua R5 cho R2 de chay chu
                          MOV   R4
                        ,#10H
                          
                         
                        AGAIN_STEP2:
                          
                        MOV   A,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP2
                          MOV   A
                        ,#8H
                          
                        LCALL TIMER0_100MS_X       ;Tao khoang thoi gian tre la 2s
                          LCALL CLEAR_LCD
                        ;  MOV   A,#5
                        ;  LCALL TIMER1_100MS_X       ;Tao khoang thoi gian tre la 500ms
                          INC   R5
                          DJNZ  R3
                        ,STEP2             ;Ket thuc buoc 2 tai day

                          
                        ;=============================Giai doan 3======================================
                                                     ;
                        Co 15 lan lap gia tri cua R4 giam dan tu 15->1
                          MOV   R3
                        ,#00Fh
                          
                         
                        step3:
                          
                        MOV   A,R3
                          MOV   R4
                        ,A                 ;Gan gia tri R3 cho R4 de gia chi cua R4 giam dan tu 15->1
                          MOV   A
                        ,R5
                          MOV   R2
                        ,A
                         AGAIN_STEP3
                        :                ; can thiet tu buoc 2 de lai
                          MOV   A
                        ,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP3
                          MOV   A
                        ,#8H
                          
                        LCALL TIMER0_100MS_X       ;Tao khoang thoi gian tre la 2s
                          LCALL CLEAR_LCD
                         
                        MOV   A,#1
                         
                        LCALL TIMER1_100MS_X       ;Tao khoang thoi gian tre la 500ms
                          INC   R5
                          DJNZ  R3
                        ,STEP3
                          
                         

                          MOV    A
                        ,#40
                          
                        LCALL  TIMER0_100MS_X

                         ljmp MAIN1           
                        vong lap vo han ket thuc chuong trinh
                         

                         mydata 
                        :
                          
                        DB    "HELLO WORLD by ManhFD 123456789 THUYCG"
                          
                        DB    00000001b            00000001 is character of terminate data
                                                     
                        It use to define the number of character of data
                         
                        END

                        ;============================================================== 

                        hàm timer:



                        PHP Code:
                        timer0_100ms_X:
                          
                        PUSH  07                   ;Cat gia tri R7 di
                          MOV   TMOD
                        ,#01H
                          
                        MOV   R7,A
                         AGAIN
                        :                      ;TIMER 100ms
                          MOV   TH0
                        ,#HIGH(-46082)
                          
                        MOV   TL0,#LOW(-46082)
                          
                        SETB  TR0
                         TEST
                        JNB TF0,TEST
                          CLR   TF0
                          DJNZ  R7
                        ,AGAIN              moi lan nhay la mot lan them 100ms nua
                          CLR   TR0                   

                          
                        POP   07                    Lay lai gia tri da bi lay di
                         RET
                        ;===================================================== 
                        2).Đoạn dữ liệu có số ký tự nhỏ hơn 16
                        Tôi cũng chia ra làm 3 Step :

                        Bước thứ nhất : số lần lặp là R3( R3 là thanh Ghi lưu giá trị kích thước của chuỗi) mỗi lần lặp là một lần tăng một ký tự hiển thị : lần đầu là 1ký tự lần cuối cùng là R3 ký tự

                        Bước thứ hai Số lần lặp là 16-R3 , mỗi lần lặp là có R3 ký tự xuất hiện

                        Bước thứ 3: Số lần lặp là R3, sau mỗi lần lặp thì số ký tự hiển thị giảm đi một lần

                        Sau đây là đoạn Code chương trình
                        PHP Code:
                        ;=============================================
                        main:
                          
                        LCALL INIT_LCD             ;Thiet lap cac trang thai ban dau
                          LCALL CLEAR_LCD
                        main1
                        :
                          
                        MOV   DPTR,#MYDATA
                          
                        LCALL DEFINE_DATA_R3
                          

                        ;=========================== Chu chay =========================================

                        ;===========================
                        Giai doan 1========================================
                          
                          
                        MOV   R4,#1 
                          
                        MOV   R6,#00EH
                          
                        MOV   R5,#1
                         
                        step1:                      ; 1->R3 buoc dau tien tu 1 den 16 chu se xuat hien
                          MOV   R2
                        ,#0
                          
                        MOV   A,R6
                          LCALL GOTOLINE1            
                        Xac dinh vi tri cua con tro de hien thi chu
                          DEC   R6
                         AGAIN_STEP1
                        :
                          
                        MOV   A,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP1
                          INC   R5                   
                        tang gia tri R5 
                          MOV   A
                        ,R5                  
                          MOV   R4
                        ,A                 gan gia tri R5 cho R4 de dinh so ky tu xuat hien tren LCD
                          MOV   A
                        ,#8H               ; Dung cho ham delay, tao khoang thoi gian tre la 2s
                          
                        lCALL TIMER0_100MS_X       ;14H=20 100MS=2S
                          LCALL CLEAR_LCD
                          
                        ;MOV   A,#5                 ; Tao khoang thoi gian tre la 500ms
                          
                        ;LCALL TIMER1_100MS_X       
                          DJNZ  R3
                        ,STEP1
                         
                        ;============================giai doan 2=======================================
                          
                        LCALL DEFINE_DATA_R3
                          MOV   A
                        ,#15                 ;Xac dinh so lan lap o buoc 2( R3-16)
                          
                        SUBB  A,R3
                          MOV   R5
                        ,A

                         step2
                        :                       ;R3+1->16Tuc la cho den khi ky tu dau tien tai vi tri 0
                          
                          
                        MOV   R2,#0                 ;Bat dau mot chu ky moi
                          
                        MOV   A,R3
                          MOV   R4
                        ,A                  ;Gan gia tri R3 vao R4 de cho hien chu 
                          MOV   A
                        ,R5                  
                          DEC   A                     
                        ;Xac dinh vi tri cua con tro hien thi chu(TU 5-4-3-2-1-)
                          
                        LCALL GOTOLINE1
                          
                         AGAIN_STEP2
                        :
                          
                        MOV   A,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP2
                          MOV   A
                        ,#8H
                          
                        LCALL TIMER0_100MS_X       ;Tao khoang thoi gian tre la 2s
                          LCALL CLEAR_LCD
                          
                        ;MOV   A,#5
                          
                        ;LCALL TIMER1_100MS_X       ;Tao khoang thoi gian tre la 500ms
                          DJNZ  R5
                        ,STEP2             ;Ket thuc buoc 2 tai day
                          
                        ;=============================Giai doan 3======================================
                          
                        MOV   R5,#1                
                          
                        DEC   R3
                         step3
                        :
                          
                        MOV   A,R3
                          MOV   R4
                        ,A                 ;Gan gia tri R3 cho R4 de gia chi cua R4 giam dan tu R3->1
                          MOV   A
                        ,R5
                          MOV   R2
                        ,A
                         AGAIN_STEP3
                        :                ; So ky tu xuat hien giam dan tu r3-1->1
                          MOV   A
                        ,R2
                          MOVC  A
                        ,@A+DPTR
                          LCALL WRITE_TEXT
                          INC   R2
                          DJNZ  R4
                        ,AGAIN_STEP3
                          MOV   A
                        ,#8H
                          
                        LCALL TIMER0_100MS_X       ;Tao khoang thoi gian tre la 2s
                          LCALL CLEAR_LCD
                         
                        MOV   A,#5
                         
                        LCALL TIMER1_100MS_X       ;Tao khoang thoi gian tre la 500ms
                          INC   R5
                          DJNZ  R3
                        ,STEP3

                           

                          ljmp main1           
                        vong lap vo han ket thuc chuong trinh
                         

                         mydata 
                        :
                          
                        DB    "HELLO WORLD"
                          
                        DB    00000001b            00000001 is character of terminate data
                                                     
                        It use to define the number of character of data

                        ;========================================================= 
                        Có lẽ tôi đã viết dài quá rồi , chắc các bạn cũng chả đọc được , hy vọng rằng nó sẽ giúp cho các bạn phần nào về cách lập trinh LCD, và cách lập trinh Assembler.

                        Hẹn gặp các bạn lần sau
                        bác coi hộ em xem coi em có mắc sai cái j ko. sao ko thấy nó chạy, nếu có sai thì bác sửa hộ em với. đây là file protues
                        http://www.mediafire.com/file/3ttr3e...chay%20chu.rar
                        mong bác giúp em với
                        em mới tập lập trình LCD thôi

                        Comment


                        • #42
                          Cảm ơn mấy pro nhé

                          Comment


                          • #43
                            muốn hiển thị tốc độ động cơ và đầu vào là cảm biến( 1 cặp led thu phát hồng ngoại) thì làm thế nào vậy các pro?

                            Comment


                            • #44
                              Nguyên văn bởi muoitd Xem bài viết
                              muốn hiển thị tốc độ động cơ và đầu vào là cảm biến( 1 cặp led thu phát hồng ngoại) thì làm thế nào vậy các pro?
                              tốc độ động cơ đo bằng vòng/phút. Mỗi lần quay ngang cảm biến đc tính là 1 vòng, dùng bộ đếm đếm lại rồi chia với 1 thời gian lấy mẫu nhất định là ra

                              Comment


                              • #45
                                nói thế thì chung chung quá, ý e là hỏi về code của chương trình này thì viết ra sao, vì e ko học về vdk thì khó viết nắm?

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X