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 :
CGRAMB 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
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Cảm ơn bác nhiệt tình góp ý.
Đúng là ĐT quá dở nên diễn đạt câu "I'm going to send you..." theo cách nói hiện tại và của người Việt, vì lúc đó cứ nghĩ là mình còn đang viết từng chữ với ý định là sẽ gửi thư khi viết...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 11:47 -
-
Trả lời cho Biết gì nói nấy, cãi chửi thoải máibởi dinhthuong80Cảm ơn bạn @mèomướp nhé!
Cũng may mà ĐT đây đã xem thớt kia và vẽ sơ đồ mạch và post bài, giờ mới thử vào thớt này. (sơ đồ chắc chắn không tránh khỏi còn vài sai sót như mạch ổn áp 110V lại dùng BJT 100V,... nhưng với người hiểu biết...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 11:09 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi iTronXin cảm ơn ae ĐTVN rất nhiều, do điều kiện ko cho phép nên từ trước đến giờ mình chủ yếu tìm hiểu qua sách và tham gia các diễn đàn để bổ sung kiến thức cho thỏa đam mê.
Một lần nữa, xin cảm ơn ae đã hỗ trợ. Chúc ae ĐTVN nhiều sức khỏe.-
Channel: Hướng dẫn tìm thông tin linh kiện
hôm nay, 10:45 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi dinhthuong80OK bác, ĐT xin lỗi tất cả vì chỉ nhìn thoáng thấy phần linh kiện giông giống mạch vào của KĐCS BTL mà không xem kĩ ( nên có nói phải vẽ lại cái mạch đó).
ĐT xin được sửa sai bằng việc vẽ lại sơ đồ mạch của bạn thớt, ít nhiều...-
Channel: Hướng dẫn tìm thông tin linh kiện
hôm nay, 10:37 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi iTronCảm ơn bác nhiều nhé...
-
Channel: Hướng dẫn tìm thông tin linh kiện
hôm nay, 10:35 -
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi dinhthuong80OK bác, ĐT xin lỗi tất cả vì chỉ nhìn thoáng thấy phần linh kiện giông giống mạch vào của KĐCS BTL mà không xem kĩ ( nên có nói phải vẽ lại cái mạch đó).
ĐT xin được sửa sai bằng việc vẽ lại sơ đồ mạch của bạn thớt, ít nhiều...-
Channel: Hướng dẫn tìm thông tin linh kiện
hôm nay, 10:28 -
-
Trả lời cho Biết gì nói nấy, cãi chửi thoải máibởi mèomướpÝ chú nhat... ở đây là đang bêu xấu chú dinh... chưa hiểu được những thứ đơn giản đã đòi làm thứ phức tạp đúng hông ạ. Với ngày trước chưa hẳn đúng, ngày nay thì càng khập khiễng. Kiến thức quá nhìu, không phải ai cũng có đủ...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 09:19 -
-
Trả lời cho Biết gì nói nấy, cãi chửi thoải máibởi nhathung1101Cáu nhau cứ vào đây giải quyết.
Đừng để lũ trẻ nhìn ở ngoài, học theo thói xấu...
Và tuyệt đối không để bọn trẻ học theo cái "ngu" ở đó.-
Channel: Tâm tình dân kỹ thuật
hôm nay, 00:51 -
-
Trả lời cho Biết gì nói nấy, cãi chửi thoải máibởi nhathung1101Khơi mào luôn:
Một người chưa hiểu nguyên lý ổn áp tuyến tính (Linear Voltage Regulator) lại muốn hiểu MPPT???...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 00:47 -
-
bởi nhathung1101Tinh thần của luồng:
- Biết gì nói nấy.
- Cãi chửi nhau thoải mái.
- Chỉ vì kỹ thuật.
- Càng vui càng tốt.
Oh... Yeah... Please....
Anh em nào có khúc mắc cứ vào đây, đừng vào những luồng "đèn đỏ" nhé.-
Channel: Tâm tình dân kỹ thuật
hôm nay, 00:29 -
Comment