Thông báo

Collapse
No announcement yet.

LCD và tiếng việt

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

  • LCD và tiếng việt

    Bác nào viết được cái này rùi post lên cho mọi người tham khảo nhé!
    Cty TNHH Cơ Điện tử Hiệp Phát.
    ------------------------------------------
    Trần Hoàng Giang
    11-04-1985

    Mobil: 0905 438 533

  • #2
    Hãy lập trình lại bản mã CGRAM của LCD để tạo ra bộ font tiếng Việt, chúng ta bổ sung lại một số các kí tự chưa có trong bảng mã chuẩn LCD!
    (Tìm đọc file hướng dẫn giao tiếp LCD với 8051 của ẢTMEL hay của ai đó, không nhớ chính xác, vì khi làm luận văn mình có tìm hiểu qua.)
    Chúc vui!

    Comment


    • #3
      ;------------------------;
      ; BẠN "ryan_mu " ĐÃ VIẾT:
      ;------------------------;

      Em đang làm lập trình Tiếng Việt trên LCD JA-16202A(loại 16 x 2 ) trong nó có tích hợp con HD-44780;em dùng con 89S52 như trên diễn đàn đã khuyên và em dùng ASM để lập trình .Em thì đã làm được hiển thị được Tiếng Việt trên LCD .Hôm nay quên mang hình nó để post lên .
      Nhưng mà hình như cái thuật toán của em gọi Tiếng Việt ra của em chưa tối ưu .Các nác xem hộ em cái có cách nào hay thì chỉ bảo giùm .Em gọi Tiếng Việt theo kiểu 1 xâu ký tự hiển thị :"trường đại học Bách Khoa " thì trong ROM ,em để xâu :" truwowfng ddaji hojc Basch Khoa " .Chính vì gọi cái kiểu này nên việc xử lý của em nó dài dòng lắm các bác à .ROM viết đã trên 6 Kb rồi.Các bác có thuật toán tối ưu chỉ bảo giùm em .

      Comment


      • #4
        ;----------------------------;
        ; BẠN "vutricongbka " ĐÃ VIẾT:
        ;----------------------------;
        BẠn nên dùng bản mã ASCII mở rộng của Việt nam !
        __________________
        ===============================
        Một cây làm chẳng nên non
        Ba cây chụm lại lên hòn núi cao
        ===============================

        Comment


        • #5
          Em nhớ không nhầm thì CGRAM của Character LCD chỉ có 8 kí tự thui mà? Sao đủ bộ font tiếng việt được. ROM của nó không dùng mã ascii mà vì phải đưa thêm bộ mã tiếng Nhật. Đúng là đồ Nhật!
          PNLab
          Mạch nạp/debug ULink2, Jlink ARM USB
          Mạch nạp AVR, PIC, 8051, MSP430 USB
          Mạch phát triển STM32, ARM9, ARM11
          more...www.pnlabvn.com

          Comment


          • #6
            Em xin lỗi mọi người vì lên lần đầu vào box không thấy chủ đề đã có nên tạo nên topic lặp lại .Thành thật xin lỗi mọi người.
            Em thấy đúng như bạn sphinx đã nói .Cái con HD-44780 của Hitachi chế tạo đúng là không hỗ trợ Tiếng Việt nên không khỏi nhiều hạn chế.Sau đây em xin trình bày việc hiển thị Tiếng Việt ,em mới làm quen vi điều khiển được 3 tháng nay có gì mong mọi người góp ý .

            Để hiển thị Tiếng Việt trên LCD JA-16202(loại 16 x 2) có 2 cách:
            1)Phần cứng :tức là IC HD-44780 hỗ trợ Tiếng Việt trong ROM .Theo như em đọc datasheet thì con HD-44780 có 2 phiên bản ROM.Một dành cho thị trường Tây Âu và châu Mỹ nên hỗ trợ Tiếng La tinh trong đó có các ký tự Tiếng Việt có dấu , mọt dành cho thị trường Nhật Bản nên hỗ trợ Tiếng Nhật trong bảng mã ASCII mở rộng.Mà em thấy mua chủ yếu gặp loại dành cho thị trường Nhật nên không hỗ trợ Tiếng Việt .Trong datasheet hướng dẫn cách có thể ghi ROM của IC này để nó hỗ trợ Tiếng Việt .Nhưng em thấy cách này trong hoàn cảnh của em thì đúng là pó tay.

            Comment


            • #7
              2) Phần mềm:
              Đúng là con IC HD-44780 có CGRAM (bộ tạo ký tự do người dùng định nghĩa ) nên giúp cho việc tạo font Tiếng Việt.Tuy nhiên CGRAM của HD-44780 chỉ có 64 bytes nên chúng ta chỉ max tạo được hay nói chính xác là cho hiển thi đồng thời 8 ký tự trên màn hình LCD .Tuy nhiên 1 xâu ký tự mà có 8 ký tự Tiếng Việt đã là khá nhiều rồi.Ví dụ như "Trường đại học Bách Khoa " thì có 6 ký tự Tiếng Việt là :ư ,ờ ,ạ ,đ, ọ ,á .Chính vì thế em cố làm thử .Đầu tiên em định nghĩa tất cả các ký tự Tiếng Việt có thể có chủ yếu là các nguyên âm và kết hợp đấu của nó để trong ROM:


              Code:
               
              ;DEFINE CHARACTER
              
              CHUAHUYEN  :DB 04h,02h,0Eh,01h,0Fh,11h,0Fh,00h
              CHUASAC    :DB 04h,08h,0Eh,01h,0Fh,11h,0Fh,00h
              CHUAHOI    :DB 06h,04h,0Eh,01h,0Fh,11h,0Fh,00h
              CHUANGA    :DB 05h,0Ah,0Eh,01h,0Fh,11h,0Fh,00h
              CHUANANG   :DB 00h,00h,0Eh,01h,0Fh,11h,0Fh,04h
              
              CHUAW      :DB 0Ah,04h,0Eh,01h,0Fh,11h,0Fh,00h
              CHUAWHUYEN :DB 02h,0Dh,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAWSAC   :DB 08h,1Ah,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAWHOI   :DB 06h,0Eh,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAWNGA   :DB 0Ch,1Eh,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAWNANG  :DB 0Ah,04h,0Eh,01h,0Fh,11h,0Fh,04h
              
              CHUAA      :DB 04h,0Ah,0Eh,01h,0Fh,11h,0Fh,00h   
              CHUAAHUYEN :DB 02h,06h,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAASAC   :DB 08h,14h,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAAHOI   :DB 03h,06h,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAANGA   :DB 05h,0Eh,04h,0Eh,01h,0Fh,11h,0Fh
              CHUAANANG  :DB 04h,0Ah,0Eh,01h,0Fh,11h,0Fh,04h   
              
              CHUDD      :DB 02h,07h,02h,0Eh,12h,12h,0Eh,00h
              
              CHUEHUYEN  :DB 00h,04h,02h,0Eh,11h,1Eh,0Eh,00h
              CHUESAC    :DB 00h,04h,08h,0Eh,11h,1Eh,0Eh,00h
              CHUEHOI    :DB 00h,06h,04h,0Eh,11h,1Eh,0Eh,00h
              CHUENGA    :DB 00h,05h,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUENANG   :DB 04h,02h,0Eh,11h,1Eh,0Eh,04h,00h
              
              CHUEE      :DB 00h,04h,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUEEHUYEN :DB 04h,06h,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUEESAC   :DB 04h,0Ch,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUEEHOI   :DB 03h,06h,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUEENGA   :DB 05h,0Eh,0Ah,0Eh,11h,1Eh,0Eh,00h
              CHUEENANG  :DB 04h,0Ah,0Eh,11h,1Eh,0Eh,04h,00h
              
              CHUIHUYEN  :DB 00h,04h,02h,04h,04h,04h,0Eh,00h
              CHUISAC    :DB 00h,04h,0Ch,04h,04h,04h,0Eh,00h
              CHUIHOI    :DB 00h,06h,04h,04h,04h,04h,0Eh,00h
              CHUINGA    :DB 00h,05h,0Ah,04h,04h,04h,0Eh,00h
              CHUINANG   :DB 00h,04h,04h,0Ch,04h,0Eh,04h,00h
              
              CHUOHUYEN  :DB 00h,04h,02h,0Eh,11h,11h,0Eh,00h
              CHUOSAC    :DB 00h,04h,08h,0Eh,11h,11h,0Eh,00h
              CHUOHOI    :DB 00h,06h,04h,0Eh,11h,11h,0Eh,00h
              CHUONGA    :DB 00h,050,0Ah,0Eh,11h,11h,0Eh,00h
              CHUONANG   :DB 00h,00h,0Eh,11h,11h,0Eh,04h,00h
              
              CHUOO      :DB 00h,04h,0Ah,0Eh,11h,11h,0Eh,00h
              CHUOOHUYEN :DB 02h,05h,0Ah,0Eh,11h,11h,0Eh,00h
              CHUOOSAC   :DB 04h,0Ch,0Ah,0Eh,11h,11h,0Eh,00h
              CHUOOHOI   :DB 03h,06h,0Ah,0Eh,11h,11h,0Eh,00h
              CHUOONGA   :DB 05h,0Eh,0Ah,0Eh,11h,11h,0Eh,00h
              CHUOONANG  :DB 04h,0Ah,0Eh,11h,11h,0Eh,04h,00h
              
              CHUOW      :DB 00h,00h,03h,0Eh,11h,11h,0Eh,00h
              CHUOWHUYEN :DB 04h,02h,03h,0Eh,11h,11h,0Eh,00h
              CHUOWSAC   :DB 04h,08h,03h,0Eh,11h,11h,0Eh,00h
              CHUOWHOI   :DB 06h,04h,03h,0Eh,11h,11h,0Eh,00h
              CHUOWNGA   :DB 05h,0Ah,03h,0Eh,11h,11h,0Eh,00h
              CHUOWNANG  :DB 00h,03h,0Eh,11h,11h,0Eh,04h,00h
              
              CHUUHUYEN  :DB 00h,08h,04h,11h,11h,11h,0Eh,00h
              CHUUSAC    :DB 00h,02h,04h,11h,11h,11h,0Eh,00h
              CHUUHOI    :DB 00h,06h,04h,11h,11h,11h,0Eh,00h
              CHUUNGA    :DB 00h,05h,0Ah,11h,11h,11h,0Eh,00h
              CHUUNANG   :DB 00h,00h,11h,11h,11h,0Eh,04h,00h
              
              CHUUW      :DB 00h,00h,03h,12h,12h,12h,0Ch,00h
              CHUUWHUYEN :DB 04h,02h,03h,12h,12h,12h,0Ch,00h
              CHUUWSAC   :DB 04h,08h,03h,12h,12h,12h,0Ch,00h
              CHUUWHOI   :DB 06h,04h,03h,12h,12h,12h,0Ch,00h
              CHUUWNGA   :DB 05h,0Ah,03h,12h,12h,12h,0Ch,00h
              CHUUWNANG  :DB 00h,03h,12h,12h,12h,0Ch,04h,00h
              
              CHUYHUYEN  :DB 04h,02h,11h,11h,0Fh,01h,0Eh,00h
              CHUYSAC    :DB 04h,08h,11h,11h,0Fh,01h,0Eh,00h
              CHUYHOI    :DB 06h,04h,11h,11h,0Fh,01h,0Eh,00h
              CHUYNGA    :DB 05h,0Ah,11h,11h,0Fh,01h,0Eh,00h
              CHUYNANG   :DB 00h,11h,11h,0Fh,01h,0Eh,04h,00h

              Comment


              • #8
                ngoài ra có địa chỉ vùng nhớ CGRAM cần phải lưu lại nhất là các địa chỉ đầu của vùng nhớ của mỗi ký tự được tạo :
                CGRAM B 40h,48h,50h,58h,60h,68h,70h,78h

                Sau đấy là xâu Tiếng Việt em sẽ gọi Tiếng Việt :
                MYDATA1:
                DB 'Truwowfng ddaji hojc Basch Khoa ',0; ký tự 0 kết thúc chuỗi

                Thuật giải của em thì đơn giản như bộ gõ Tiếng Việt ,xét lần lượt từng ký tự trong xâu đấy sau đó xet ký tự liền kề với ký tự cần xét nhờ cấu trúc kiểu case of sau đó nếu gặp phải ký tự Tiếng Việt đúng thì em sẽ đưa ký tụ đấy vào CGRAM rồi gọi mã tương ứng với vũng nhớ CGRAM đó.Sau đây là thử tục đưa ký tự vào CGRAM và thủ tục xét xâu Tiếng Việt cần hiển thị :

                Code:
                RAM 30h--38h se chua cac thanh phan cua ki tu va lan luot 
                ;chuyen CGRAM 
                SET_CGRAM:
                	  MOV DPTR,#CGRAM
                	  MOV A,R0
                	  MOVC A,@A+DPTR
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,30h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,31h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,32h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,33h
                	  ACALL WRITE_DATA
                	  POP ACC
                
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,34h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,35h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,36h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  
                	  ACALL WRITE_COMMAND
                	  INC A
                	  PUSH ACC
                	  MOV A,37h
                	  ACALL WRITE_DATA
                	  POP ACC
                	  	  
                	  	 
                  	  ;MOV A,R1
                  	  ;ACALL GOTOLINE1 	 
                  	  MOV A,R0
                  	  ADD A,#08H
                
                	  RET
                	  
                ;*************************************************************************
                ;MOV     DPTR,#MYDATA
                 ;thiet lap 30h--38h chu  thanh phan cua ki tu Tieng viet duoc 
                 ;doc ra tu trong ROM 
                 
                READ_ROM:
                	
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 30h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 31h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 32h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 33h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 34h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 35h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 36h,A
                	INC     DPTR
                
                	CLR A
                	MOVC    A,@A+DPTR
                	MOV 37h,A
                	INC     DPTR
                	
                        
                	RET
                ;*************************************************************************

                Comment


                • #9
                  Sau đây là thủ tục xét xâu ký tự cần hiển thị Tiếng Việt :
                  vì nó quá dài nên em gửi kèm file txt

                  Comment


                  • #10
                    Sau đấy là đoạn Main nhỏ để gọi 1 dòng chữ chạy :

                    DEMO THU DOAN CHU CHAY
                    MAIN:
                    LCALL INIT_LCD
                    MOV DPTR,#MYDATA1 ;Dua con tro du lieu toi bang
                    MOV R0,#0
                    MOV A,#0
                    LCALL GOTOLINE1
                    DONG1: CLR A
                    MOVC A,@A+DPTR
                    JZ THOAT1 ;Neu A=0 thi thi thoat
                    LCALL TIENGVIET1
                    MOV R6,A
                    MOV A,#80H
                    ADD A ,R1
                    LCALL WRITE_COMMAND
                    ;LCALL GOTOLINE1
                    MOV A,R6
                    LCALL WRITE_DATA

                    INC R1
                    LCALL DELAY100MS
                    INC DPTR
                    SJMP DONG1
                    THOAT1:

                    Các hàm và thủ tục khác thì em làm theo kiểu như của bạn manhfd đã làm về LCD trên diễn đàn ,Ai muốn biết chi tiết có thể tham khảo topic đó .
                    Tuy nhiên em thấy cách gọi như trên của em là khá dài .Mong các bác giúp đỡ để em có thể có cách gọi tốt hơn
                    được không ạ.

                    Comment


                    • #11
                      Hihi... cái này hay quá, bởi nó có thể viết được tiếng Việt lên LCD, cảm ơn bạn về điều này. Em có làm LCD rồi mà lại ko để ý đến nó.
                      BẠn có thể post cả sch lên để biết được kết nối chân của LCD và uC được ko?(nếu được thì post bằng ảnh kiểu GIF,JPEF)?
                      Có ai có mã nguồn = C không nhỉ? để đỡ thời gian dò chuyên từ ASM-->C..hihi...

                      Comment


                      • #12
                        Về vấn đề hiển thị tiếng việt trên LCD text thật sự là không tối ưu lắm vì con Eprom trong nó chỉ hổ trợ tiếng Anh va Nhật thôi . Nhưng nếu hoàn cảnh bắt thì vẫn làm được . Thứ nhất là các bạn phải tạo một bảng tra trong 89c51 chứa tất cả các ký tự từ A->Z (chử hoa ) và a->z chử thường sau đó lá bảng tra các dấu sau đó viết tiếp một chương trình dấu hiển thị . Khâu cuối cùng là kết hợp hai bảng chử cái và dấu lại với nhau , thế là bạn có thể hiện thị được TV rồi . Nhưng nói chung font chữ lúc này thì khônng được đẹp cho lắm . Nhưng nói chung là hiển thị được là tốt rồi !!! ~o^o~
                        Mạch nạp Little Programmer
                        MSC-51,AVR,EEPROM ... etc

                        Site Fukusei shop :

                        Comment


                        • #13
                          Nói 8 kí tự là đối với FONT 5x7 thui! FONT 5x10 dường như ít hơn! Mà bộ FONT việt vẫn kế thừa bộ FONT assci, nên kí tự nào thiếu thiếu thì bỗ sung!

                          Comment


                          • #14
                            Nguyên văn bởi thaithutrang
                            Hihi... cái này hay quá, bởi nó có thể viết được tiếng Việt lên LCD, cảm ơn bạn về điều này. Em có làm LCD rồi mà lại ko để ý đến nó.
                            BẠn có thể post cả sch lên để biết được kết nối chân của LCD và uC được ko?(nếu được thì post bằng ảnh kiểu GIF,JPEF)?
                            Có ai có mã nguồn = C không nhỉ? để đỡ thời gian dò chuyên từ ASM-->C..hihi.
                            Sơ đồ chân nối cũng đơn giản .Mình dùng proteus giả lập rồi export ra đây .Mình đang muốn chuynển sang code C nhưng dùng PIC, có điều mới học nên chưa biết nhiều.Có gì mong bạn chỉ bảo ...

                            Nguyên văn bởi MicroDuyphi
                            Nói 8 kí tự là đối với FONT 5x7 thui! FONT 5x10 dường như ít hơn! Mà bộ FONT việt vẫn kế thừa bộ FONT assci, nên kí tự nào thiếu thiếu thì bỗ sung!
                            Anh Duy Phi ơi đúng là FONT 5x10 ít hơn 8 ký tự nhưng mà ở Hà Nội hình như không có hàng này.Còn về phần ký tự thiếu thì em bổ sung rồi như :â,ă,ê,...nhưng nếu thêm cả dấu cho các ký tụ này thì lên đến 60 ký tự rồi.Ý em muốn hỏi là cách gọi Tiếng Việt thế nào để code có thể ngắn gọn nhất có thể .

                            Comment


                            • #15
                              Tại hạ xin được tóm tắt lại quá trình để hiển thị tiếng việt trên LCD như sau:
                              - Tạo bộ phông lưu vào trong ROM của 8051 ( mỗi ký tự 8 byte )
                              Ví dụ chữ ư như hình vẽ phải khai báo là:
                              CHUUW: DB 02H,01H,13H,12H,12H,12H,0CH,00H
                              - khi cần hiển thị một ký tự thì lấy ra khỏi ROM của 8051 rồi ghi vào CGRAM của LCD như ghi ký tự vào DDRAM, chỉ việc thay địa chỉ bắt đầu là
                              ký tự thứ 1 = 40h; ký tự thứ 2 = 48h; ... ;ký tự thứ 8 = 78h
                              mỗi ký tự ghi 8 byte ( ví dụ ký tự thứ nhất là từ 40h -> 47h )
                              - Hiển thị ký tự ra màn hình bằng cách ghi lên DDRAM với dữ liệu như sau:
                              ký tự thứ 1 = 00h; ký tự thứ 2 = 01h ; ... ; ký tự thứ 8 = 07h
                              Last edited by ng2mat; 04-03-2006, 21:15.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X