Thông báo

Collapse
No announcement yet.

Giúp Hiển thị một số lên LCD 16x2

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

  • #16
    Nếu làm như thế thì làm luôn như cách sau có phải nhanh ko :
    printf(lcd_putc,"%0.2f",number);
    Tất cả mấy hàm sprintf(), printf() đều nằm trong thư viện stdio.h hết, sử dụng thư viện này đúng là rất tiện lợi, nhưng làm tốn bộ nhớ của vđk khá nhiều, hơn nữa như tớ đã nói, ko phải hầu hết các compiler của vđk đều hỗ trợ các cách làm này !
    -> Vẫn chưa giải quyết được
    Chúc vui !



    bạn ơi dúp mình đoạn code asembly hiển thị hình: trái tim lên LCD với mình làm cả tuần mà vẫn không làm thế nào để hiển thị nó lên LCD được. mã cost hình trái tim là: 00H,0AH,01FH,01FH,01FH,01FH,0EH,04H............MÃ ASCII LÀ :1001 1101 dúp mình với............

    Comment


    • #17
      sử dụng hàm sprintf trong C là chuyển đổi nhanh gọn lẹ...

      Comment


      • #18
        Nguyên văn bởi vietbiker Xem bài viết
        Nếu làm như thế thì làm luôn như cách sau có phải nhanh ko :
        printf(lcd_putc,"%0.2f",number);
        Tất cả mấy hàm sprintf(), printf() đều nằm trong thư viện stdio.h hết, sử dụng thư viện này đúng là rất tiện lợi, nhưng làm tốn bộ nhớ của vđk khá nhiều, hơn nữa như tớ đã nói, ko phải hầu hết các compiler của vđk đều hỗ trợ các cách làm này !
        -> Vẫn chưa giải quyết được
        Chúc vui !



        bạn ơi dúp mình đoạn code asembly hiển thị hình: trái tim lên LCD với mình làm cả tuần mà vẫn không làm thế nào để hiển thị nó lên LCD được. mã cost hình trái tim là: 00H,0AH,01FH,01FH,01FH,01FH,0EH,04H............MÃ ASCII LÀ :1001 1101 dúp mình với............
        const char character[] = {0,0,0,0,0,0,0,0,0,0,0};

        void CustomChar(char pos_row, char pos_char) {
        char i;
        Lcd_Cmd(64);
        for (i = 0; i<=10; i++) Lcd_Chr_CP(character[i]);
        Lcd_Cmd(_LCD_RETURN_HOME);
        Lcd_Chr(pos_row, pos_char, 0);
        }

        Comment


        • #19
          [QUOTE=chung1608;630230]const char character[] = {0,0,0,0,0,0,0,0,0,0,0};

          void CustomChar(char pos_row, char pos_char) {
          char i;
          Lcd_Cmd(64);
          for (i = 0; i<=10; i++) Lcd_Chr_CP(character[i]);
          Lcd_Cmd(_LCD_RETURN_HOME);
          Lcd_Chr(pos_row, pos_char, 0);
          [QUOTE]

          Thank bạn đã góp ý nhưng đề bài của mình là lập trình bằng ngôn ngữ ASM nếu là C thì đơn giản quá hihi.
          Đâ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ỉ?mọi người sửa hộ mình với:

          mình không up fire được các bạn tải về dúp mình nhé:

          đây là link: http://www.mediafire.com/?1qn7zid6qgg417d


          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:16.

          Comment


          • #20
            em đang lập trình ghép nối LCD 16x2....dùng ic at89c51...em đã vẽ mạch và viết chương trình cho em nó chạy...nhưng em chỉ cho hiển thị được mà yêu cầu đề bài là :
            - Ghép nối LCD 16x2 với cổng P1 và P3
            - Lập trình hiển thị menu gồm 02 dòng
            + Dòng 1: Họ tên SV 1 và MSSV
            + Dòng 2: Họ tên SV 2 và MSSV
            Hiển thị các dòng thành chữ đuổi theo vòng tròn từ phải qua trái
            =>> em đã sửa mãi mà không chạy đc từ trái qua phải và đuổi nhau theo vòng tròn...bác nào có kinh nghiệm về lập trình ASM giúp em với...đây là mạch và và chương trình của em đính kèm....LCD 16X2.rar

            Comment


            • #21
              Nguyên văn bởi vietbiker Xem bài viết

              Thank bạn đã góp ý nhưng đề bài của mình là lập trình bằng ngôn ngữ ASM nếu là C thì đơn giản quá hihi.
              Đâ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ỉ?mọi người sửa hộ mình với:

              mình không up fire được các bạn tải về dúp mình nhé:

              đây là link: LCD TRAI TIM.zip
              với kí tự 5x8 tối đa có thể tạo 8 kí tự, chỉ cần ghi kí tự 1 lần vào CGRAM ở đầu chương trình sao đó gọi ra theo các địa chỉ từ 00h tới 08h
              Vì con trỏ tự động tăng lên 1 đơn vị sao khi viết 1 kí tự nên ta ko cần dùng lệnh tăng con trỏ khi viết 1 chuỗi liên tiếp nhau
              Code:
              HEART DATA	0
              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
              	CALL INITIAL_customchar
              	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
              ;
              	LCALL	HIENTHI
              	LCALL 	DELLAY
              ;---------------------------------------------
              JMP	$
              INITIAL_customchar:   ; CUSTOM CHAR HEART IN ADDRESS 00H
              	MOV 	A,#40H
              	LCALL 	GUILENH
              	MOV	DPTR,#DONG1
              	MOV 	30h,#8
              LOOP_CC:
              	CLR 	A
              	MOVC 	A,@A+DPTR
              	CALL 	DULIEU
              	INC 	DPTR
              	DJNZ 	30h,LOOP_CC
              RET
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              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,#HEART
              MOV	30H,#16
              LOOP_HT:
              LCALL	DULIEU
              DJNZ	30H,LOOP_HT
              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 	0ah,1fh,1fh,1fh,1fh,0eh,4h
              
              END
              Last edited by chung1608; 18-11-2012, 20:30.

              Comment


              • #22
                Nguyên văn bởi tan0710 Xem bài viết
                LCD hiển thị theo ma Asci của VDK truyền đến.nó giống như hiển thị ký tự thôi. bạn muốn hiển thị từ 0-9.k có nghĩa là bạn truỳen giá trị 0-9 mà là truyền mã Asci của số 0-9 tới VDK. bạn cứ gửi (giá trị + 0x30) LCD sẽ hiển thị số tương ứng
                minh viet code hien thi chu chay tren lcd. chay dc roi nhung ma chu chay no cu bi giat ban chi giup minh canh sua voi

                Comment


                • #23
                  Hi bạn. LCD nó không có khả năng hiển thị số đâu bạn ạ. Mà chỉ có khả năng hiển thị ký tự: 0, 1, 2... do đó cần chuyển từ số sang ký tự bằng cách cộng thêm 48 để được mã ASCII. Ví dụ: mã ký tự 0 là 48 = 0 + 48;
                  mã ký tự 1 là 49 = 1 + 49.....
                  Thuật toán chuyển đổi sau đây. Bạn tham khảo là có thể hiển thị được.

                  //ham hien thi mot so integer len lcd
                  void display_int(int number)
                  {
                  int n1,n2,n3,n4,n22,n11;
                  n1=number/1000; //chia lay phan nguyen
                  n11=number%1000; //chhia lay phan du

                  n2=n11/100;
                  n22=n11%100;

                  n3=n22/10;

                  n4=n22%10;

                  if((n1==0)&&(n2==0)&&(n3==0))
                  LCD_putc(n4+48);
                  else if((n1==0)&&(n2==0))
                  {
                  LCD_putc(n3+48); //n3+48 la chuyen tu so n2 thanh ky tu so n2
                  LCD_putc(n4+48);
                  }
                  else if(n1==0)
                  {
                  LCD_putc(n2+48);
                  LCD_putc(n3+48);
                  LCD_putc(n4+48);
                  }
                  else
                  {
                  LCD_putc(n1+48);
                  LCD_putc(n2+48);
                  LCD_putc(n3+48);
                  LCD_putc(n4+48);
                  }

                  }

                  Comment


                  • #24
                    http://http://www.mediafire.com/download.php?bbm9bd7ohgik3lkhiện tại mình đang làm mạch hiện số lên lcd 16x2 bằng bàn phím 4x4 lúc mình mô phỏng bằng proteus thì nó chạy mà sao ráp mạch thực tế k chạy gì hết.chỉ hiển thị một hàng ngang giống như mới cấp nguồn vậy ak.
                    code:
                    org 0000h
                    sjmp main
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
                    main:

                    mov 30h,#80h

                    RS BIT P0.0
                    RW BIT P0.1
                    EN BIT P0.2
                    LCD EQU P2

                    CALL KHOI_TAO_LCD
                    CALL HIEN_THI

                    tt:
                    lcall quetphim
                    sjmp tt
                    ret
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
                    KHOI_TAO_LCD:


                    MOV r1,#38H
                    CALL GMDK
                    CALL DELAY1

                    MOV r1,#0CH
                    CALL GMDK
                    CALL DELAY1

                    MOV r1,#01H
                    CALL GMDK
                    CALL DELAY1
                    RET
                    GMDK:
                    MOV LCD,r1
                    CLR RS
                    CLR RW
                    SETB EN
                    CLR EN
                    RET

                    GMDL:
                    MOV LCD,r1
                    SETB RS
                    CLR RW
                    SETB EN
                    CLR EN
                    RET
                    hien_thi:
                    MOV r1,#0eH
                    CALL GMDK
                    CALL DELAY1

                    mov r1,30h
                    call gmdk
                    call delay1
                    mov r1,20h
                    call gmdl
                    call delay1
                    ret
                    Delay1s:
                    MOV R1,#3 ; CT delay 1S
                    L7: MOV TMOD,#01H
                    MOV TH0,#HIGH(-50000)
                    MOV TL0,#LOW(-50000)
                    SETB TR0
                    JNB TF0,$
                    CLR TR0
                    CLR TF0
                    DJNZ R1,L7
                    RET
                    quetphim:
                    kiemtra:
                    mov p1,#0ffh
                    mov p1,#11110000b
                    mov a,p1
                    anl a,#0f0h
                    cjne a,#0f0h,maxhang
                    jmp kiemtra

                    maxhang:
                    inc 30h
                    mov p1,#11111110b
                    mov a,p1
                    anl a,#0f0h
                    cjne a,#0f0h,hang_00
                    mov p1,#11111101b
                    mov a,p1
                    anl a,#0f0h
                    cjne a,#0f0h,hang_01
                    mov p1,#11111011b
                    mov a,p1
                    anl a,#0f0h
                    cjne a,#0f0h,hang_02
                    mov p1,#11110111b
                    mov a,p1
                    anl a,#0f0h
                    cjne a,#0f0h,hang_03
                    ljmp thoat
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
                    hang_00:
                    call delay1s
                    ljmp hang_0
                    hang_01:
                    call delay1s
                    ljmp hang_1
                    hang_02:
                    call delay1s
                    ljmp hang_2
                    hang_03:
                    call delay1s
                    ljmp hang_3
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
                    hang_0:
                    mov a,p1
                    cjne a,#11101110b, so_1
                    mov 20h,#"7"

                    lcall hien_thi
                    so_1:
                    mov a,p1
                    cjne a,#11011110b, so_2
                    mov 20h,#"8"

                    call hien_thi
                    so_2:
                    mov a,p1
                    cjne a,#10111110b, so_3
                    mov 20h,#"9"
                    call hien_thi
                    so_3:
                    mov a,p1
                    cjne a,#01111110b, thoat_hang_0
                    mov 20h,#":"
                    lcall hien_thi
                    thoat_hang_0:
                    ljmp thoat
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
                    hang_1:
                    mov a,p1
                    cjne a,#11101101b, so_5
                    mov 20h,#"4"
                    lcall hien_thi
                    so_5:
                    mov a,p1
                    cjne a,#11011101b, so_6
                    mov 20h,#"5"
                    lcall hien_thi
                    so_6:
                    mov a,p1
                    cjne a,#10111101b, so_7
                    mov 20h,#"6"
                    lcall hien_thi
                    so_7:
                    mov a,p1
                    cjne a,#01111101b, thoat_hang_1
                    mov 20h,#"x"
                    lcall hien_thi
                    thoat_hang_1:
                    ljmp thoat
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
                    hang_2:
                    mov a,p1
                    cjne a,#11101011b, so_9
                    mov 20h,#"1"
                    lcall hien_thi
                    so_9:
                    mov a,p1
                    cjne a,#11011011b, so_a
                    mov 20h,#"2"
                    lcall hien_thi
                    so_a:
                    mov a,p1
                    cjne a,#10111011b, so_b
                    mov 20h,#"3"
                    lcall hien_thi
                    so_b:
                    mov a,p1
                    cjne a,#01111011b, thoat_hang_2
                    mov 20h,#"-"
                    lcall hien_thi
                    thoat_hang_2:
                    ljmp thoat
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
                    hang_3:
                    mov a,p1
                    cjne a,#11100111b, so_d
                    mov r1,#01h
                    call gmdk
                    call delay1
                    mov 30h,#80h
                    call gmdk
                    call delay1
                    so_d:
                    mov a,p1
                    cjne a,#11010111b, so_e
                    mov 20h,#"0"
                    lcall hien_thi
                    so_e:
                    mov a,p1
                    cjne a,#10110111b, so_f
                    mov 20h,#"="
                    lcall hien_thi
                    so_f:
                    mov a,p1
                    cjne a,#01110111b, thoat_hang_3
                    mov 20h,#"+"
                    call hien_thi

                    thoat_hang_3:
                    ljmp thoat
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
                    thoat:
                    ret

                    delay:
                    mov r7,#120
                    delay_n2:
                    mov r6,#200
                    delay_n1:
                    nop
                    djnz r6,delay_n1
                    djnz r7,delay_n2
                    ret
                    DELAY1:

                    MOV 70H,#150
                    L2: MOV 71H,#255
                    DJNZ 71H,$
                    DJNZ 70H,L2

                    RET

                    endClick image for larger version

Name:	Capture.jpg
Views:	1
Size:	109.4 KB
ID:	1374102
                    Last edited by sieuuocmo; 01-02-2013, 10:49.

                    Comment


                    • #25
                      ;=====các chân lcd============
                      lcd equ p2
                      rs bit p0.5
                      rw bit p0.6
                      e bit p0.7
                      f_cary bit p2.7
                      org 00h
                      ljmp khoi_tao
                      khoi_tao:
                      Lcall start
                      mov a,#01h ;xóa màn hình
                      lcall command
                      mov a,#80h ; vị trí các bác muốn hiển thị
                      lcall command
                      mov dptr,#tb_10 ; ký tự các bác muốn hiển thị
                      lcall doc_du_lieu
                      ;========nếu hiển thị số trong ô nhớ thì lám ở đây==================
                      mov a,#0c0h ;vị trí các bác muốn hiển thị
                      lcall command
                      mov a,30h ;đưa dl từ ô nhớ 30h vào thanh ghi a
                      lcall bcd_ascii ;chuyển sang mã ascii rồi hiển thị
                      ret
                      ;==========phần lcd=======================
                      start:
                      Mov a,#38h
                      acall command
                      mov a,#0ch
                      acall command
                      mov a,#01h
                      acall command
                      mov a,#06h
                      acall command
                      mov a,#80h
                      acall command
                      ret
                      command:
                      Acall ready
                      mov lcd,a
                      clr rs
                      clr rw
                      setb e
                      clr e
                      ret
                      doc_du_lieu:
                      Clr a
                      movc a,@a+dptr
                      cjne a,#0ffh,lap_1
                      ret
                      lap_1:
                      Call hienthi
                      inc dptr
                      sjmp doc_du_lieu
                      hienthi:
                      Acall ready
                      nop
                      nop
                      mov lcd,a
                      nop
                      nop
                      nop
                      setb rs
                      nop
                      clr rw
                      nop
                      setb e
                      nop
                      clr e
                      nop
                      ret
                      ready:
                      Setb f_cary
                      clr rs
                      setb rw
                      back:
                      Clr e
                      setb e
                      jb f_cary,back
                      ret
                      ;===chuyển đổi bcd-ascii8 để hiển thị lên lcd==========
                      bcd_ascii:
                      Mov r0,a
                      anl a,#0fh
                      orl a,#30h
                      call hienthi
                      ret
                      ;================================================= ==
                      tb_10:
                      Db 'noi dung hien thi',0ffh ;các bác muốn hiển thị cái gì thì tương vào đây ''
                      ret

                      Comment


                      • #26
                        trên đây là đoạn code rất cơ bản, mong các bác đừng ném ghạch

                        Comment


                        • #27
                          quên cái đoạn code trên chỉ chuyển đổi được số 4 bit thôi nhé, nếu muốn hiển thị 8bit thì các bác thay bằng đoạn code này
                          BCD_ASCII8:
                          MOV R4,A
                          ANL A,#0F0H
                          SWAP A
                          ORL A,#30H
                          CALL HIENTHI
                          MOV A,R4
                          ANL A,#0FH
                          ORL A,#30H
                          CALL HIENTHI
                          RET

                          Comment


                          • #28
                            Bác hienclubvn ơi cho em hỏi. Cái hàm lcd_putchar là hàm ghi dữ liệu vào LCD phải không bác.
                            Em đã bê nguyên xi tất hàm của bác vào Keilc ( chỉ sửa lcd_putchar thành tên hàm ghi dữ liệu của em thôi) nhưng lúc nạp vào 89s52 thì nó không hiện lên 1 số nào cả( buồn wa), còn các kí tự vẫn hiện tốt.
                            Bác giúp em với.

                            Comment


                            • #29
                              ban oi cho mjnh hỏi ve cai viec lap trinh cho hien thi chữ trên lcd minh lam ma ko dc

                              Comment


                              • #30
                                Nguyên văn bởi pk178 Xem bài viết
                                Gửi bạn hàm mình vẫn dùng từ trước đến nay, cố đọc hiểu nhé !



                                P/S :

                                - Hàm trên có thể sửa đổi để dùng với UART !

                                - Một câu đố nho nhỏ cho mọi người, số nguyên thì như vậy, nếu mình muốn truyền 1 số thực qua UART thì làm thế nào để tốn ít tài nguyên của vđk nhất ?

                                Chúc vui !
                                bạn pk178 giải câu đố đi. cái này mình đang cần. thank nhé!!

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X