Ccs c for pic16F877a mục lục I. Tổng quan về ccs vì sao ta sử dung ccs ?



tải về 1.15 Mb.
trang8/15
Chuyển đổi dữ liệu23.08.2016
Kích1.15 Mb.
#26977
1   ...   4   5   6   7   8   9   10   11   ...   15

7.10. LM35_F877A_LCD1602

#include <16F877A.h>

#include

#device *=16 adc=8

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use delay(clock=20000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include

#include


#define INTS_PER_SECOND1 9 // (20000000/(4*4*65536))

#define BUFFER_SIZE 5

#define BG_len 5
byte buffer_count,int_count1;

byte BGpos;

int8 low,high,min,max,room_temp,tong;

int1 do_F;

int8 buffer[BUFFER_SIZE];
void convert_bcd(int8 x);

void xuat_ra_LCD();

void set_blink();

void bao_dong();

void test();

// Chuong trinh ngat

#INT_EXT

void test()

{

if (do_F == 1) do_F=0;



else do_F=1;

}

#INT_TIMER1 // This function is called every time



void clock1_isr() { // timer 1 overflows (65535->0), which is

// approximately 19 times per second for

if(--int_count1==0) { // this program.

xuat_ra_lcd();

int_count1 = INTS_PER_SECOND1;

}

}



//-----------------------------------------------------------------

void main()

{

min =15; //nhiet do min default



max =35; //nhiet do max default

do_F =0 ;

int_count1=INTS_PER_SECOND1;
trisa = 0xFF;

trisb = 0x01;

trisd = 0x00;

LCD_init();

lcd_BGInit(0);

Printf(LCD_putchar,"Init...");

// Khoi tao cho ngat ngoai

enable_interrupts (INT_EXT);

ext_int_edge(H_TO_L);

// Khoi tao cho Timer1

set_timer1(0);

setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);

enable_interrupts(INT_TIMER1);

// Khoi tao che do cho bo ADC

setup_adc_ports(AN0_VREF_VREF);

setup_adc(ADC_CLOCK_INTERNAL);

delay_ms(500);

// Lay mau nhiet do lan dau tien

room_temp=read_adc();

lcd_putcmd(0x01);

Printf(LCD_putchar,"Init OK.");

delay_ms(500);

lcd_putcmd(0x01);

Printf(LCD_putchar,"DKS Group - DEV1");

LCD_putcmd(0xC0);

printf(LCD_putchar," T = ");

enable_interrupts (GLOBAL);

while(1){}

}

//end main-----------------------------------------------------------



void xuat_ra_LCD()

{

buffer[buffer_count] = read_adc();



tong = tong + buffer[buffer_count];

buffer_count++;

if (buffer_count == BUFFER_SIZE)

{

room_temp = tong / 5;



BGpos = room_temp / 10;

lcd_DrawBG(1,10,BG_len,BGpos);

tong = 0;

buffer_count = 0;


if((room_temp > 40) || (room_temp < 15))

{

// lcd_putcmd(0xCA);



// printf(LCD_putchar,"ALARM !");

PORTB = 0x41;

}

else


{

// lcd_putcmd(0xCA);

// printf(LCD_putchar," ");

PORTB = 0x81;

}

if (do_F==1) room_temp = 2 * room_temp + 32;


printf("\n\rNhiet do phong: %u",room_temp);

convert_bcd(room_temp);

LCD_putcmd(0xC5);

LCD_putchar(high); LCD_putchar(low);LCD_putchar(0xDF);

if (do_F==0) printf(LCD_putchar,"C");

else printf(LCD_putchar,"F");

}

}

void convert_bcd(int8 x)



{

low=x%10; //chia lay phan du, so hang don vi

high=x/10; //tach hang tram va hang chuc

low = low + 0x30;

high = high + 0x30;

}

7.11. LM335_F877A_LCD1602

/* Mach do nhiet do

- MCU = PIC16F877A

- Sensor = LM335 (co the thay the bang LM35D)

- MAX232 giao tiep may tinh

- LCD1602A de hien thi gia tri nhiet do

Mo ta phan cung:

- Mach cho sensor mac nhu trong Datasheet cua LM335

Chan V_out noi qua dien tro 1K voi +5V. Chan nay cung duoc noi voi kenh AN0 cua PIC

Chan Adj noi voi dien tro 10K de tinh chinh

Chan GND noi dat

- Mach VDK gom co LCD va max232

LCD noi voi PORTD cua PIC

RS -> RD2, RW -> GND, E -> RD3

D4-D7 -> RD4-RD7

Max232:

chan10 -> RC6, chan9 -> RC7



chan8 -> chan3 DB9, chan7 -> chan2 DB9, chan5 DB9 -> GND

Kenh AN0 cua PIC noi den chan V_out LM335

Nut bam noi tai chan RB0 -> nhan ngat ngoai

Thach anh loai 20MHz, tu 22pF

==============================================

- Designer: linhnc308@yahoo.com

- Chuc thanh cong cung VDK PIC

*/

#include <16F877A.h>



#include

#device *=16 adc=10

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use delay(clock=20000000)

#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)

#include

int8 low,high,key,mode,min,max,mode1,i;

int1 blink,on_off,blink_min,blink_max;

int1 do_F;
void convert_bcd(int8 x);

void set_blink();

void bao_dong();

void test();

//-----------------------------------------------------------------

void main()

{

float value;



on_off =1;

min =15; //nhiet do min default

max =35; //nhiet do max default

do_F =0 ;

i = 0 ;

mode =0 ;



mode1 = 0 ;

blink=0 ;


trisa = 0xFF;

trisb = 0x01;

trisd = 0x00;

LCD_init();

Printf(LCD_putchar,"Lop DT8 - BKHN");

LCD_putcmd(0xC0);

Printf(LCD_putchar,"Khoi tao...");

// Khoi tao cho ngat ngoai

enable_interrupts (INT_EXT);

ext_int_edge(H_TO_L);

enable_interrupts (GLOBAL);

// Khoi tao che do cho bo ADC

setup_adc_ports(AN0);

setup_adc(ADC_CLOCK_INTERNAL);

delay_us(10);

// Lay mau nhiet do lan dau tien

value=(float)read_adc();

value = (value - 558.5)/2.048; // For 5V supply

// value = (value - 754.8)/2.048; // For 3.7V Supply

// value = (value - 698.2)/2.048; // For 4V supply

convert_bcd((int8)value); // Chuyen doi tach so tram, chuc, donvi de hien thi len LED 7

delay_ms(1000);

LCD_putcmd(0xC0);

Printf(LCD_putchar," Init OK");


while(1)

{

if (i==25)



{

value = read_adc();

value=(value-558.5)/2.048;
if (do_F==1) value=1.8*value+32;

convert_bcd((int8)value);

printf("\n\rNhiet do phong: %u",value);

LCD_putcmd(0xC0);

printf(LCD_putchar," T = ");

LCD_putchar(high); LCD_putchar(low);

if (do_F==0) printf(LCD_putchar," C");

else printf(LCD_putchar," F");

i=0;

}

i++;



if(((int8)value > 40) || ((int8)value < 15)) on_off=1;

else


{

on_off = 0;

LCD_Putcmd(0xCF);

LCD_putchar(" ");

blink=0;

}

if (on_off==1)



{

if (blink==0) { LCD_Putcmd(0xCF);LCD_putchar("!");blink=1;delay_ms(250);}

else {LCD_Putcmd(0xCF);LCD_putchar(" ");blink=0;delay_ms(250);}

}

}



}

//end main-----------------------------------------------------------

#INT_EXT

void test()

{

if (do_F == 1) do_F=0;



else do_F=1;
}

void set_blink()

{

switch(mode)



{

case 1: blink_min=1; break;

case 2: {blink_max=1; blink_min=0;} break;

case 3: {mode=0; blink=0; blink_min=0; blink_max=0;} break;

}

}

void convert_bcd(int8 x)



{

low=x%10; //chia lay phan du, so hang don vi

high=x/10; //tach hang tram va hang chuc

low = low + 0x30;

high = high + 0x30;

}

void bao_dong(){



int8 i;
if (blink == 0) blink = 1;

else blink=0;


for(i=0;i<50;i++)

{

LCD_Putcmd(0xCF);



if (blink==0) LCD_putchar("!");

else LCD_putchar(" ");

}

}

7.12. lcd_bargraph



#separate void LCD_BGInit (int1 type );//BarGraph type: 1 = Vertical or 0 = Horizontal

#separate void LCD_DrawVBG ( BYTE row, BYTE cloum, BYTE height, BYTE BGpos );// Hien thi BarGraph

#separate void LCD_DrawBG ( BYTE row, BYTE cloum, BYTE len, BYTE BGpos );// Hien thi BarGraph
//#separate

typedef struct {

int8 b[8]; /* Data */

}T_font;
const T_font VBG[9]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .....

0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // |||||

0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, // |||||

0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00, // |||||

0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00, // |||||

0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00,0x00, // |||||

0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00,0x00, // |||||

0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x00, // |||||

0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, // |||||

};

const T_font BG[6] = {



0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .....

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, // |....

0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // ||...

0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C, // |||..

0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E, // ||||.

0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, // |||||

};

#separate void LCD_BGInit (int1 type) //BarGraph type: 1 = Vertical or 0 = Horizontal



{

int8 i,j;

if (type == 1) // 1 = Vertical

{

lcd_putcmd(0x00);



lcd_putcmd(0x40); // SET CGRAM Address Counter = 0x00;

for( j = 0; j < 9; j++ )

For( i = 0; i <= 7; i++ ) LCD_putchar(VBG[j].b[i]); // Luu cac hinh vao CGRAM

}

else // 0 = Horizontal



{

lcd_putcmd(0x00);

lcd_putcmd(0x40); // SET CGRAM Address Counter = 0x00;

for( j = 0; j < 6; j++ )

For( i = 0; i <= 7; i++ ) LCD_putchar(BG[j].b[i]); // Luu cac hinh vao CGRAM

}

}



#separate void LCD_DrawVBG(BYTE row, BYTE colum, BYTE height, BYTE BGpos)// Hien thi BarGraph

{

// row => Starting row for bargraph 0 to 3



// colum => Starting Column for bargraph 0 to 39+

// height=> Length of bargraph in chars 1 to 40+

// BGois => Position of pointer in segments 5 times Length

BYTE i,j,num_full,VBG_index;

switch (row)

{

case 0 : lcd_putcmd(0x80 + colum);



case 1 : lcd_putcmd(0xC0 + colum);

case 2 : lcd_putcmd(0xC0 + colum);

case 3 : lcd_putcmd(0xC0 + colum);

}

num_full = BGpos / 8;



VBG_index = BGpos % 8;

for (i=0;i < num_full;i++)

lcd_putchar(8);

lcd_putchar(VBG_index);

}

#separate void LCD_DrawBG(BYTE row, BYTE colum, BYTE len, BYTE BGpos) // Hien thi BarGraph



{

// row => Starting row for bargraph 0 to 3

// colum => Starting Column for bargraph 0 to 39+

// height=> Length of bargraph in chars 1 to 40+

// BGois => Position of pointer in segments 5 times Length

BYTE i,j,num_full,BG_index;

switch (row)

{

case 0 : lcd_putcmd(0x80 + colum);



case 1 : lcd_putcmd(0xC0 + colum);

case 2 : lcd_putcmd(0xC0 + colum);

case 3 : lcd_putcmd(0xC0 + colum);

}

num_full = BGpos / 5;



BG_index = BGpos % 5;

for (i=0;i < num_full;i++)

lcd_putchar(5);

lcd_putchar(BG_index);

}

7.13. Chương trình gửi ký tự ra 2x16 LCD dùng CCS C

#include "16F877A.h" // PIC16F877A header file

#use delay(clock=4000000) // for 4Mhz crystal

#fuses XT, NOWDT, NOPROTECT, NOLVP // for debug mode

#define WRITE_DATA 0

#define WRITE_COMMAND 1

#define NCHAR_PER_LINE 16 // max char numbers per line

#define MS10 10 // 10 milliseconds

#define US400 400 // 400 microseconds

#define LCD_RS PIN_A1

#define LCD_RW PIN_A2

#define LCD_E PIN_A3

///////////////////////////////////////////////////////////

//
/* private */ void lcd_write(byte dat, int1 option) {

delay_us(US400);
if (option == WRITE_DATA)

output_high(LCD_RS);


else // option == WRITE_COMMAND

output_low(LCD_RS);


output_low(LCD_RW);
output_b(dat);

output_high(LCD_E);


delay_us(US400);
output_low(LCD_E);
}
///////////////////////////////////////////////////////////
//
void lcd_init(void) {

output_low(LCD_E); // Let LCD E line low


lcd_write(0x38, WRITE_COMMAND); // Set LCD 16x2, 5x7, 8bits data

delay_ms(15);


lcd_write(0x01, WRITE_COMMAND); // Clear LCD display

delay_ms(MS10);


lcd_write(0x0f, WRITE_COMMAND); // Open display & current

delay_ms(MS10);


lcd_write(0x06, WRITE_COMMAND); // Window fixed (Character Entry Mode?)

delay_ms(MS10);


}
///////////////////////////////////////////////////////////
//
void lcd_display_char(int8 line, int8 pos, char ch) {

line = (line == 0) ? 0 : 1;

pos = (pos > NCHAR_PER_LINE) ? NCHAR_PER_LINE : pos;

lcd_write(0x80 + 0x40 * line + pos, WRITE_COMMAND);

lcd_write(ch, WRITE_DATA);

}

///////////////////////////////////////////////////////////


void lcd_display_str(int8 line, char str[], int8 nchars) {

int8 i;


for (i = 0; i < nchars; i++)

lcd_display_char(line, i, str[i]);

}
///////////////////////////////////////////////////////////
/**
* Display characters to a 2x16 LCD

*
* (1) LCD1 to GND

* (2) LCD2 to VDD 5 volts

* (3) LCD4 (RS) - LCD5 (RW) - LCD6 (E) to A1, A2, A3

* (4) LCD7-LCD14 to B0-B7 (bus data)

*
* Ref: http://pic16.com/bbs/dispbbs.asp?boa...ID=5879&page=1

*/
void main(void) {

int8 i;


char LINE1[] = { "SGN Tech" };

char LINE2[] = { "Xin chao" };


lcd_init();


// use of lcd_display_char()

for (i = 0; i < 8; i++)

lcd_display_char(0, i, LINE1[i]);

// use of lcd_display_str

lcd_display_str(1, LINE2, 8);

}


  1. CCS C có một ví dụ hay hơn: Chỉ cần dùng 4 bits D4-D7 của LCD:

Nguyên văn bởi ncv

Chương trình gửi ký tự ra 2x16 LCD dùng CCS C

#include "16F877A.h" // PIC16F877A header file


#use delay(clock=4000000) // for 4Mhz crystal
#fuses XT, NOWDT, NOPROTECT, NOLVP // for debug mode
...
}


Các bác cho cháu hỏi cau này về CCS: trong hầu hết các ví dụ của CCS C, họ đều dùng printf (RS232) để xuất dữ liệu. Cháu không hiểu làm như thể để làm gì. Cháu cũng không biết vẽ mạch thế nào để xuất hiện các dòng chữ trong printf.

Hàm printf() xuất một chuỗi ra cổng nối tiếp.


Nếu kết nối PIC với máy tính bằng RS232 và cấu hình thích hợp cho cổng thì máy tính sẽ nhận được chuỗi mà bé đặt trong dấu ().
Vẽ mạch thì bé vẽ theo các mạch giao tiếp máy tính mà các chú đã vẽ trên diễn đàn: Chỉ cần 3 sợi dây Rx (receive), Tx (Transfer) và chân Gnd. Cần có con đệm Max232 nằm ở giữa. Nghĩa là PIC - Max232 - PC.
Nhưng tại sao bé không làm các bài tập đơn giản trước như điều khiển LED chớp tắt, hiển thị số trên LED 7 đoạn hay điều khiển nhiều đèn LED chớp theo nhiều kiểu, .. mà lại làm giao tiếp máy tính cho khó khăn vậy?

+Có hai cách lập trình cho LCD: dùng 8bit interface (đơn giản) hoặc 4bit interface (phức tạp hơn)
1.8bit interface
2.4bit interface
Sử dụng 4 chân D4 - D7 (hoặc D0-D3 <- ít dùng) để truyền thông tin, dữ liệu đến LCD.
- Để điều khiển LCD (Chọn chế độ LCD, bật/tắt hiển thị, bật/tắt/nhấp nháy/di chuyển con trỏ,...): Nhập giá trị tương ứng vào D0-D7,lấy giá trị 4bit cao D4-D7 rồi gởi lệnh yêu cầu LCD thực thi lệnh điều khiển, tiếp theo cho LCD thời gian trễ để thực thi (hoặc hỏi cờ bận xem LCD sẵn sàng thực hiện lệnh tiếp theo chưa?).Tiếp tục, gởi 4bit thấp D0-D3 rồi gởi lệnh yêu cầu LCD thực thi lệnh điều khiển, tiếp theo cho LCD thời gian trễ để thực thi (hoặc hỏi cờ bận xem LCD sẵn sàng thực hiện lệnh tiếp theo chưa?). Nếu trong ứng dụng sử dụng ngắt ngoài thì có thể chuyển sang nối với PORTD hoặc tùy thích.

Bạn muốn kết nối chân LCD với pic theo kiểu nào cũng được, nhưng ko ai làm như vậy cả, lí do:


- Viết code khó, vì mỗi lần xuất dữ liệu điều khiển hay hiển thị đều có mã lệnh riêng, bạn kết nối lộn xộn dẫn đến khó lập trình và ko cơ động.
- Các chân của pic thường được kéo ra ngoài theo từng port. Nếu nối lộn xộn, ko thẩm mỹ.
Bạn muốn nối theo ý bạn, cứ theo nguyên lí hoạt động của LCD thôi. Bạn xem khi nào xuất lệnh điều khiển, khi nào xuất lệnh hiển thị,...kết hợp với thiết kế của bạn mà viết code.
+Có khả năng bạn cần khởi tạo module LCD trước khi đặt chế độ hiển thị (tôi đã viết 1 lần rồi, nhưng bây giờ tìm bằng chức năng search của diễn đàn thì không ra). Tôi nói lại vậy (quy trình cho các module dùng chip điều khiển tương thích HD44780):
- Làm trễ một khoảng thời gian khi mới bật nguồn cho LCD (40 ms từ thời điểm Vdd = 2.7V, hay 15 ms từ thời điểm Vdd = 4.5V)
- Xuất lệnh 0x33 (0x30 đến 0x3F đều ok)
- Chờ khoảng 4.1 ms trở lên
- Xuất lệnh 0x33 (0x30 đến 0x3F đều ok)
- Chờ khoảng 100 us trở lên
- Xuất lệnh 0x33 (0x30 đến 0x3F đều ok)
- Xuất lệnh đặt chế độ (của bạn là 0x38)
- Xuất lệnh tắt màn hình 0x08
- Xuất lệnh xóa màn hình 0x01
- Xuất lệnh đặt chế độ nhập dữ liệu (tăng hay giảm địa chỉ, có dịch màn hình hay không)

Đó là quy trình khởi tạo cho module LCD chưa từng làm việc lần nào với vi điều khiển của bạn. Thông thường, khi module đã được khởi tạo rồi thì những lần sau bạn có thể dùng thẳng các lệnh đặt chế độ mà không cần thực hiện quy trình khởi tạo như trên.


+Để làm chữ có dấu tối thiểu bạn phải có bộ font chữ có dấu, nhưng với LCD kiểu ký tự dạng như 16x2, 16x4 thì hiển thị chữ có dấu rất xấu. Làm cái này trên LCD graphic tốt hơn nhiều.

TL: Mỗi ký tự hiển thị trên lcd thường có kích thước 7 hàng x 5 cột do đó được xác định bởi 7byte, 3 bit cao nhất mỗi byte ko sử dụng. VD:


0x0E
0x0E
0x04
0x04
0x04
0x04
0x0C
Tạo thành chữ J hoa
Để có bộ font của riêng mình công việc của bạn là tìm ra các byte này ứng với mỗi ký tự. Công đoạn này tốn rất nhiều công sức nếu làm bằng tay, thường người ta dùng phần mềm, nhưng các phần mềm này lại thường ko free.

LCD chủ yếu hiển thị bằng CGROM (Character Generator Read Only Memory), tức là bạn chỉ cần cho biết mã ASCII của ký tự, các pattern thể hiện ký tự (5x7, 5x8 hay 5x10) sẽ được lấy từ ROM. Các bộ điều khiển tương thích HD44780 cũng cho phép người dùng tự định nghĩa tối đa 8 ký tự (5x7 hay 5x8) trong vùng CGRAM (Character Generator Random Access Memory). Vùng nhớ này gồm 64 byte, chứa trực tiếp các pattern để tạo ký tự, và người dùng được phép ghi vào. Tuy nhiên, chỉ có thể vẽ thêm 8 ký tự, nên việc bạn muốn hiển thị tiếng Việt trên LCD ký tự là việc rất khó khăn và hạn chế. Nếu bạn vẫn muốn làm thì hãy tìm đọc datasheet của HD44780 và các tutorial trên mạng. Cách làm khá dài dòng nên không tiện nêu trên diễn đàn.



8. LED ma trận

8.1. font_ascii

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,0xB6,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



8.2. font_ascii2

const byte font[51][5]={

//******************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

};

//Phan tu hai



const byte font2[45][5]={

0xD9,0xB6,0xB6,0xB6,0xCD//S 51

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




tải về 1.15 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   4   5   6   7   8   9   10   11   ...   15




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương