Thông báo

Collapse
No announcement yet.

cách tạo mã font asii.

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

  • cách tạo mã font asii.

    em thấy trên mạng có đoạn như thế này.
    flash unsigned char font[96][5]=
    {
    {0x00, 0x00, 0x00, 0x00, 0x00},// (space)
    {0x00, 0x00, 0x5F, 0x00, 0x00},// !
    {0x00, 0x07, 0x00, 0x07, 0x00},// "
    {0x14, 0x7F, 0x14, 0x7F, 0x14},// #
    {0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
    {0x23, 0x13, 0x08, 0x64, 0x62},// %
    {0x36, 0x49, 0x55, 0x22, 0x50},// &
    {0x00, 0x05, 0x03, 0x00, 0x00},// '
    {0x00, 0x1C, 0x22, 0x41, 0x00},// (
    {0x00, 0x41, 0x22, 0x1C, 0x00},// )
    {0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
    {0x08, 0x08, 0x3E, 0x08, 0x08},// +
    {0x00, 0x50, 0x30, 0x00, 0x00},// ,
    {0x08, 0x08, 0x08, 0x08, 0x08},// -
    {0x00, 0x30, 0x30, 0x00, 0x00},// .
    {0x20, 0x10, 0x08, 0x04, 0x02},// /
    {0x3E, 0x51, 0x49, 0x45, 0x3E},// 0
    {0x00, 0x42, 0x7F, 0x40, 0x00},// 1
    {0x42, 0x61, 0x51, 0x49, 0x46},// 2
    {0x21, 0x41, 0x45, 0x4B, 0x31},// 3
    {0x18, 0x14, 0x12, 0x7F, 0x10},// 4
    {0x27, 0x45, 0x45, 0x45, 0x39},// 5
    {0x3C, 0x4A, 0x49, 0x49, 0x30},// 6
    {0x01, 0x71, 0x09, 0x05, 0x03},// 7
    {0x36, 0x49, 0x49, 0x49, 0x36},// 8
    {0x06, 0x49, 0x49, 0x29, 0x1E},// 9
    {0x00, 0x36, 0x36, 0x00, 0x00},// :
    {0x00, 0x56, 0x36, 0x00, 0x00},// ;
    {0x00, 0x08, 0x14, 0x22, 0x41},// <
    {0x14, 0x14, 0x14, 0x14, 0x14},// =
    {0x41, 0x22, 0x14, 0x08, 0x00},// >
    {0x02, 0x01, 0x51, 0x09, 0x06},// ?
    {0x32, 0x49, 0x79, 0x41, 0x3E},// @
    {0x7E, 0x11, 0x11, 0x11, 0x7E},// A
    {0x7F, 0x49, 0x49, 0x49, 0x36},// B
    {0x3E, 0x41, 0x41, 0x41, 0x22},// C
    {0x7F, 0x41, 0x41, 0x22, 0x1C},// D
    {0x7F, 0x49, 0x49, 0x49, 0x41},// E
    {0x7F, 0x09, 0x09, 0x01, 0x01},// F
    {0x3E, 0x41, 0x41, 0x51, 0x32},// G
    {0x7F, 0x08, 0x08, 0x08, 0x7F},// H
    {0x00, 0x41, 0x7F, 0x41, 0x00},// I
    {0x20, 0x40, 0x41, 0x3F, 0x01},// J
    {0x7F, 0x08, 0x14, 0x22, 0x41},// K
    {0x7F, 0x40, 0x40, 0x40, 0x40},// L
    {0x7F, 0x02, 0x04, 0x02, 0x7F},// M
    {0x7F, 0x04, 0x08, 0x10, 0x7F},// N
    {0x3E, 0x41, 0x41, 0x41, 0x3E},// O
    {0x7F, 0x09, 0x09, 0x09, 0x06},// P
    {0x3E, 0x41, 0x51, 0x21, 0x5E},// Q
    {0x7F, 0x09, 0x19, 0x29, 0x46},// R
    {0x46, 0x49, 0x49, 0x49, 0x31},// S
    {0x01, 0x01, 0x7F, 0x01, 0x01},// T
    {0x3F, 0x40, 0x40, 0x40, 0x3F},// U
    {0x1F, 0x20, 0x40, 0x20, 0x1F},// V
    {0x7F, 0x20, 0x18, 0x20, 0x7F},// W
    {0x63, 0x14, 0x08, 0x14, 0x63},// X
    {0x03, 0x04, 0x78, 0x04, 0x03},// Y
    {0x61, 0x51, 0x49, 0x45, 0x43},// Z
    {0x00, 0x00, 0x7F, 0x41, 0x41},// [
    {0x02, 0x04, 0x08, 0x10, 0x20},// "\"
    {0x41, 0x41, 0x7F, 0x00, 0x00},// ]
    {0x04, 0x02, 0x01, 0x02, 0x04},// ^
    {0x40, 0x40, 0x40, 0x40, 0x40},// _
    {0x00, 0x01, 0x02, 0x04, 0x00},// `
    {0x20, 0x54, 0x54, 0x54, 0x78},// a
    {0x7F, 0x48, 0x44, 0x44, 0x38},// b
    {0x38, 0x44, 0x44, 0x44, 0x20},// c
    {0x38, 0x44, 0x44, 0x48, 0x7F},// d
    {0x38, 0x54, 0x54, 0x54, 0x18},// e
    {0x08, 0x7E, 0x09, 0x01, 0x02},// f
    {0x08, 0x14, 0x54, 0x54, 0x3C},// g
    {0x7F, 0x08, 0x04, 0x04, 0x78},// h
    {0x00, 0x44, 0x7D, 0x40, 0x00},// i
    {0x20, 0x40, 0x44, 0x3D, 0x00},// j
    {0x00, 0x7F, 0x10, 0x28, 0x44},// k
    {0x00, 0x41, 0x7F, 0x40, 0x00},// l
    {0x7C, 0x04, 0x18, 0x04, 0x78},// m
    {0x7C, 0x08, 0x04, 0x04, 0x78},// n
    {0x38, 0x44, 0x44, 0x44, 0x38},// o
    {0x7C, 0x14, 0x14, 0x14, 0x08},// p
    {0x08, 0x14, 0x14, 0x18, 0x7C},// q
    {0x7C, 0x08, 0x04, 0x04, 0x08},// r
    {0x48, 0x54, 0x54, 0x54, 0x20},// s
    {0x04, 0x3F, 0x44, 0x40, 0x20},// t
    {0x3C, 0x40, 0x40, 0x20, 0x7C},// u
    {0x1C, 0x20, 0x40, 0x20, 0x1C},// v
    {0x3C, 0x40, 0x30, 0x40, 0x3C},// w
    {0x44, 0x28, 0x10, 0x28, 0x44},// x
    {0x0C, 0x50, 0x50, 0x50, 0x3C},// y
    {0x44, 0x64, 0x54, 0x4C, 0x44},// z
    {0x00, 0x08, 0x36, 0x41, 0x00},// {
    {0x00, 0x00, 0x7F, 0x00, 0x00},// |
    {0x00, 0x41, 0x36, 0x08, 0x00},// }
    {0x08, 0x08, 0x2A, 0x1C, 0x08},// ->
    {0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
    };
    ///////////////////////////////////.........................
    sau đó có hàn.
    void lcd_putchar(unsigned char c)
    {
    int i;
    for ( i = 0; i < 5; i++ )
    {
    lcd_write(DATA,font[c - 32][i] << 1);
    }
    lcd_write(DATA,0x00);
    }
    void lcd_putsf(flash char *str)
    {
    lcd_write(CMD,0xae);
    while (*str)
    {
    lcd_putchar(*str++);
    }
    lcd_write(CMD,0xaf);
    }
    em muốn hỏi là tại sao khi gọi hàm lcd_putsf("khong hieu") thì chưng trình lại có thể nhảy đến đúng các chữ tại mã font để hiển thị ra màn hình.
    các anh có thể nói cụ thể 1 chút không.
    em mới học 8051 lên hỏi có ngu ngu ở đâu thì các anh thông cảm nhé.

  • #2
    ai giúp em với.

    Comment


    • #3
      Nguyên văn bởi voiviqua Xem bài viết
      ai giúp em với.
      Nguyên văn bởi voiviqua Xem bài viết
      em thấy trên mạng có đoạn như thế này.
      ......
      em muốn hỏi là tại sao khi gọi hàm lcd_putsf("khong hieu") thì chưng trình lại có thể nhảy đến đúng các chữ tại mã font để hiển thị ra màn hình.
      các anh có thể nói cụ thể 1 chút không.
      em mới học 8051 lên hỏi có ngu ngu ở đâu thì các anh thông cảm nhé.
      Thế này bạn nhé:
      1.
      - Bạn hình dung Bảng mã ASCII là một tập hợp (một mảng 1 chiều - cho dễ hình dung), tập hợp này có 256 phần tử mỗi phần tử được gọi là 1 ký tự.
      - Có hai loại ký tự: Ký tự hiển thị (vd: A,B,C, d,e,f...- là những ký tự ta có thể trông thấy, kể cả dấu cách hay dấu Tab) và ký tự điều khiển(Enter, Home, End...).
      - Mỗi ký tự có một vị trí cố định trong bảng ASCII, đây là quy ước chung.
      2.
      - Cái bảng font mà bạn nêu ra cũng là một tập hợp, nó chỉ quan tâm đến các ký tự thường dùng hiển thị nên chỉ có 96 phần tử, nó là tập con của Bảng ASCII
      - Bảng font được bắt đầu từ ký tự cách (ký tự cách là ký tự thứ 32 trong bảng ASCII).
      - Vì vậy khi gọi hàm lcd_putsf("khong hieu") thì từng ký tự trong chuỗi "khong hieu" sẽ được trừ đi 32 để trỏ đến đúng ký tự bạn cần vẽ:
      ví dụ: chữ "k" trong bảng ASCII nằm ở vị trí thứ 107 (tính cả zero nhé): 107 - 32 = 75 rơi trúng vào dòng thứ 75 là dòng {0x00, 0x7F, 0x10, 0x28, 0x44},// k của bảng Font.
      3.
      - Vòng lặp
      for ( i = 0; i < 5; i++ ){lcd_write(DATA,font[c - 32][i] << 1);}
      có tác dụng vẽ vào một ma trận 8x5 điểm ảnh ký tự (c) mà bạn muốn hiển thị (Ma trận ấy là LED hay LCD đều không khác nhau).
      4. Túm lại cần để ý nhất là: Bảng font là bảng con chứa từ phần tử thứ 32 đến phần tử thứ 96+32 của Bảng ASCII. Và phép trừ c-32 là để bù lại độ lệch của hai phần tử đầu tiên trong hai bảng.

      P/S: Mình nói hơi lòng vòng, nhưng do chưa biết bạn đã nắm được gì để trả lời từ đâu... Có gì chưa rõ đừng ngại hỏi...
      Last edited by Acxen_lupine; 25-01-2013, 00:54.
      Hôm nay trời nắng chang chang.
      Mèo con đi học chẳng mang thứ gì.
      Chỉ mang một cái bút chì.
      Và mang một mẩu bánh mì con con.

      Comment


      • #4
        cảm ơn anh acxen_..
        em có viết 1 chương trình thế này.

        #include <REGX52.H>
        unsigned char code font[96][5]=
        {
        {0x00, 0x00, 0x00, 0x00, 0x00},// (space)
        {0x00, 0x00, 0x5F, 0x00, 0x00},// !
        {0x00, 0x07, 0x00, 0x07, 0x00},// "
        {0x14, 0x7F, 0x14, 0x7F, 0x14},// #
        {0x24, 0x2A, 0x7F, 0x2A, 0x12},// $
        {0x23, 0x13, 0x08, 0x64, 0x62},// %
        {0x36, 0x49, 0x55, 0x22, 0x50},// &
        {0x00, 0x05, 0x03, 0x00, 0x00},// '
        {0x00, 0x1C, 0x22, 0x41, 0x00},// (
        {0x00, 0x41, 0x22, 0x1C, 0x00},// )
        {0x08, 0x2A, 0x1C, 0x2A, 0x08},// *
        {0x08, 0x08, 0x3E, 0x08, 0x08},// +
        {0x00, 0x50, 0x30, 0x00, 0x00},// ,
        {0x08, 0x08, 0x08, 0x08, 0x08},// -
        {0x00, 0x30, 0x30, 0x00, 0x00},// .
        {0x20, 0x10, 0x08, 0x04, 0x02},// /
        {0x3E, 0x51, 0x49, 0x45, 0x3E},// 0
        {0x00, 0x42, 0x7F, 0x40, 0x00},// 1
        {0x42, 0x61, 0x51, 0x49, 0x46},// 2
        {0x21, 0x41, 0x45, 0x4B, 0x31},// 3
        {0x18, 0x14, 0x12, 0x7F, 0x10},// 4
        {0x27, 0x45, 0x45, 0x45, 0x39},// 5
        {0x3C, 0x4A, 0x49, 0x49, 0x30},// 6
        {0x01, 0x71, 0x09, 0x05, 0x03},// 7
        {0x36, 0x49, 0x49, 0x49, 0x36},// 8
        {0x06, 0x49, 0x49, 0x29, 0x1E},// 9
        {0x00, 0x36, 0x36, 0x00, 0x00},// :
        {0x00, 0x56, 0x36, 0x00, 0x00},// ;
        {0x00, 0x08, 0x14, 0x22, 0x41},// <
        {0x14, 0x14, 0x14, 0x14, 0x14},// =
        {0x41, 0x22, 0x14, 0x08, 0x00},// >
        {0x02, 0x01, 0x51, 0x09, 0x06},// ?
        {0x32, 0x49, 0x79, 0x41, 0x3E},// @
        {0x7E, 0x11, 0x11, 0x11, 0x7E},// A
        {0x7F, 0x49, 0x49, 0x49, 0x36},// B
        {0x3E, 0x41, 0x41, 0x41, 0x22},// C
        {0x7F, 0x41, 0x41, 0x22, 0x1C},// D
        {0x7F, 0x49, 0x49, 0x49, 0x41},// E
        {0x7F, 0x09, 0x09, 0x01, 0x01},// F
        {0x3E, 0x41, 0x41, 0x51, 0x32},// G
        {0x7F, 0x08, 0x08, 0x08, 0x7F},// H
        {0x00, 0x41, 0x7F, 0x41, 0x00},// I
        {0x20, 0x40, 0x41, 0x3F, 0x01},// J
        {0x7F, 0x08, 0x14, 0x22, 0x41},// K
        {0x7F, 0x40, 0x40, 0x40, 0x40},// L
        {0x7F, 0x02, 0x04, 0x02, 0x7F},// M
        {0x7F, 0x04, 0x08, 0x10, 0x7F},// N
        {0x3E, 0x41, 0x41, 0x41, 0x3E},// O
        {0x7F, 0x09, 0x09, 0x09, 0x06},// P
        {0x3E, 0x41, 0x51, 0x21, 0x5E},// Q
        {0x7F, 0x09, 0x19, 0x29, 0x46},// R
        {0x46, 0x49, 0x49, 0x49, 0x31},// S
        {0x01, 0x01, 0x7F, 0x01, 0x01},// T
        {0x3F, 0x40, 0x40, 0x40, 0x3F},// U
        {0x1F, 0x20, 0x40, 0x20, 0x1F},// V
        {0x7F, 0x20, 0x18, 0x20, 0x7F},// W
        {0x63, 0x14, 0x08, 0x14, 0x63},// X
        {0x03, 0x04, 0x78, 0x04, 0x03},// Y
        {0x61, 0x51, 0x49, 0x45, 0x43},// Z
        {0x00, 0x00, 0x7F, 0x41, 0x41},// [
        {0x02, 0x04, 0x08, 0x10, 0x20},// "\"
        {0x41, 0x41, 0x7F, 0x00, 0x00},// ]
        {0x04, 0x02, 0x01, 0x02, 0x04},// ^
        {0x40, 0x40, 0x40, 0x40, 0x40},// _
        {0x00, 0x01, 0x02, 0x04, 0x00},// `
        {0x20, 0x54, 0x54, 0x54, 0x78},// a
        {0x7F, 0x48, 0x44, 0x44, 0x38},// b
        {0x38, 0x44, 0x44, 0x44, 0x20},// c
        {0x38, 0x44, 0x44, 0x48, 0x7F},// d
        {0x38, 0x54, 0x54, 0x54, 0x18},// e
        {0x08, 0x7E, 0x09, 0x01, 0x02},// f
        {0x08, 0x14, 0x54, 0x54, 0x3C},// g
        {0x7F, 0x08, 0x04, 0x04, 0x78},// h
        {0x00, 0x44, 0x7D, 0x40, 0x00},// i
        {0x20, 0x40, 0x44, 0x3D, 0x00},// j
        {0x00, 0x7F, 0x10, 0x28, 0x44},// k
        {0x00, 0x41, 0x7F, 0x40, 0x00},// l
        {0x7C, 0x04, 0x18, 0x04, 0x78},// m
        {0x7C, 0x08, 0x04, 0x04, 0x78},// n
        {0x38, 0x44, 0x44, 0x44, 0x38},// o
        {0x7C, 0x14, 0x14, 0x14, 0x08},// p
        {0x08, 0x14, 0x14, 0x18, 0x7C},// q
        {0x7C, 0x08, 0x04, 0x04, 0x08},// r
        {0x48, 0x54, 0x54, 0x54, 0x20},// s
        {0x04, 0x3F, 0x44, 0x40, 0x20},// t
        {0x3C, 0x40, 0x40, 0x20, 0x7C},// u
        {0x1C, 0x20, 0x40, 0x20, 0x1C},// v
        {0x3C, 0x40, 0x30, 0x40, 0x3C},// w
        {0x44, 0x28, 0x10, 0x28, 0x44},// x
        {0x0C, 0x50, 0x50, 0x50, 0x3C},// y
        {0x44, 0x64, 0x54, 0x4C, 0x44},// z
        {0x00, 0x08, 0x36, 0x41, 0x00},// {
        {0x00, 0x00, 0x7F, 0x00, 0x00},// |
        {0x00, 0x41, 0x36, 0x08, 0x00},// }
        {0x08, 0x08, 0x2A, 0x1C, 0x08},// ->
        {0x08, 0x1C, 0x2A, 0x08, 0x08}, // <-
        };
        sbit EN =P3^0;
        sbit RW =P3^1;
        sbit DS =P3^2;
        sbit CS1= P3^3;
        sbit CS2 =P3^4;
        sbit BY =P2^7;
        void delay(long d)
        {
        long f;
        for(f=0;f<d;f++);
        }
        void tre(void)
        {
        unsigned char n;
        for(n=0;n<5;n++);
        }
        void chonchip(char a)
        {
        if(a==0) {CS1=1;CS2=0;}
        else {CS1=0;CS2=1;}
        tre();
        }
        void cho(void)
        {
        P2=0;
        DS=0;
        RW=1;
        EN=1;
        tre();
        EN=0;
        while(BY==1){EN=1;tre();EN=0;}
        }
        void set(char on)
        {
        cho();
        RW=0;
        DS=0;
        P2=(0x3E+on);
        EN=1;
        tre();
        EN=0;
        }
        void cot(unsigned char socot)
        {
        cho();
        RW=DS=0;
        P2=(0x40+socot);
        EN=1;
        tre();
        EN=0;
        }
        void hang(unsigned char sohang)
        {
        cho();
        RW=DS=0;
        P2=(0xB8+sohang);
        EN=1;
        tre();
        EN=0;
        }
        void cuon(unsigned char hangcuon)
        {
        cho();
        RW=DS=0;
        P2=(0xC0+hangcuon);
        EN=1;
        tre();
        EN=0;
        }
        void init(void)
        {
        chonchip(0);
        set(1);
        cot(0);
        hang(0);
        cuon(0);
        chonchip(1);
        set(1);
        cot(0);
        hang(0);
        cuon(0);
        }
        void gotoxy(unsigned char x,unsigned char y)
        {
        if(y<64) {chonchip(0);
        cot(y);
        hang(x);
        }
        if(y>63){chonchip(1);
        cot(y-64);
        hang(x);
        }
        }
        void viet(unsigned char chu)
        {
        cho();
        DS=1;
        RW=0;
        P2=chu;
        EN=1;
        tre();
        EN=0;
        tre();
        }
        void xoa(void)
        {
        unsigned char cot,hang;
        for(hang=0;hang<8;hang++)
        {
        gotoxy(hang,0);
        for(cot=0;cot<64;cot++)
        {viet(0);}
        }
        for(hang=0;hang<8;hang++)
        {
        gotoxy(hang,64);
        for(cot=64;cot<128;cot++)
        {viet(0);}
        }
        }
        void vietchuoi(unsigned char r)
        {
        unsigned char g;
        for(g=0;g<5;g++)
        {
        viet(font[r-32][g]);
        }
        }
        void ve(unsigned char *j)
        {
        unsigned long n,v,b,m;
        for(v=0;v<8;v++)
        {
        gotoxy(v,0);
        for(b=0;b<64;b++)
        {
        m=v*128+b;
        viet(j[m]);
        }
        gotoxy(v,64);
        for(n=64;n<128;n++)
        {
        m=v*128+n;
        viet(j[m]);
        }
        }
        }
        void main()
        {
        init();
        xoa();
        while(1)
        {
        gotoxy(2,66);
        viet(0x55);delay(40000);
        xoa();delay(30000);
        gotoxy(4,6);
        vietchuoi("d");delay(50000);
        xoa();delay(30000);
        }
        }

        vậy anh cho em hỏi chương trình này của em sai ở đâu mà em không viết được chữ d ra màn hình.em viết cho GLCD 128x64 (LGM12641BS1R)
        Phải sửa sao cho đúng ạ.
        em chưa dùng mảng 2 chiều bao giờ lên chưa rõ,nếu em hỏi sai gì thì anh bỏ qua cho em.

        Comment


        • #5
          Nguyên văn bởi voiviqua Xem bài viết
          cảm ơn anh acxen_..
          em có viết 1 chương trình thế này.


          vậy anh cho em hỏi chương trình này của em sai ở đâu mà em không viết được chữ d ra màn hình.em viết cho GLCD 128x64 (LGM12641BS1R)
          Phải sửa sao cho đúng ạ.
          em chưa dùng mảng 2 chiều bao giờ lên chưa rõ,nếu em hỏi sai gì thì anh bỏ qua cho em.
          Bạn có hỏi sai thì tôi cũng bỏ qua, nhưng tôi ghét nhất ai gọi tên tôi mà không đủ (Acxen_lupine - hay có thể là Arsene Lupin / Acxen Luypanh).
          Tôi không căng mắt để Debug code cho bạn được.
          Mai rảnh tôi Post cho bạn 2 Pờ rô dếch về con LCD này, bạn tham khảo sẽ tự sửa được thôi... giờ muộn rồi.
          G9!
          Hôm nay trời nắng chang chang.
          Mèo con đi học chẳng mang thứ gì.
          Chỉ mang một cái bút chì.
          Và mang một mẩu bánh mì con con.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X