Thông báo

Collapse
No announcement yet.

Hoi về code của lcd và 8051

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

  • #16
    , thực ra trong LCD nó không định nghĩa hết bảng mã ASCII, nó còn chừa ra 8 ký tự cho mình tự định nghĩa. nên muốn hiển thị trái tim thì đơn giản là bạn định nghĩa lại font của 1 trong 8 ký tự đó thôi. sau đó chỉ cần gửi mã ký tự lên (là địa chỉ của ký tự mình định nghĩa trong bảng mã) thì LCD sẽ hiển thị trái tim cho bạn. và bạn còn có thể định nghĩa bất kỳ cái gì bạn thích, có thể là cả tiếng việt có dấu nữa, chứ không phải chỉ mỗi trái tim, ma trận của LCD là 5x10 điểm cho mỗi ký tự. Bạn qua trang hocavr.com (Text LCD)tìm đến phần LCD thì bạn sẽ thấy nói về phần đó, để mình xem lại tài liệu nói về tạo mã font rồi gửi cho bạn sau.
    chúc bạn hoàn thành tốt bài tập.

    Comment


    • #17
      Trong tài liệu mình đã gửi trước đó, đã có nói về cách tạo ký tự mới cho LCD rồi. Bạn hãy đọc lại trong đấy nhé. Ở phần gần cuối của bài (CGRAM and Character Building).

      Comment


      • #18
        Nguyên văn bởi hoadang Xem bài viết
        Trong tài liệu mình đã gửi trước đó, đã có nói về cách tạo ký tự mới cho LCD rồi. Bạn hãy đọc lại trong đấy nhé. Ở phần gần cuối của bài (CGRAM and Character Building).
        Hoadang ơi hepp my mình chịu rồi,mấy ngày qua lang thang tìm và đọc tài liêu nhưng vẫn không tài nào cho nó hiển thị được.thứ 7 này là nộp bài rồi.Hoadang làm ơn cứu mình vụ này đi,mình không quên ơn cậu đâu huhu.Mình chỉ viết được mã cost của hình trái tim là: DB 00H, 0AH, 01FH, 01FH, 01FH, 01FH, 0EH, 04H (mình tham khảo tại web: Creating custom character: LCD Tutorial for interfacing with Microcontrollers - 8051 Microcontroller Projects AVR PIC Projects Tutorials Ebooks Libraries codes)
        Nhưng không biết viết làm sao cho nó hiển thi lên LCD,Hoadang hường dẫn mình với....

        Comment


        • #19
          Bạn muốn hiển thị chữ A, thì bạn gửi giá trị chữ 'A' lên LCD, nhưng khi biên dịch, trình biên dịch sẽ dịc chữ A là mã máy là 01000001b.
          Đấy chính là địa chỉ tương ứng của font chữ A trong bảng font CGROM. Bạn nhìn lại bảng CGROM sẽ thấy, nó để ra cho mình 8 ký tự đầu tiên,
          dành cho ký tự của mình tự tạo. có địa chỉ bắt đầu từ 0x00 đến 0x07.
          Còn CGRAM sẽ có 64 byte, tương ứng với 8 ký tự trong CGROM của bạn, mỗi ký tự chiếm 8byte.
          nên ký tự có địa chỉ 0x00 trong CGROM sẽ chiến số byte trong CGRAM là 8 bắt đầu từ 0x00 đến 0x07 trong CGRAM.
          vậy khi bạn truyền dữ liệu lên LCD là địa chỉ đầu tiên trong bảng CGROM là 0x00 thì nó sẽ lấy dữ liệu từ 8 byte ở trong CGRAM bắt đầu từ 0x00 đến 0x07
          để hiển thị.
          nên để tạo ký tự mới:
          - xác định vị trí ký tự cần tạo trong CGROM là bao nhiêu: 0 đến 7 (0x00 đến 0x07)
          - gửi mã lệnh tương ứng với địa chỉ CGROM như sau: command=0x40 (mã lệnh)+<địa chỉ CGROM>*8 (lý do nhân 8 là như trên, mỗi ký tự chiếm 8 byte)
          - gửi địa chỉ của ký tự vừa tạo lên LCD để hiển thị (chính là địa chỉ CGROM ở trên mã lệnh
          một đoạn code mình viế trên C
          Code:
          #define TRAITIM	0x00    // dinh nghia dia chi cua trai tim la vi tri 0 trong CGROM
          	
          void main()
          {
          lcd_init();   // khoi tao LCD
          lcd_command(0x0C);   // tat con tro hien thi
          lcd_put_string("Hello World");   // gui len LCD dong chu "Hello World"	
          lcd_move_cursor(2,1);             // di chuyen con tro hien thi den dong thu 2, cot thu 1 (2 dong, 16 cot)
          lcd_put_string("Heart display");  // gui len LCD dong chu "Heart display"
          delay(60000);                          // tre
          lcd_command(0x01);                // gui lenh xoa LCD
          
          /* tao ky tu hinh trai tim */
          lcd_command(0x40+TRAITIM*8);	// 0x40 + dia chi trong CGROM tai vi tri TRAITIM (la dia chi 0x00 da dinh nghia o tren)
          
          // ma trai tim  0AH, 01FH, 01FH, 01FH, 01FH, 0EH, 04H, 00H
          // gui tung du lieu cua ma trai tim vao CGRAM bat dau tu vi tri 0x00 den 0x07 trong CGRAM
          lcd_data(0x0A);
          lcd_data(0x1F);
          lcd_data(0x1F);
          lcd_data(0x1F);
          lcd_data(0x1F);
          lcd_data(0x0E);
          lcd_data(0x04);
          lcd_data(0x00);
          
          // hien thi ky tu trai tim len LCD
          lcd_move_cursor(1,1);    // di chuyen con tro hien thi ve dong 1, cot 1
          lcd_data(TRAITIM);        // gui dia chi ma trai tim trong CGROM (TRAITIM=0x00) giong nhu chu 'A'=65
          while(1);	// khong lam gi ca

          Comment


          • #20
            Đây là ví dụ của mình: LCD heart symbol

            Comment


            • #21
              Nguyên văn bởi hoadang Xem bài viết
              Đây là ví dụ của mình: LCD heart symbol

              thaks hoadang đã góp ý:
              Đây là bài hiển thị trái tim mình viết được nhưng không hỉu sao nó bị thiếu mấy buys là sao nhỉ?bạn sửa dúp mình với:

              ORG 00H
              MAIN:
              MOV A,#38H ;xac lap che do 2 dong 5*7
              LCALL GUILENH
              MOV A,#0EH ;bat hien thi va nhap nhay con tro
              LCALL GUILENH
              LCALL DELLAY
              ;
              MOV A,#01H ;xoa man hinh lcd
              LCALL GUILENH
              LCALL DELLAY
              MOV A,#80H ;dua con tro ve dau dong 1
              LCALL GUILENH
              LCALL DELLAY

              MOV DPTR,#DONG1
              LCALL HIENTHI
              LCALL DELLAY
              ;
              MOV A,#0C0H ;;dua con tro ve dau dong 2
              LCALL GUILENH
              LCALL DELLAY
              ;
              MOV DPTR,#DONG1
              LCALL HIENTHI
              LCALL DELLAY
              ;;;;;;;;;;;;
              DDRAM:

              mov dptr,#cgram
              MOV R0,#60h
              MOV A,R0
              lcall GUILENH

              INC R0
              LCALL HIENTHI

              ;---------------------------------------------
              cgram:
              db 0h,0ah,1fh,1fh,1fh,1fh,0eh,4h


              JMP $




              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              GUILENH:
              LCALL KTTT
              MOV P2,A
              CLR P3.0
              CLR P3.1
              SETB P3.2
              CLR P3.2
              RET
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              DULIEU:
              LCALL KTTT
              MOV P2,A
              SETB P3.0
              CLR P3.1
              SETB P3.2
              CLR P3.2
              RET
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              HIENTHI:
              MOV A,R0
              MOVC A,@A+DPTR
              LCALL DULIEU
              MOV A,#06H
              LCALL GUILENH
              LCALL DELLAY
              INC R0
              CJNE R0,#16,HIENTHI
              MOV R0,#0
              LCALL DELLAY
              RET
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              KTTT:
              SETB P2.7
              CLR P3.0
              SETB P3.1
              BACK:
              CLR P3.2
              SETB P3.2
              JB P2.7,BACK
              RET
              DELLAY:
              MOV R5,#20
              BCAD: MOV R6,#5
              CABD: MOV R7,#20
              DJNZ R7,$
              DJNZ R6,CABD
              DJNZ R5,BCAD
              RET
              DONG1:
              db 0h,0ah,1fh,1fh,1fh,1fh,0eh,4h

              END

              Comment


              • #22
                Nguyên văn bởi hoadang Xem bài viết
                Đây là ví dụ của mình: LCD heart symbol

                thaks hoadang đã góp ý:
                Đây là bài hiển thị trái tim mình viết được nhưng không hỉu sao nó bị thiếu mấy buys là sao nhỉ?bạn sửa dúp mình với:
                mình không up fire được bạn tải về dúp mình nhé:

                đây là link: LCD TRAI TIM.zip

                ORG 00H
                MAIN:
                MOV A,#38H ;xac lap che do 2 dong 5*7
                LCALL GUILENH
                MOV A,#0EH ;bat hien thi va nhap nhay con tro
                LCALL GUILENH
                LCALL DELLAY
                ;
                MOV A,#01H ;xoa man hinh lcd
                LCALL GUILENH
                LCALL DELLAY
                MOV A,#80H ;dua con tro ve dau dong 1
                LCALL GUILENH
                LCALL DELLAY
                ;
                MOV DPTR,#DONG1; hiên thi dong1
                LCALL HIENTHI
                LCALL DELLAY
                ;
                MOV A,#0C0H ;;dua con tro ve dau dong 2
                LCALL GUILENH
                LCALL DELLAY
                ;
                MOV DPTR,#DONG1; hien thi dong1
                LCALL HIENTHI
                LCALL DELLAY
                ;;;;;;;;;;;;

                DDRAM:;nap vao ddram

                mov dptr,#cgram
                MOV R0,#60h
                MOV A,R0
                lcall GUILENH
                INC R0
                LCALL HIENTHI

                ;------------------------
                cgram:
                db 0h,0ah,1fh,1fh,1fh,1fh,0eh,4h

                JMP $

                ;;;;;;;;;;;;;;;;;;;;;;

                GUILENH:
                LCALL KTTT
                MOV P2,A
                CLR P3.0
                CLR P3.1
                SETB P3.2
                CLR P3.2
                RET
                ;;;;;;;;;;;;;;;;;;;;;

                DULIEU:
                LCALL KTTT
                MOV P2,A
                SETB P3.0
                CLR P3.1
                SETB P3.2
                CLR P3.2
                RET
                ;;;;;;;;;;;;;;;;;

                HIENTHI:
                MOV A,R0
                MOVC A,@A+DPTR
                LCALL DULIEU
                MOV A,#06H
                LCALL GUILENH
                LCALL DELLAY
                INC R0
                CJNE R0,#16,HIENTHI
                MOV R0,#0
                LCALL DELLAY
                RET
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;

                KTTT:
                SETB P2.7
                CLR P3.0
                SETB P3.1
                BACK:
                CLR P3.2
                SETB P3.2
                JB P2.7,BACK
                RET
                DELLAY:
                MOV R5,#20
                BCAD: MOV R6,#5
                CABD: MOV R7,#20
                DJNZ R7,$
                DJNZ R6,CABD
                DJNZ R5,BCAD
                RET
                DONG1:
                db 0h,0ah,1fh,1fh,1fh,1fh,0eh,4h

                END
                Last edited by vietbiker; 16-11-2012, 11:17.

                Comment


                • #23
                  Mình thấy code của bạn hiển thị được trái tim đấy rồi mà.

                  Comment


                  • #24
                    Nguyên văn bởi hoadang Xem bài viết
                    Mình thấy code của bạn hiển thị được trái tim đấy rồi mà.
                    uh thì nó lên rùi nhưng mục đích của mình là nó phải hiển thị kín 2 dòng 1 và 2.bài trên của mình nó hiển thi thiếu mấy ô là sao nhỉ?minh sửa mãi cũng không được,k biết lý do tại sao?Hoadang xem sửa dúp mình với....thứ 3 mình phải nộp bài rùi

                    Comment


                    • #25
                      Đây là đoạn code của bạn, mình chỉ sửa lại một tí.
                      Bây giờ bạn muốn hiển thị ký tự hay là chuỗi gì thì chỉ việc thêm chuỗi vào thôi
                      Nếu muốn build thêm ký tự khác thì chỉ cần thêm mã ký tự vào là được.

                      Code:
                      TRAITIM EQU 00H
                      
                      			 ORG	00H
                      MAIN:
                      	MOV	A,#38H			;xac lap che do 2 dong 5*7
                      	LCALL	GUILENH
                      	MOV	A,#0EH			;bat hien thi va nhap nhay con tro
                      	LCALL	GUILENH
                      	LCALL DELLAY
                      ;
                      	MOV	A,#01H			;xoa man hinh lcd
                      	LCALL	GUILENH
                      	LCALL DELLAY
                      	MOV	A,#80H		;dua con tro ve dau dong 1
                      	LCALL	GUILENH
                      	LCALL DELLAY
                      
                      	MOV DPTR,#CHUOI1	; hien thi chuoi thu nhat
                      	LCALL HIENTHICHUOI
                      
                      	MOV A,#TRAITIM		  	; dia chi ky tu trong CGROM (o day la ky tu dau tien)
                      	MOV DPTR,#TRAI_TIM	; mang byte tao ky tu trai tim
                      	LCALL TAOKYTU
                      	LCALL DELLAY
                      
                      	MOV	A,#0C0H		;;dua con tro ve dau dong 2
                      	LCALL GUILENH
                      	LCALL DELLAY
                      
                      	MOV DPTR,#CHUOI2	; hien thi chuoi thu hai
                      	LCALL HIENTHICHUOI
                      
                      	MOV A,#' '	; hien thi dau cach
                      	LCALL DULIEU
                      	LCALL DELLAY
                      					
                      	MOV A, #TRAITIM		; hien thi ky tu trai tim
                      	LCALL DULIEU
                      	LCALL DELLAY
                      
                      
                      LOOP_HERE:
                      	JMP LOOP_HERE
                      
                      
                      
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      GUILENH:
                      LCALL	KTTT
                      MOV	P2,A
                      CLR	P3.0
                      CLR	P3.1
                      SETB	P3.2
                      CLR	P3.2
                      RET
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      DULIEU:
                      LCALL	KTTT
                      MOV	P2,A
                      SETB	P3.0
                      CLR	P3.1
                      SETB	P3.2
                      CLR	P3.2
                      RET
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      HIENTHICHUOI:
                      MOV R0,#00H
                      LOOP:
                      MOV	A,R0
                      MOVC	A,@A+DPTR	; lay tung ky tu cua chuoi can hien thi
                      CJNE A,#0,DISPLAY	; kiem tra xem da gap phai ky tu ket thuc chuoi chua
                      JMP EXIT			; neu roi thi thoat
                      DISPLAY:
                      LCALL	DULIEU		; neu chua thi gui ky tu do len LCD
                      LCALL DELLAY
                      INC	R0
                      JMP LOOP			; lap lai de lay ky tu tiep theo
                      LCALL DELLAY
                      EXIT:
                      RET
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      KTTT:
                      SETB	P2.7
                      CLR	P3.0
                      SETB	P3.1
                      BACK:
                      CLR	P3.2
                      SETB	P3.2
                      JB	P2.7,BACK
                      RET
                      DELLAY:
                      MOV	R5,#20
                      BCAD:	MOV	R6,#5
                      CABD:	MOV	R7,#20
                      	DJNZ	R7,$
                      	DJNZ	R6,CABD
                      	DJNZ	R5,BCAD
                      RET
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      TAOKYTU:
                      MOV B,#8 	; he so de nhan la 8
                      MUL AB		; nhan dia chi trong CGROM voi 8 de ra dia chi CGRAM
                      MOV A,B		; tra lai ket qua nhan cho A
                      ADD A,#40H	; cong A voi 40H 
                      LCALL GUILENH	; gui lenh 0x40+CGROM*8
                      LCALL DELLAY
                      MOV R0,#0		; bat dau gui tung byte tao ky tu
                      NEXT_BYTE:
                      MOV A,R0
                      MOVC A,@A+DPTR	; lay lan luot tung byte de tao ky tu
                      LCALL DULIEU
                      LCALL DELLAY
                      INC R0			; tang chi so len 1
                      CJNE R0,#8,NEXT_BYTE 	; quay lai de lay byte tiep theo
                      						; khi da du 8 byte thi ket thuc
                      RET
                      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      
                      ;======CAC CHUOI MUON HIEN THI===========================
                      CHUOI1:
                      db 'Test',0
                      CHUOI2:
                      db 'Trai tim:',0
                      ; khai bao them chuoi khac o dau
                      ; vi du
                      ; CHUOI3:
                      ; db 'Chuoi so 3',0
                      ; can them so 0 lam dau hieu ket thuc ky tu
                      
                      ;=======BANG MA CAC KY TU TAO MOI=======================
                      TRAI_TIM:
                      db 	0ah,1fh,1fh,1fh,1fh,0eh,4h,0h
                      ; khai bao bang ma cho ky tu moi o day
                      ; vi du
                      ; KY_TU_MOI
                      ; db ...bangma...
                      
                      END

                      Comment


                      • #26
                        Trên cơ sở hàm gửi lệnh, bạn hãy viết thêm cho mình hàm di chuyển vị trí con trỏ hiện thị đến vị trí bất kỳ theo ý muốn nữa nhé, sẽ dễ dàng và linh hoạt hơn
                        khi mình muốn hiển thị một ký tự hay bắt đầu một chuỗi ở một vị trí nào đấy.
                        Còn muốn hiển thị kín hết cả hai dòng thí cứ ký tự trái tim mà gửi lên thôi.

                        Comment


                        • #27
                          Đây là mô phỏng với code ở trên mình viết: LCD-heart-symbol-ASMCode

                          Comment


                          • #28
                            Nguyên văn bởi hoadang Xem bài viết
                            Đây là mô phỏng với code ở trên mình viết: LCD-heart-symbol-ASMCode

                            Thaks Hoadang nhiều mình đã chỉnh sửa bài của Hoadang theo muc đích yêu cầu của mỉnh rồi,mình đã làm xong rùi thaks Hoadang đã dúp đỡ mình mấy ngày qua,chúc Hoadang thành công trong mọi lĩnh vực của cuộc sống

                            Comment


                            • #29
                              Cảm ơn bạn. Chúc bạn sức khỏe và thành công!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X