PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 18-02-2009, 04:17 PM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi xuanhiendk2 View Post
Thế nhưng ví dụ chữ A, B, C... thì đều có mã ASCII để nhận biết. Còn vi dụ chữ Â thì làm gì có mã ASCII để nhận biết hả anh. Ví dụ như chữ Â được mã hóa như thế nào trong MCU ạ? Ví dụ như em muốn hiển thị chữ Â ra LMD thì em phải xuất 5 byte mã hóa của chữ Â. Vậy làm sao đê biết đó là chữ Â được?
Các chữ đã được mã hóa ASCII thì đơn giản rồi. Ví dụ chữ A chẳng hạn em trỏ đến địa chỉ 32 trong eeprom và xuất liên tiếp 5 byte a[32].b[j]
Bạn cho biết đoạn code mà bạn đã dùng để hiển thị tiếng Anh trên LED ma trận, tôi sẽ dựa vào đó mà giúp bạn ý tưởng (bạn chưa nắm được ý tưởng về việc tự tạo bảng font để dùng với LED ma trận).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-02-2009, 04:25 PM   #2
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Đây là bảng mã:
Code:
typedef struct {
int8 b[5]; /* Data */
}T_font;
const T_font font[]={
//******************BANG MA ASCII****************
//ascii_code:
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE    0
0xFF,0xFF,0xA0,0xFF,0xFF,//!        1
0xFF,0xFF,0xF8,0xF4,0xFF,//'    2
0xEB,0x80,0xEB,0x80,0xEB,//#    3
0xDB,0xD5,0x80,0xD5,0xED,//$    4
0xD8,0xEA,0x94,0xAB,0x8D,//%    5
0xC9,0xB6,0xA9,0xDF,0xAF,//&    6
0xFF,0xFF,0xF8,0xF4,0xFF,//'    7
0xFF,0xE3,0xDD,0xBE,0xFF,//(    8
0xFF,0xBE,0xDD,0xE3,0xFF,//)    9
0xD5,0xE3,0x80,0xE3,0xD5,//*    10
0xF7,0xF7,0xC1,0xF7,0xF7,//+    11
0xFF,0xA7,0xC7,0xFF,0xFF,//,    12
0xF7,0xF7,0xF7,0xF7,0xF7,//-    13
0xFF,0x9F,0x9F,0xFF,0xFF,//x    14
0xFF,0xC9,0xC9,0xFF,0xFF,///    15
0xC1,0xAE,0xB6,0xBA,0xC1,//0    16
0xFF,0xBD,0x80,0xBF,0xFF,//1    17
0x8D,0xB6,0xB6,0xB6,0xB9,//2    18
0xDD,0xBE,0xB6,0xB6,0xC9,//3    19
0xE7,0xEB,0xED,0x80,0xEF,//4    20
0xD8,0xBA,0xBA,0xBA,0xC6,//5    21
0xC3,0xB5,0xB6,0xB6,0xCF,//6    22
0xFE,0x8E,0xF6,0xFA,0xFC,//7    23
0xC9,0xB6,0xB6,0xB6,0xC9,//8    24
0xF9,0xB6,0xBE,0xD6,0xE1,//9    25
0xFF,0xC9,0xC9,0xFF,0xFF,//:    26
0xFF,0xA4,0xC4,0xFF,0xFF,////    27
0xF7,0xEB,0xDD,0xBE,0xFF,//<    28
0xEB,0xEB,0xEB,0xEB,0xEB,//=    29
0xFF,0xBE,0xDD,0xEB,0xF7,//>   30
0xFD,0xFE,0xAE,0xF6,0xF9,//?    31
0xCD,0xB6,0x8E,0xBE,0xC1,//@    32
0x83,0xF5,0xF6,0xF5,0x83,//A    33
0xBE,0x80,0xB6,0xB6,0xC9,//B    34
0xC1,0xBE,0xBE,0xBE,0xDD,//C    35
0xBE,0x80,0xBE,0xBE,0xC1,//D    36
0x80,0xB6,0xB6,0xB6,0xBE,//E    37
0x80,0xF6,0xF6,0xFE,0xFE,//F    38
0xC1,0xBE,0xB6,0xB6,0xC5,//G    39
0x80,0xF7,0xF7,0xF7,0x80,//H   40
0xFF,0xBE,0x80,0xBE,0xFF,//I   41
0xDF,0xBF,0xBE,0xC0,0xFE,//J   42
0x80,0xF7,0xEB,0xDD,0xBE,//K    43
0x80,0xBF,0xBF,0xBF,0xFF,//L    44
0x80,0xFD,0xF3,0xFD,0x80,//M    45
0x80,0xFD,0xFB,0xF7,0x80,//N    46
0xC1,0xBE,0xBE,0xBE,0xC1,//O    47
0x80,0xF6,0xF6,0xF6,0xF9,//P    48
0xC1,0xBE,0xAE,0xDE,0xA1,//Q    49
0x80,0xF6,0xE6,0xD6,0xB9,//R    50
0xD9,0xB6,0xB6,0xB6,0xCD,//S    51
};
//Phan tu hai
const T_font font2[]={
0xFE,0xFE,0x80,0xFE,0xFE,//T    52
0xC0,0xBF,0xBF,0xBF,0xC0,//U    53
0xE0,0xDF,0xBF,0xDF,0xE0,//V    54
0xC0,0xBF,0xCF,0xBF,0xC0,//W    55
0x9C,0xEB,0xF7,0xEB,0x9C,//X   56
0xFC,0xFB,0x87,0xFB,0xFC,//Y89 24   57
0x9E,0xAE,0xB6,0xBA,0xBC,//Z90 25   58
0xFF,0x80,0xBE,0xBE,0xFF,//[    59
0xFD,0xFB,0xF7,0xEF,0xDF,//\    60
0xFF,0xBE,0xBE,0x80,0xFF,//]    61
0xFB,0xE1,0xE0,0xE1,0xFB,//^    62
0x7F,0x7F,0x7F,0x7F,0x7F,//_ 63
0xFF,0xFF,0xF8,0xF4,0xFF,//' 64
0xDF,0xAB,0xAB,0xAB,0xC7,//a    65
0x80,0xC7,0xBB,0xBB,0xC7,//b
0xFF,0xC7,0xBB,0xBB,0xBB,//c
0xC7,0xBB,0xBB,0xC7,0x80,//d
0xC7,0xAB,0xAB,0xAB,0xF7,//e    69
0xF7,0x81,0xF6,0xF6,0xFD,//f
0xF7,0xAB,0xAB,0xAB,0xC3,//g    71
0x80,0xF7,0xFB,0xFB,0x87,//h    72
0xFF,0xBB,0x82,0xBF,0xFF,//i    73
0xDF,0xBF,0xBB,0xC2,0xFF,//j    74
0xFF,0x80,0xEF,0xD7,0xBB,//k    75
0xFF,0xBE,0x80,0xBF,0xFF,//l    76
0x83,0xFB,0x87,0xFB,0x87,//m    77
0x83,0xF7,0xFB,0xFB,0x87,//n    78
0xC7,0xBB,0xBB,0xBB,0xC7,//o    79
0x83,0xEB,0xEB,0xEB,0xF7,//p    80
0xF7,0xEB,0xEB,0xEB,0x83,//q    81
0x83,0xF7,0xFB,0xFB,0xF7,//r    82
0xB7,0xAB,0xAB,0xAB,0xDB,//s    83
0xFF,0xFB,0xC0,0xBB,0xBB,//t    84
0xC3,0xBF,0xBF,0xDF,0x83,//u    85
0xE3,0xDF,0xBF,0xDF,0xE3,//v    86
0xC3,0xBF,0xCF,0xBF,0xC3,//w    87
0xBB,0xD7,0xEF,0xD7,0xBB,//x    88
0xF3,0xAF,0xAF,0xAF,0xC3,//y    89
0xBB,0x9B,0xAB,0xB3,0xBB,//z    90
0xFB,0xE1,0xE0,0xE1,0xFB,//^     92
0xE3,0xE3,0xC1,0xE3,0xF7,//->93
0xF7,0xE3,0xC1,0xE3,0xE3,//<-94
0xEF,0xC3,0x83,0xC3,0xEF,//95
0xFF,0xFF,0xFF,0xFF,0xFF//BLANK CHAR 96
};
// End of code table
Đây là đoạn code lấy mã chữ và dịch Ram:

Code:
void copy_2_ram2(int8 index_char) {

int8 i,j;

for (j=0;j<=5;j++)
{
 for (i=90;i>0;i--)                       // Dich RAM
  buff_disp[i]= buff_disp[i-1];           //Dich RAM sang trai
  buff_disp[0]=font2[index_char].b[j];    //Luu ma ascii vao RAM
  display();                              // Goi hien thi
}
  buff_disp[0]=0xff; // Them mot khoang trang giua hai ky tu
}

void copy_2_ram1(int8 index_char) {
int8 i,j;

for (j=0;j<=5;j++)
{                                      // Dich RAM
 for (i=90;i>0;i--)
  buff_disp[i]= buff_disp[i-1];        // Dich RAM sang trai
  buff_disp[0]=font[index_char].b[j];  // Luu ma ascii vao RAM
  display();  // Goi hien thi

}
  buff_disp[0]=0xff;
}
Mong bác giúp đỡ

thay đổi nội dung bởi: namqn, 19-02-2009 lúc 05:01 PM.
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-02-2009, 05:23 PM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Như vậy là bạn đã biết cách tạo font cho LED ma trận. Vấn đề còn lại là chọn phương pháp hiện thực font 1-byte tiếng Việt cho thuận lợi khi viết code thôi.

Với font 1-byte, bạn có thể có tối đa 256 ký tự trong một bảng font, và phần bảng mã ASCII mà bạn đã hiện thực mới chiếm có 97 ký tự, do đó bạn vẫn còn một số mã chưa dùng để hiện thực các ký tự tiếng Việt có dấu.

Các lý do mà tôi khuyên bạn dựa vào bảng font tiếng Việt 1-byte trên máy tính:
- Thuận lợi khi viết code trên máy tính, vì bạn có thể chọn bảng mã font với bộ gõ tiếng Việt để nhập các chuỗi hằng vào chương trình
- Tương thích với các host PC, khi bạn muốn dùng một chương trình trên host PC để truyền các thông điệp cần hiển thị lên LED (qua một giao tiếp nào đó như RS-232, USB, ...)

Tham khảo trang web sau về các bảng mã tiếng Việt: http://vietunicode.sourceforge.net/charset/, xét ví dụ bảng mã VISCII (là bảng mã chỉ sử dụng 1 byte. Giả sử bây giờ bạn muốn hiện thực ký tự "â" (mã 0xE2 = 226 trong bảng mã VISCII). Bạn chỉ cần lấy 5 byte cho ký tự "a" trong bảng font của bạn, sửa lại để hiển thị "â" trên LED, và đặt vào vị trí tương ứng với địa chỉ 226 trong bảng font của bạn, là có thể hiển thị ký tự đó trên LED ma trận của bạn.

Làm tương tự cho các ký tự khác, theo như bảng mã VISCII, và sau đó bạn có thể dùng một host PC để gửi các thông điệp tiếng Việt mã hóa theo bảng mã VISCII từ máy tính đến vi điều khiển để hiển thị lên LED ma trận.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-02-2009, 11:36 AM   #4
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Trích:
Nguyên văn bởi namqn View Post
Như vậy là bạn đã biết cách tạo font cho LED ma trận. Vấn đề còn lại là chọn phương pháp hiện thực font 1-byte tiếng Việt cho thuận lợi khi viết code thôi.

Với font 1-byte, bạn có thể có tối đa 256 ký tự trong một bảng font, và phần bảng mã ASCII mà bạn đã hiện thực mới chiếm có 97 ký tự, do đó bạn vẫn còn một số mã chưa dùng để hiện thực các ký tự tiếng Việt có dấu.

Các lý do mà tôi khuyên bạn dựa vào bảng font tiếng Việt 1-byte trên máy tính:
- Thuận lợi khi viết code trên máy tính, vì bạn có thể chọn bảng mã font với bộ gõ tiếng Việt để nhập các chuỗi hằng vào chương trình
- Tương thích với các host PC, khi bạn muốn dùng một chương trình trên host PC để truyền các thông điệp cần hiển thị lên LED (qua một giao tiếp nào đó như RS-232, USB, ...)

Tham khảo trang web sau về các bảng mã tiếng Việt: http://vietunicode.sourceforge.net/charset/, xét ví dụ bảng mã VISCII (là bảng mã chỉ sử dụng 1 byte. Giả sử bây giờ bạn muốn hiện thực ký tự "â" (mã 0xE2 = 226 trong bảng mã VISCII). Bạn chỉ cần lấy 5 byte cho ký tự "a" trong bảng font của bạn, sửa lại để hiển thị "â" trên LED, và đặt vào vị trí tương ứng với địa chỉ 226 trong bảng font của bạn, là có thể hiển thị ký tự đó trên LED ma trận của bạn.

Làm tương tự cho các ký tự khác, theo như bảng mã VISCII, và sau đó bạn có thể dùng một host PC để gửi các thông điệp tiếng Việt mã hóa theo bảng mã VISCII từ máy tính đến vi điều khiển để hiển thị lên LED ma trận.

Thân,
Anh namqn ơi. Trong Pic mình có khai báo chữ tiếng việt được ko? Và nếu sử dụng bảng mã VISCII như anh nói thì Pic có nhận biết được nó không? Hay Pic chỉ nhận biết được mã ASCII thôi?
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-02-2009, 05:07 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi xuanhiendk2 View Post
Anh namqn ơi. Trong Pic mình có khai báo chữ tiếng việt được ko? Và nếu sử dụng bảng mã VISCII như anh nói thì Pic có nhận biết được nó không? Hay Pic chỉ nhận biết được mã ASCII thôi?
PIC chỉ coi chúng là dữ liệu 8-bit, ASCII hay VISCII gì đều chỉ là các giá trị 8-bit. Việc hiển thị là để người dùng đọc và hiểu được, chứ đối với bản thân vi điều khiển thì mọi thứ chỉ đều là một chuỗi các giá trị '0' và '1'.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2009, 11:53 AM   #6
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Trích:
Nguyên văn bởi namqn View Post
PIC chỉ coi chúng là dữ liệu 8-bit, ASCII hay VISCII gì đều chỉ là các giá trị 8-bit. Việc hiển thị là để người dùng đọc và hiểu được, chứ đối với bản thân vi điều khiển thì mọi thứ chỉ đều là một chuỗi các giá trị '0' và '1'.

Thân,
Vâng để em tìm hiểu thêm. Nhưng mà anh ơi làm sao viết được tiếng việt trong CCS hả anh? Chẳng lẽ muốn viết chữ Â lại phải viết hai chữ A à? Như thế thì khó xử lý hơn rất nhiều.
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-02-2009, 10:17 AM   #7
xuanhiendk2
Đệ tử 3 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 52
:
Vâng nói chung là kiến thức của em còn hạn chế quá. Em cũng chưa hiểu lắm. Để em thử xem. Cảm ơn anh rất nhiều vì những bài viết bổ ích.
xuanhiendk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 12:58 PM   #8
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
gửi Anh Namnp

Bác Nampn ơi cho em hỏi với a. em dùng 2 hàm để ghi dữ liệu vào eeprom ngoài (24c512) mà sao ko được(nó bị ghi vào rom trong của pic) anh có cách nào ko giúp em với a.

Code:
void write_eeprom(long int address,unsigned char data)
 {
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_write(data);
   i2c_stop();
   delay_ms(11);
}

//********************************************************

unsigned char read_eeprom(long int address)
{
   unsigned char data;
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}
__________________
Đỉnh của lòng chảo.

thay đổi nội dung bởi: namqn, 25-02-2009 lúc 04:11 PM.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 04:16 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi saoden1102 View Post
Bác Nampn ơi cho em hỏi với a. em dùng 2 hàm để ghi dữ liệu vào eeprom ngoài (24c512) mà sao ko được(nó bị ghi vào rom trong của pic) anh có cách nào ko giúp em với a.

Code:
void write_eeprom(long int address,unsigned char data)
 {
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_write(data);
   i2c_stop();
   delay_ms(11);
}

//********************************************************

unsigned char read_eeprom(long int address)
{
   unsigned char data;
   int upper_addr;
   int lower_addr;
   upper_addr=(int)(address >> 8);        
   lower_addr=(int)(address & 0x00FF);

   i2c_start();
   i2c_write(0xa0);
   i2c_write(upper_addr);
   i2c_write(lower_addr);
   i2c_start();
   i2c_write(0xa1);
   data=i2c_read(0);
   i2c_stop();
   return(data);
}
Bạn đang dùng trình biên dịch nào? Nếu bạn dùng CCS C thì các hàm của bạn có vẻ trùng tên với các hàm đọc, ghi EEPROM của trình biên dịch. Bạn nên xem ví dụ giao tiếp với EEPROM ngoài của CCS C (tập tin ex_extee.c, họ dùng các hàm có sẵn là READ_EXT_EEPROM() và WRITE_EXT_EEPROM()).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2009, 10:41 PM   #10
saoden1102
Nhập môn đệ tử
 
saoden1102's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 10
:
Vâng em cảm ơn Anh nhiều, em đang xem lại đây a.
__________________
Đỉnh của lòng chảo.
saoden1102 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-10-2009, 10:54 AM   #11
rikimaru87
Đệ tử 3 túi
 
rikimaru87's Avatar
 
Tham gia ngày: Apr 2009
Bài gửi: 53
:
bạn cho mình xem sơ đồ kết nối i2c của ban dc ko
rikimaru87 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:35 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam