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é!
Thông báo
Collapse
No announcement yet.
LCD và tiếng việt
Collapse
X
-
;------------------------;
; 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
Nguyên văn bởi thaithutrangHihi... 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.
Nguyên văn bởi MicroDuyphiNó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
-
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 = 07hLast edited by ng2mat; 04-03-2006, 21:15.
Comment
Bài viết mới nhất
Collapse
-
bởi nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
22-12-2024, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
22-12-2024, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
22-12-2024, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
Comment