Merhaba arkadaşlar, yaklaşık 2-3 haftadır derleyip topladığım proje olan görüntü almak için P10 Led Ekran, ayar yapmak için Rotary Encoder, RTC için ise DS3231'in kullanıldığı Alarmlı saat projemi bitirdim. Elbette her yiğidin yoğurt yiyişi farklı olacaktır. Kendime göre doğru gelen şekilde programı yazdım, devreyi kurdum ve şu anda çalışıyor. Kodların çalışmasında bir sıkıntı yok ama ufak tefek düzeltmeler yapılması gerekebilir. Ekrana yazıyı ortala, sağa daya gibi şeyler. Kodlardaki P10 kütüphanesini
@Mucit23 hocamın düzenlediği kütüphaneyi kullandım kendisine buradan bir kere daha teşekkür ederim.
ihtiyacı olan arkadaşlar kaynak göstererek kullabilirler.Herkes faydalansın diye zaten forumumuz var.
Ürün ile alakalı bağlantıları ya da baskı devresini bilinçli olarak paylaşmadım.Zaten az çok program ya da elektronikten anlayan kişi programdan gerekli bağlantıları çıkarabilir.Sormak istedikleriniz olursa elimden geleni ardına koymayanlardanım, yardımcı olurum.
main.c
/*******************************************************************************
* Dosya Adı : P10_Panel_Alarmlı_Saat_Programı
* Yazan : Gökhan Gökçen
* Versiyon : V1.0
* Tarih : 08/04/2018
* Açıklama : P10 Panelli Alarmlı Saat
*
*Program açılışta eepromdaki verileri okur,
*
*
*
*
*
*
*
*
*******************************************************************************/
//--------------------------40 pin MCU PIN_diagram
// _____________
//MCLR/VPP----------------|1 40|-------RB7/PGD
//RA0/AN0-----------------|2 39|-------RB6/PGC
//RA1/AN1-----------------|3 38|-------RB5
//RA2/AN2/VREF-/CVREF-----|4 37|-------RB4
//RA3/AN3/VREF+-----------|5 36|-------RB3/PGM
//RA4/T0CKI/C1OUT---------|6 35|-------RB2
//RA5/AN4/SS/C2OUT--------|7 34|-------RB1
//RE0/RD/AN5--------------|8 33|-------RB0/INT
//RE1/WR/AN6--------------|9 32|-------VDD
//RE2/CS/AN7--------------|10 31|-------VSS
//VDD---------------------|11 30|-------RD7/PSP7
//VSS---------------------|12 29|-------RD6/PSP6
//OSC1/CLKI---------------|13 28|-------RD5/PSP5
//OSC2/CLKO---------------|14 27|-------RD4/PSP4
//RC0/T1OSO/T1CKI---------|15 26|-------RC7/RX/DT
//RC1/T1OSI/CCP2----------|16 25|-------RC6/TX/CK
//RC2/CCP1----------------|17 24|-------RC5/SDO
//RC3/SCK/SCL-------------|18 23|-------RC4/SDI/SDA
//RD0/PSP0----------------|19 22|-------RD3/PSP3
//RD1/PSP1----------------|20 21|-------RD2/PSP2
// |____________|
#include <18F4620.h>
#include <string.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES H4 //High speed osc with HW enabled 4X PLL
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NOMCLR
#FUSES NOCPD
#FUSES PUT
#use delay(clock=40000000)
#use I2C(Master, SDA = pin_D7, SCL = pin_D6)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#include "DS3231.c"
#include <math.h>
/*******************************P10 Panel kütüphanesi**************************/
#include <P10_Panel_Driver.c>
/***********************************Tanımlamalar*******************************/
#define encoder_switch pin_a2
#define role pin_d2
/********************************Global Değişkenler****************************/
unsigned int int_syc = 0 , i = 0 , saat_oku = 0 , set = 0 , Aux1 = 0 , Enc1 = 0 , dakika = 0;
unsigned int ayar = 0 , yarim_saniye = 0 , alarm_suresi = 0 , sn = 0 ;
unsigned int alarm_saatleri[10] , alarm_dakikalari[10] ;
int1 toggle = 0 ;
unsigned long sayac = 0 , donus = 0 ,Q = 0 ,sure_sayac = 0 , sn_sayac = 0;
unsigned char s = 00 , min = 9, hr = 18;
//unsigned char dt = 04 , mt = 04 , yr = 18 , dy = 18; //6 cuma 7 cumartesi ...
short hr_format = _24_hour_format , am_pm = 0;
char MenuCikis = 0 , MenuNo = 0;
/**********************************Menü Tanımlamaları********************************/
char *Menu[]=
{
" ", //0
"SAAT AYARI", //1
"ALRM1", //2
"ALRM2", //3
"ALRM3", //4
"ALRM4", //5
"ALRM5", //6
"ALRM6", //7
"ALRM7", //8
"ALRM8", //9
"ALRM9", //10
"SURE", //11
"CIKIS " //12
};
/**********************************Fonksiyonlar********************************/
void write_data (unsigned int8 row_adr);
void enkoder_oku();
void ana_menu();
void saat_ayar_menusu();
void alarm_ayar_menusu();
void alarm_sure_menusu();
void alarm_durumu_karsilastir();
void eepromdaki_degerleri_oku();
void eeproma_degerleri_yaz();
/********************************Kesme Alt Programı****************************/
#int_timer0 //Timer0 Kesmesi
void Timer0_int()
{
set_timer0(133); //Timer0 800us değerine kurulur
if(++sayac >= 600) //480ms ara ile saat okumak için sayaç kurulur
{
saat_oku = 1; //Süre dolduğunda saatin okunması için saat_oku değişkeni 1 yapılır
sayac=0; //Sayaç değişkeni sıfırlanır
}
if(++sure_sayac >= 625)
{
toggle++;
yarim_saniye++;
sure_sayac=0;
if(yarim_saniye>121)yarim_saniye=0;
}
if(++sn_sayac >=1250)
{
sn_sayac=0;
sn++;
if(sn>=60)sn=0;
}
switch (int_syc) //P10Display tarama bölümü
{
case 0:
output_low(PinOE);write_data(int_syc);
output_low(PinA);output_low(PinB);output_high(PinOE);
break;
case 1:
output_low(PinOE);write_data(int_syc);
output_high(PinA);output_low(PinB);output_high(PinOE);
break;
case 2:
output_low(PinOE);write_data(int_syc);
output_low(PinA);output_high(PinB);output_high(PinOE);
break;
case 3:
output_low(PinOE);write_data(int_syc);
output_high(PinA);output_high(PinB);output_high(PinOE);
break;
} //switch sonu
int_syc++;if(int_syc>3)int_syc=0;
} //Kesme sonu
/**********************************Ana Program*********************************/
void main()
{
set_tris_a(0x07); //PortA için giriş/çıkış tanımlamaları
set_tris_b(0x00); //PortB için giriş/çıkış tanımlamaları
set_tris_c(0x00); //PortC için giriş/çıkış tanımlamaları
set_tris_d(0x00); //PortD için giriş/çıkış tanımlamaları
set_tris_e(0x00); //PortE için giriş/çıkış tanımlamaları
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_SS_DISABLED); //SPI kullanılmayacak
setup_adc(ADC_OFF); //ADC kullanılmayacak
setup_ccp1(CCP_OFF); //PWM1 kullanılmayacak
setup_ccp2(CCP_OFF); //PWM2 kullanılmayacak
setup_timer_0(T0_INTERNAL | T0_8_BIT | T0_DIV_64); //Timer0 800us süreye kuruluyor
enable_interrupts(INT_timer0); //Timer0 kesmesi aktif edilir
enable_interrupts(GLOBAL); //Kesmelere izin verilir
set_timer0(133); //Timer0 kesmesine 800us için 133 değeri yüklenir
set=DS3231_read(controlREG); //DS3231'in çalışma bit'i okunur
if(bit_test(set,7)){DS3231_init();} //Eğer bu bit 0 ise 1 yapılır.DS3231 kurulumu yapılır.
output_a(0x00); //PortA pinlerine 0x00 değeri yüklenir
output_b(0x00); //PortB pinlerine 0x00 değeri yüklenir
output_c(0x00); //PortC pinlerine 0x00 değeri yüklenir
output_d(0x00); //PortD pinlerine 0x00 değeri yüklenir
output_e(0x00); //PortE pinlerine 0x00 değeri yüklenir
//setTime(hr, min, s, am_pm, hr_format); //DS3231'den saat,dakika,saniye,am_pm,hr_format bilgileri okunur
//setDate(dy, dt, mt, yr);
//Set_Brightness(100); //Ekran parlaklığını değiştirmek için kullanılan fonksiyon
clear_display(0); //P10Display temizlenir
getTime(hr, min, s, am_pm, hr_format); //DS3231'den saat,dakika,saniye,am_pm,hr_format bilgileri okunur
eepromdaki_degerleri_oku(); //Eepromdaki değerler (alarm süresi ve alarm zamanları) okunur
if(alarm_suresi>=60) //Alarm_suresi değişkeni 60sn'den büyük ya da eşit ise (açılışta herhangi bir değer yüklenip yüklenmediğini kontrol eder)
{
alarm_suresi=1; //Açılışta daha önceden herhangi bir değer yüklenmemiş ise içeriğine 1 sn olarak değiştirir
write_eeprom(30 , alarm_suresi); //Bu yüklenen değer eepromun 30 nolu adresine yazılır
delay_us(15); //15us gecikme yapılır
}
while(TRUE) //Program için sonsuz döngü kurulur
{
enkoder_oku(); //Enkoder okuma fonksiyonunu çağırır
if(toggle) //Kesme içerisinde toggle yaklaşık 500ms ile toggle edilir toggle değeri 1 ise saat ile dakika arasındaki nokta yakılır
{
sprintf(Text,"%02d:%02d",hr,min); //Saat ve dakika bilgileri Text değişkeni içerisine kopyalanır
ShowString(1,4,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
if(!toggle) //Kesme içerisinde toggle yaklaşık 500ms ile toggle edilir toggle değeri 0 ise saat ile dakika arasındaki nokta söndürülür
{
sprintf(Text,"%02d %02d",hr,min); //Saat ve dakika bilgileri Text değişkeni içerisine kopyalanır
ShowString(1,4,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
if(saat_oku==1) //Eğer saat_oku değişkeni "1" ise (yaklaşık 480ms süre kesme içerisinde 1 veya 0 olur)
{
getTime(hr, min, s, am_pm, hr_format); //DS3231'den saat,dakika,saniye,am_pm,hr_format bilgileri okunur
//getDate(dy, dt, mt, yr);
saat_oku=0; //Saat okuma değişkeni "0"'lanır
alarm_durumu_karsilastir(); //Alarm değişkenlerini karşılaştırma fonksiyonu çağırılır okunan saat değeri aynı ise röle çıkış verir
}
while(MenuCikis) //Menü fonksiyonu döngüsü
{
enkoder_oku(); //Enkoder okuma fonksiyonu
if(MenuNo==1) //MenüNo değişkeni 1 ise
{
sprintf(Text , Menu[MenuNo]); //Text pointerı içerisine Menu[MenuNo] stringini yükler yani menuno=1 iken "SaatAyarlari"
ShowString(1,0,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
if(MenuNo>=2 && MenuNo<=10) //MenuNo değişkeni 2 ile 10 arasında ise (Alarm ayarları kısmında ise)
{
if(alarm_saatleri[MenuNo-2] >= 24) //Başlangıç olarak eeprom FF olarak gelir.Bu durumda 24'den büyük olur ekranda "-" işareti göstermek için kullanılan satır
{
sprintf(Text , "%s -:-" , Menu[MenuNo]); //Text pointerina Menu[MenuNo]'dan stringi çeker ve "-:-" ile birleştirir
ShowString(1,0,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}else //Eğer eepromdaki değer FF'den farkli ise
{
sprintf(Text , "%s%02d:%02d" , Menu[MenuNo] , alarm_saatleri[MenuNo-2] , alarm_dakikalari[MenuNo-2]);//Ekrana Menu[MenuNo] ile ilgili string,Alarm_saatleri ve Alarm_dakikaları yazılır
ShowString(1,0,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
}
if(MenuNo==12) //Eğer MenuNo değeri 12 ise
{
sprintf(Text , Menu[MenuNo]); //Text içerisine "CIKIS" yüklenir
ShowString(1,4,1,0); //P10Panelin x=1,y=4 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
if(MenuNo==11) //Eğer MenuNo değeri 11 ise
{
sprintf(Text , "%s %2dsn" , Menu[MenuNo] , alarm_suresi); //Text pointerina Menu[MenuNo] adresindeki string yükler alarm_suresi değişkeni ile birleştirir
ShowString(1,0,1,0); //P10Panelin x=1,y=0 pixelinden itibaren font1 ile Text stringini ekranda gösterir
}
if(donus>Q) //Enkoder saat yönünde döndü ise
{
Q=donus; //Dönüş ile Q değişkeni eşitlenir(sürekli bu if içerisine giriş yapmaması için)
MenuNo++; //MenüNo değişkeni 1 arttırılır
if(MenuNo>=13)MenuNo=1; //MenüNo değişkeni 13'e eşit ya da büyük ise MenüNo değişkenine "1" yüklenir
clear_display(0); //P10Panel temizlenir
}
/******************************************************/
if(donus<Q) //Eğer enkoder saat yönünün tersine döndü ise
{
Q=donus; //Dönüş ile Q değişkeni eşitlenir(sürekli bu if içerisine giriş yapmaması için)
MenuNo--; //MenüNo değişkeni 1 eksiltilir
if(MenuNo<=0)MenuNo=12; //MenüNo değişkeni 0'a eşit ya da küçük ise MenüNo değişkenine "12" yüklenir
clear_display(0); //P10Panel temizlenir
}
/******************************************************/
if(!input(encoder_switch)) //Rotary enkodera basıldı ise
{
if(MenuNo==1) // Program //MenuNo değişkenine "1" yüklenir
{
clear_display(0); //P10Panel Temizlenir
Q=donus; //Q değişkeni Donus değişkenine eşitlenir
saat_ayar_menusu(); //Saat_ayar_menusu fonksiyonu çağırılır
MenuCikis=0; //MenuCikis değişkenine "0" yüklenir geriye dönüş olduğunda While(MenuCikis) satırından çıkıp ana ekrana(saat göstermeye) geçmek için
}
if(MenuNo>=2 && MenuNo<=10) //Eğer MenuNo "2" ile "10" arasında ise yani alarm ayar kısmında ise
{
clear_display(0); //P10Panel temizlenir
Q=donus; //Q değişkeni Donus değişkenine eşitlenir
alarm_ayar_menusu(); //Alarm ayar menüsü çağırılır
MenuCikis=0; //MenuCikis değişkenine "0" yüklenir geriye dönüş olduğunda While(MenuCikis) satırından çıkıp ana ekrana(saat göstermeye) geçmek için
}
if(MenuNo==11) //Eğer MenuNo "11" ise yani alarm_süre ayar kısmında ise
{
clear_display(0); //P10Panel temizlenir
Q=donus; //Q değişkeni Donus değişkenine eşitlenir
alarm_sure_menusu(); //Alarm süre menüsü fonksiyonu çağırılır
MenuCikis=0; //MenuCikis değişkenine "0" yüklenir geriye dönüş olduğunda While(MenuCikis) satırından çıkıp ana ekrana(saat göstermeye) geçmek için
}
if(MenuNo==12) //Eğer MenuNo "12" ise yani Cikis kısmında ise
{
MenuCikis=0; //MenuCikis değişkenine "0" yüklenir
MenuNo=0; //MenuNo değişkenine "0" yüklenir
clear_display(0); //P10Panel temizlenir
donus=0; //Donus değişkeni sıfırlanır
Q=0; //Q değişkeni sıfırlanır
}
} // ENTER sonu.
} // while MenuCikis sonu.
} //while true sonu
} //Void main sonu
/**********************************Alarm Durumu Karşılaştırma Menüsü*********************************/
void alarm_durumu_karsilastir()
{
if(min!=dakika) //Alarm durumu oluştuğunda bu iki değişken birbirine eşitlenir ve min değişene kadar alarm durumuna bakılmaz
{
for(int r=0;r<9;r++) //Alarm registerlarını karşılaştırmak için for next döngüsü kurulur
{
if((hr==alarm_saatleri[r]) && (min==alarm_dakikalari[r])) //Alarm_saatleri ve Alarm_dakikalarından herhangi birisi aynı anda mevcut saat ile eşit işe
{
sn=0; //Alarm süresi için kullanılan sn değişkeni "0"lanır
sn_sayac=0; //sn için kullanılan saniye sayacı "0"lanır
output_high(role); //Alarm için kullanılan çıkış aktif edilir
dakika=min; //Sürekli bu döngüye girmemesi
}//if sonu
}//for sonu
}//if(min!=dakika) sonu
if(sn>=alarm_suresi) //Alarm aktif olduktan sonra sn ile alarm süresi karşılaştırır sn alarm süresinden büyük olduğunda çıkış pasif edilir
{
output_low(role); //Alarm için kullanılan röle çıkışı pasif edilir
}
}
/**********************************Saat Ayar Menüsü*********************************/
void saat_ayar_menusu()
{
while(MenuCikis) //MenuCikis fonksiyona gelirken "1" olarak gelir
{
enkoder_oku(); //Enkoder okuma fonksiyonu çağırılır
if(!input(encoder_switch)) //Eğer enkoder switchine basıldı ise
{
ayar++; //Ayar değişkeni "1" arttırılır aşağıda switch case ile alarm/dakika ayarı için gereklidir
yarim_saniye=0; //Buton okuma hızını yavaşlatmak için kullanılan değişken "0"lanır
while(yarim_saniye<2); //Yarımsaniye değişkeni 2den küçük ise, yani 1sn butonu tekrar okumak için beklenir
if(ayar>4)ayar=0; //Ayar değişkeni "4"den büyük ise "0"lanır
Q=donus; //Q değişkeni donus değişkenine eşitlenir
toggle=1; //Ekranda saat/dakika değişkeni ayarlanır iken yakıp söndürmek için kullanılır
sure_sayac=0; //sure_sayac değişkeni "0"lanır
}
switch (ayar)
{
case 1: //Ayar değişkeni "1" ise saat ayarlamak için kullanılır
if(Q>donus) //Enkoder saat yönünde dönüyor ise
{
hr++; //hr değişkeni (real time üzerindeki saat) "1" arttırılır
if(hr>=25)hr=0; //hr değişkeni 24 değerinden büyük ise(saat 24 olamaz 23den sonra 00 olur) "0" yapılır
Q=donus; //Donus değişkeni Q değişkenine eşitlenir
}
if(Q<donus) //Enkoder saat yönünün tersine dönüyor ise
{
hr--; //hr değişkeni (real time üzerindeki saat) "1" eksiltilir
if(hr>=25)hr=23; //hr değişkeni "24"den büyük eşit ise "23" yapılır
Q=donus; //Donus değişkeni Q değişkenine eşitlenir
}
if(toggle) //Toggle değişkeni "1" ise ekrana saat ve dakika yazılır
{
sprintf(Text,"%02d:%02d",hr,min); //Text pointerına saat ve dakika bilgileri decimal cinsinden yüklenir
ShowString(1,4,1,0); //P10Panelin x=1,y=4 kısmında font1 ile Text stringi ekranda sabit olarak gösterilir
}
if(!toggle) //Toggle değişkeni "0" ise ekrana " " ve dakika yazılır
{
sprintf(Text," :%02d",min); //Text pointerına " " ve dakika bilgileri yüklenir
ShowString(1,4,1,0); //P10Panelin x=1,y=4 kısmında font1 ile Text stringi ekranda sabit olarak gösterilir
}
break; //Case 1 için break
case 2: //Ayar değişkeni "2" ise dakika ayarlamak için kullanılır
if(Q>donus) //Enkoder saat yönünde dönüyor ise
{
min++; //min değişkeni (real time dakikası) "1" arttırılır
Q=donus; //Donus değişkeni Q değişkenine eşitlenir
if(min>=61)min=0; //dakika değişkeni "60"dan büyük eşit ise dakika değişkenine "0" yüklenir
}
if(Q<donus) //Enkoder değişkeni saat yönünün tersine dönüyör ise
{
min--; //Dakika değişkeni "1" eksiltilir
if(min>=61)min=59; //Eğer dakika değişkeni "60"dan büyük ya da eşit ise dakika değişkenine "59" yükle
Q=donus; //Q değişkenini Donus değişkeniyle eşitle
}
if(toggle) //Toggle değişkeni "1" ise ekrana saat ve dakika yazılır
{
sprintf(Text,"%02d:%02d",hr,min); //Text pointerına saat ve dakika bilgileri decimal cinsinden yüklenir
ShowString(1,4,1,0); //P10Panelin x=1,y=4 kısmında font1 ile Text stringi ekranda sabit olarak gösterilir
}
if(!toggle) //Toggle değişkeni "0" ise ekrana " " ve saat yazılır
{
sprintf(Text,"%02d: ",hr); //Text pointerına " " ve saat bilgileri yüklenir
ShowString(1,4,1,0); //P10Panelin x=1,y=4 kısmında font1 ile Text stringi ekranda sabit olarak gösterilir
}
break;
case 3: //Ayar değişkeni "3" ise ekrana "OK!" yazmak için kullanılan case
clear_display(0); //P10Panel temizlenir
yarim_saniye=0; //Yarım saniye değişkeni sıfırlanır (ekranda ok yazısının 3sn boyunca kalması için gereklidir)
while(yarim_saniye<3) //eğer yarım saniye değişkeni "3"den küçük ise
{
sprintf(Text , "OK!"); //Text pointerına ok! yazısı yüklenir
ShowString(7,2,2,0); //P10Panelin x=7,y=2 kısmında font2 ile Text stringi ekranda sabit olarak gösterilir
}
s=0; //saniye değişkeni "0"lanır
setTime(hr, min, s, am_pm, hr_format); //Ayarlanan bilgiler RTC(ds3231) üzerine yazılır
//setDate(dy, dt, mt, yr);
clear_display(0); //P10Panel temizlenir
ayar=4; //Menüden çıkış için ayar değişkenine "4" yüklenir
break;
case 4: //Ayarlardan çıkış case'i
MenuCikis=0; //While(MenuCikis) kısmından kurtulabilmesi için MenuCikis "0" yapılır
MenuNo=0; //MenuNo değişkeni "0" yapılır
ayar=0; //Ayar değişkeni "0" yapılır
Q=0; //Q değişkeni "0" yapılır
donus=0; //Donus değişkeni "0" yapılır
break;
} //Switch sonu
} //MenuCikis sonu
return;
} //Saat_ayar_menusu sonu
/**********************************Alarm Ayar Menüsü*********************************/
void alarm_ayar_menusu()
{
eepromdaki_degerleri_oku(); //Eepromdaki değerler okunması için çağrılan fonksiyon
while(MenuCikis) //Alarm_ayar_menusunde kalması için oluşturulan sonsuz döngü
{
enkoder_oku(); //Enkoder okuma fonksiyonu
if(!input(encoder_switch)) //Enkoder switchine basıldı ise
{
ayar++; //Ayar değişkeni "1" arttırılır
yarim_saniye=0; //Yarım saniye değişkeni "0"lanır
while(yarim_saniye<2); //Butonu çok hızlı okumaması için "1" sn süre beklenir
if(ayar>4)ayar=0; //Ayar değişkeni "4"den büyük ise ayar değişkeni "0" yapılır
Q=donus; //Q değişkeni donus değişkenine eşitlenir
toggle=1; //Toggle değişkeni "1" yapılır
sure_sayac=0; //sure sayaç değişkeni "0" yapılır
}
switch (ayar) //Ayar değişkenine göre hangi bloğa gireceği belirlenir
{
case 1: //Ayar = 1 ise ilgili alarm saatini ayarlamaya yarar
if(Q>donus) //Eğer enkoder saat yönünde dönüyor ise
{
alarm_saatleri[MenuNo-2]++; //ilgili alarm saati değişkenini "1" arttır
if(alarm_saatleri[MenuNo-2]>=25)alarm_saatleri[MenuNo-2]=0;//eğer ilgili alarmsaati değişkeni "24"den büyük ya da eşit ise ilgili alarm saati değişkenini "0" yap
Q=donus; //Q değişkenini donus değişkeni ile eşitle
}
if(Q<donus) //Eğer enkoder saat yönünün tersine dönüyor ise
{
alarm_saatleri[MenuNo-2]--; //ilgili alarm saati değişkenini "1" eksilt
if(alarm_saatleri[MenuNo-2]>=25)alarm_saatleri[MenuNo-2]=24;//eğer ilgili alarmsaati değişkeni "24"den büyük ya da eşit ise ilgili alarm saati değişkenini "0" yap
Q=donus; //Q değişkenini donus değişkeni ile eşitle
}
if(toggle) //Eğer toggle değişkeni "1" ise ekrana ilgili alarm_saati ve dakikasını yazar
{
if(alarm_saatleri[MenuNo-2]>=25)alarm_saatleri[MenuNo-2]=24;//Eğer ilgili alarm saati default ayar ile geldi ise ilgili alarm_saati değişkenini "0" yap
if(alarm_dakikalari[MenuNo-2]>=61)alarm_dakikalari[MenuNo-2]=60;//Eğer ilgili alarm_dakikasi defaul ayar ile geldi ise ilgili alarm_dakikasi değişkenini "0" yap
if((alarm_saatleri[MenuNo-2]>=24) && (alarm_dakikalari[MenuNo-2]>=60))
{
sprintf(Text,"--:--"); //Text pointerına " " ve ilgili alarm_dakikalarını yükle
ShowString(1,4,1,0); //Ekrana Text pointerını x=1,y=4 konumundan itibaren font1 ile yaz
}
else if((alarm_dakikalari[MenuNo-2]<=59) && (alarm_saatleri[MenuNo-2]>=24))
{
sprintf(Text,"--:%02d",alarm_dakikalari[MenuNo-2]); //Text pointerına " " ve ilgili alarm_dakikalarını yükle
ShowString(1,4,1,0); //Ekrana Text pointerını x=1,y=4 konumundan itibaren font1 ile yaz
}
else if((alarm_saatleri[MenuNo-2]<=23) && (alarm_dakikalari[MenuNo-2]>=60))
{
sprintf(Text,"%02d:--",alarm_saatleri[MenuNo-2]); //Text pointerına " " ve ilgili alarm_dakikalarını yükle
ShowString(1,4,1,0);
}
else if((alarm_saatleri[MenuNo-2]<=23) && (alarm_dakikalari[MenuNo-2]<=60))
{
sprintf(Text,"%02d:%02d",alarm_saatleri[MenuNo-2],alarm_dakikalari[MenuNo-2]);
ShowString(1,4,1,0);
}
}
if(!toggle) //Eğer toggle değişkeni "1" ise ekrana " " ve ilgili alarm_dakikasını yazar
{
if(alarm_saatleri[MenuNo-2]>=25)alarm_saatleri[MenuNo-2]=24;//Eğer ilgili alarm saati default ayar ile geldi ise ilgili alarm_saati değişkenini "0" yap
if(alarm_dakikalari[MenuNo-2]>=60)
{
alarm_dakikalari[MenuNo-2]=60;
sprintf(Text," :--"); //Text pointerına " " ve ilgili alarm_dakikalarını yükle
ShowString(1,4,1,0);
}
else
{
sprintf(Text," :%02d",alarm_dakikalari[MenuNo-2]); //Text pointerına " " ve ilgili alarm_dakikalarını yükle
ShowString(1,4,1,0);
}
}
break;
case 2: //Ayar = 2 ise ilgili alarm dakikasını ayarlamaya yarar
if(Q>donus) //Eğer enkoder saat yönünün tersine dönüyor ise
{
alarm_dakikalari[MenuNo-2]++; //ilgili alarm dakikası değişkenini "1" arttır
if(alarm_dakikalari[MenuNo-2]>=61)alarm_dakikalari[MenuNo-2]=0;//Eğer ilgili alarmdakikasi değişkeni "60"den büyük ya da eşit ise ilgili alarm saati değişkenini "0" yap
Q=donus; //Q değişkenini donus değişkeni ile eşitle
}
if(Q<donus) //Eğer enkoder saat yönünün tersine dönüyor ise
{
alarm_dakikalari[MenuNo-2]--; //ilgili alarm dakikası değişkenini "1" eksilt
if(alarm_dakikalari[MenuNo-2]>=61)alarm_dakikalari[MenuNo-2]=60;//Eğer ilgili alarmdakikasi değişkeni "60"den büyük ya da eşit ise ilgili alarm saati değişkenini "59" yap
Q=donus; //Q değişkenini donus değişkeni ile eşitle
}
if(toggle) //Eğer toggle değişkeni "1" ise ekrana ilgili alarm_saati ve dakikasını yazar
{
if((alarm_dakikalari[MenuNo-2]>=60) && (alarm_saatleri[MenuNo-2]<24))
{
sprintf(Text,"%02d:--",alarm_saatleri[MenuNo-2]); //Text pointerına ilgili alarm_saat ve dakikasını yükle
ShowString(1,4,1,0); //Ekrana Text pointerını x=1,y=4 konumundan itibaren font1 ile yaz
}
else if((alarm_dakikalari[MenuNo-2]<60) && (alarm_saatleri[MenuNo-2]<24))
{
sprintf(Text,"%02d:%02d",alarm_saatleri[MenuNo-2],alarm_dakikalari[MenuNo-2]); //Text pointerına ilgili alarm_saat ve dakikasını yükle
ShowString(1,4,1,0);
}
else if((alarm_dakikalari[MenuNo-2]<60) && (alarm_saatleri[MenuNo-2]>=24))
{
sprintf(Text,"--:%02d",alarm_dakikalari[MenuNo-2]); //Text pointerına ilgili alarm_saat ve dakikasını yükle
ShowString(1,4,1,0);
}
else if((alarm_dakikalari[MenuNo-2]>=60) && (alarm_saatleri[MenuNo-2]>=24))
{
sprintf(Text,"--:--");
ShowString(1,4,1,0);
}
}
if(!toggle) //Eğer toggle değişkeni "1" ise ekrana " " ve ilgili alarm_dakikasını yazar
{
if(alarm_saatleri[MenuNo-2]<24)
{
sprintf(Text,"%02d: ",alarm_saatleri[MenuNo-2]); //Text pointerına " " ve ilgili alarm_saatlerini yükle
ShowString(1,4,1,0); //Ekrana Text pointerını x=1,y=4 konumundan itibaren font1 ile yaz
}
else
{
sprintf(Text,"--: "); //Text pointerına " " ve ilgili alarm_saatlerini yükle
ShowString(1,4,1,0); //Ekrana Text pointerını x=1,y=4 konumundan itibaren font1 ile yaz
}
}
break;
case 3: //Ayar = 3 ise ekrana "OK!" yazma işi yapılır
clear_display(0); //P10Panel temizlenir
yarim_saniye=0; //Yarım saniye değişkenine "0" yüklenir
while(yarim_saniye<3) //Ekranda ok yazısının 1,5sn beklemesi için kullanılan döngü
{
sprintf(Text , "OK!"); //Text pointerına ok! yüklenir
ShowString(7,2,2,0); //Ekrana Text pointerını x=7,y=2 komundan itibaren font2 ile yaz
}
eeproma_degerleri_yaz(); //Ayarlanan alarm_saatleri ve dakikaları eeproma yazılır
clear_display(0); //P10Panel temizlenir
ayar=4; //Menüden çıkmak için ayar değişkenine "4" yüklenir
break;
case 4: //Menüden çıkış case'i
MenuCikis=0; //While(MenuCikis) döngüsünü bozmak için MenuCikis'a "0" yüklenir
ayar=0; //Ayar değişkenine "0" yüklenir
MenuNo=0; //MenüNo değişkenine "0" yüklenir
Q=0; //Q değişkenine "0" yüklenir
donus=0; //Dönüş değişkenine "0" yüklenir
break;
} //Switch sonu
} //MenuCikis sonu
} //Alarm_ayarlari sonu
/**********************************Alarm Sure Ayar Menüsü*********************************/
void alarm_sure_menusu()
{
alarm_suresi = read_eeprom(30); //Eepromdaki değerler okunur
while(MenuCikis) //Alarm_süre_menüsünde döngü oluşturulur
{
enkoder_oku(); //Rotary enkoder okuma fonksiyonu
if(!input(encoder_switch)) //Enkoder switchine basıldı ise
{
ayar++; //Ayar değişkeni "1" arttırılır
yarim_saniye=0; //yarım saniye değişkenine "0" yüklenir
while(yarim_saniye<2); //Buton debounce süresi ya da hemen okuma yapmamak için "1" sn beklenir
if(ayar>2)ayar=0; //Eğer ayar değişkeni "3"den büyük ya da eşit ise ayar değişkenine "0" yüklenir
Q=donus; //Q değişkeni ile Donus değişkeni eşitlenir
toggle=1; //toggle değişkenine "1" yüklenir
sure_sayac=0; //süre_sayac değişkenine "0" yüklenir
}
switch (ayar) //Ayarın değerine göre işlem yaptıran switch
{
case 1: //Eğer ayar "1" ise
if(Q>donus) //Enkoder saat yönünde dönmüş ise
{
alarm_suresi++; //Alarm_süresi değişkenini "1" arttır
if(alarm_suresi>=60)alarm_suresi=1; //Eğer alarm_süresi değişkeni "60"dan büyük ya da eşit ise alarm_süresi değişkenine "1" yükle
Q=donus; //Q değişkeni ile donus değişkenini eşitle
}
if(Q<donus) //Enkoder saat yönünün tersine dönmüş ise
{
alarm_suresi--; //Alarm_süresi değişkenini "1" eksilt
if(alarm_suresi<=0)alarm_suresi=59; //eğer alarm_süresi değişkeni "0"dan küçük ya da eşit ise alarm_süresi değişkenine "59" yükle
Q=donus; //Q değişkeni ile donus değişkenini eşitle
}
if(toggle) //Eğer toggle "1" ise
{
sprintf(Text,"%s %2dsn" , Menu[MenuNo] , alarm_suresi); //Text pointerına Menu[MenuNo] stringini ve "sn_alarm_süresini" yükle
ShowString(1,0,1,0); //Ekrana Text pointerını x=1,y=0 komundan itibaren font1 ile yaz
}
if(!toggle) //Eğer toggle "0" ise
{
sprintf(Text,"%s sn" , Menu[MenuNo]); //Text pointerına Menu[MenuNo] stringini ve " sn" yükle
ShowString(1,0,1,0); //Ekrana Text pointerını x=1,y=0 komundan itibaren font1 ile yaz
}
break;
case 2: //Eğer ayar değişkeni "2" ise (menüden çıkma bloğu)
clear_display(0); //P10Paneli temizle
yarim_saniye=0; //yarım saniye değişkenine "0" yükle
while(yarim_saniye<3) //Ekrana 1,5 sn boyunca ok! yazdırmak için kurulan döngü
{
sprintf(Text , "OK!"); //Text pointerına "OK!" yükle
ShowString(7,2,2,0); //Ekrana Text pinterını x=7,y=2 konumundan itibaren font2 ile yaz
}
write_eeprom(30,alarm_suresi); //Eeproma alarm_süresi değişkenini "30." adrese yaz
delay_us(15);
clear_display(0); //P10Paneli temizle
MenuCikis=0; //MenuCıkıs değişkenine "0" yüklenir
ayar=0; //Ayar değişkenine "0" yüklenir
MenuNo=0; //MenuNo değişkenine "0" yüklenir
Q=0; //Q değişkenine "0" yüklenir
donus=0; //Donus değişkenine "0" yüklenir
break;
} //Switch sonu
} //MenuCikis sonu
}
/**********************************Eeprom Değer Okuma Menüsü*********************************/
void eepromdaki_degerleri_oku()
{
alarm_suresi = read_eeprom(30);
for(int r=0;r<9;r++)
{
alarm_saatleri[r] = read_eeprom (r);
delay_us(10);
alarm_dakikalari[r] = read_eeprom(r+10);
delay_us(10);
}
}
/**********************************Eeprom Değer Yazma Menüsü*********************************/
void eeproma_degerleri_yaz()
{
for(int r=0;r<9;r++) //Alarm_saatlerini ve Dakikalarını eeproma yazmak için kurulan döngü
{
write_eeprom(r , alarm_saatleri[r]); //Eeproma alarm_saatleri yazılır
delay_us(10);
write_eeprom(r+10 , alarm_dakikalari[r]); //Eeproma alarm_dakikalari yazılır
delay_us(10);
}
return;
}
/**********************************Enkoder Okuma Fonksiyonu*********************************/
void enkoder_oku() //Enkoder okuma fonksiyonu
{
Aux1 = Enc1; //Enc1 değişkeni Aux1'in içerisine kopyalanır
Enc1 = input_a() & 3; //PortA girişleri okunur ve "3" rakamı ile AND işlemine sokularak Enc1 değişkenine aktarılır
//Q=donus; //Donus değişkeni Q değişkenine kopyalanır
if ((Aux1 == 2) && (Enc1 == 3)) { donus++;} //Eğer enkoder'in dönüş yönü saat yönünde ise donus değişkeni "1" arttırılır
if ((Aux1 == 3) && (Enc1 == 2)) { donus--;} //Eğer enkoder'in dönüş yönü saat yönünün tersi ise donus değişkeni "1" eksiltilir
if (donus >= 9999) donus=999;
If (Q!=donus) //Enkoder konumu eski pozisyonundan farklı ise
{
MenuCikis=1; //Menüye giriş için MenuCikis değişkenine "1" yüklenir
clear_display(0); //P10Panel temizlenir
delay_us(50);
}
}
/**********************************P10 Panele veri basma bloğu*********************************/
void write_data(unsigned int8 row_adr) //P10Display veri yazma bloğu
{
int8 i=0,j=0;
int8 k=3;
while(k!=255)
{j=15-k;
for (i=0;i<4;i++)
{
spi_write(display_ram[j][row_adr]);
j-=4;
}
k--;
}
output_high(LATCH);
delay_cycles(2);
output_low(LATCH);
}
ds3231.c
#include "DS3231.h"
unsigned char bcd_to_decimal(unsigned char d)
{
return ((d & 0x0F) + (((d & 0xF0) >> 4) * 10));
}
unsigned char decimal_to_bcd(unsigned char d)
{
return (((d / 10) << 4) & 0xF0) | ((d % 10) & 0x0F);
}
unsigned char DS3231_Read(unsigned char address)
{
unsigned char value = 0;
I2C_start();
I2C_write(DS3231_Write_addr);
I2C_write(address);
I2C_start();
I2C_write(DS3231_Read_addr);
value = I2C_read(0);
I2C_stop();
return value;
}
void DS3231_Write(unsigned char address, unsigned char value)
{
I2C_start();
I2C_write(DS3231_Write_addr);
I2C_write(address);
I2C_write(value);
I2C_stop();
}
void DS3231_init()
{
DS3231_Write(controlREG, 0x00);
DS3231_Write(statusREG, 0x08);
}
void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format)
{
unsigned char tmp = 0;
p1 = DS3231_Read(secondREG);
p1 = bcd_to_decimal(p1);
p2 = DS3231_Read(minuteREG);
p2 = bcd_to_decimal(p2);
switch(hour_format)
{
case 1:
{
tmp = DS3231_Read(hourREG);
tmp &= 0x20;
p0 = (short)(tmp >> 5);
p3 = (0x1F & DS3231_Read(hourREG));
p3 = bcd_to_decimal(p3);
break;
}
default:
{
p3 = (0x3F & DS3231_Read(hourREG));
p3 = bcd_to_decimal(p3);
break;
}
}
}
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1)
{
p1 = DS3231_Read(yearREG);
p1 = bcd_to_decimal(p1);
p2 = (0x1F & DS3231_Read(monthREG));
p2 = bcd_to_decimal(p2);
p3 = (0x3F & DS3231_Read(dateREG));
p3 = bcd_to_decimal(p3);
p4 = (0x07 & DS3231_Read(dayREG));
p4 = bcd_to_decimal(p4);
}
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format)
{
unsigned char tmp = 0;
DS3231_Write(secondREG, (decimal_to_bcd(sSet)));
DS3231_Write(minuteREG, (decimal_to_bcd(mSet)));
switch(hour_format)
{
case 1:
{
switch(am_pm_state)
{
case 1:
{
tmp = 0x60;
break;
}
default:
{
tmp = 0x40;
break;
}
}
DS3231_Write(hourREG, ((tmp | (0x1F & (decimal_to_bcd(hSet))))));
break;
}
default:
{
DS3231_Write(hourREG, (0x3F & (decimal_to_bcd(hSet))));
break;
}
}
}
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet)
{
DS3231_Write(dayREG, (decimal_to_bcd(daySet)));
DS3231_Write(dateREG, (decimal_to_bcd(dateSet)));
DS3231_Write(monthREG, (decimal_to_bcd(monthSet)));
DS3231_Write(yearREG, (decimal_to_bcd(yearSet)));
}
float getTemp()
{
register float t = 0.0;
unsigned char lowByte = 0;
signed char highByte = 0;
lowByte = DS3231_Read(tempLSBREG);
highByte = DS3231_Read(tempMSBREG);
lowByte >>= 6;
lowByte &= 0x03;
t = ((float)lowByte);
t *= 0.25;
t += highByte;
return t;
}
ds3231.h
#define DS3231_Address 0x68
#define DS3231_Read_addr ((DS3231_Address << 1) | 0x01)
#define DS3231_Write_addr ((DS3231_Address << 1) & 0xFE)
#define secondREG 0x00
#define minuteREG 0x01
#define hourREG 0x02
#define dayREG 0x03
#define dateREG 0x04
#define monthREG 0x05
#define yearREG 0x06
#define alarm1secREG 0x07
#define alarm1minREG 0x08
#define alarm1hrREG 0x09
#define alarm1dateREG 0x0A
#define alarm2minREG 0x0B
#define alarm2hrREG 0x0C
#define alarm2dateREG 0x0D
#define controlREG 0x0E
#define statusREG 0x0F
#define ageoffsetREG 0x10
#define tempMSBREG 0x11
#define tempLSBREG 0x12
#define _24_hour_format 0
#define _12_hour_format 1
#define am 0
#define pm 1
unsigned char bcd_to_decimal(unsigned char d);
unsigned char decimal_to_bcd(unsigned char d);
unsigned char DS3231_Read(unsigned char address);
void DS3231_Write(unsigned char address, unsigned char value);
void DS3231_init();
void getTime(unsigned char &p3, unsigned char &p2, unsigned char &p1, short &p0, short hour_format);
void getDate(unsigned char &p4, unsigned char &p3, unsigned char &p2, unsigned char &p1);
void setTime(unsigned char hSet, unsigned char mSet, unsigned char sSet, short am_pm_state, short hour_format);
void setDate(unsigned char daySet, unsigned char dateSet, unsigned char monthSet, unsigned char yearSet);
float getTemp();
P10_Panel_Driver.c
/*******************************************************************************
* File Name : P10_Panel_Driver.c
* Author : Ferhat YOL
* Version : V1.0
* Date : 13/07/2013
* Description : P10 Panel kütüphanesidir.
* :
*******************************************************************************/
#include <font1.h>
#include <font2.h>
#include <font3.h>
#include <font4.h>
#define PinA pin_d1
#define PinB pin_d0
#define PinOE pin_c2 //OE=0 Display OFF, OE=1 Display ON
#define LATCH pin_c6 //
// PinSCK pin_c3 //Spi Clock Hattı
// PinData pin_c5 //Spi Data Hattı
// PWM_Pin pin_c2 //
// _____
// PWM__| \
// OE___| AND }---- Disp_Enable
// |_____/
//
// P10 Led Board
// 1 2
// OE --|oo|-- A
// GND --|oo|-- B
// GND --|oo|--
// GND --|oo|-- SCK
// GND --|oo|-- LATCH
// GND --|oo|-- DATA
// GND --|oo|--
// GND --|oo|--
// 15 16
//
#define Font1H 8
#define Font2H 12
#define Font3H 14
#define Font4H 16
#define Panel 1 //P10 Panel Sayısı
#define RIGHT 0 //
#define LEFT 1 //
#define WIDTH 31
#define HEIGHT 15
unsigned int8 display_ram[16][4]; //Bu Bölge Display Ram Alanını belirtir
unsigned char Text[100]="";
unsigned int8 imageBuffer[64];
int1 LineScroll (unsigned int Line, int1 Zerobit);
void clear_display (int1 fill);
void invert_screen (void);
void Set_Brightness (int8 value);
void SetTextFont (unsigned int Font);
void PutPixel (unsigned int Xpos, unsigned int Ypos, int1 fill);
int1 GetPixel (unsigned int Xpos, unsigned int Ypos);
void Line (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 fill);
void Rectangle (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 fill);
void Circle (unsigned int x, unsigned int y, unsigned int size, int1 fill);
void Bargraph (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 hor, unsigned int value);
void ShowString (unsigned int x, unsigned int y, unsigned int size, int1 fill);
void TextToLeftScroll (unsigned int Line, unsigned int Size, unsigned int speed, int1 fill);
void Writeimage (void);
/***********************Türkçe KArakterler burada ayrılır**********************/
int CharAdres(char c){
int adr=0;
switch(c)
{
case 'Ü':adr=96;break;
case 'Ö':adr=97;break;
case 'Ş':adr=98;break;
default:
adr=c-32;
break;
}
return adr;
}
/*******************************************************************************
* Satır Kaydırma Fonksiyonu *
* Parameter: Line, ZeroBit *
* Return: OwerFlow *
*******************************************************************************/
int1 LineScroll(unsigned int Line, int1 ZeroBit){
unsigned int32 Tam=0;
unsigned int y1=Line%4;
unsigned int y2=Line/4;
int1 OwerFlow;
ZeroBit=1-Zerobit;
OwerFlow=(display_ram[(y2*4)][y1]/128)&0x01;
Tam=display_ram[(y2*4)][y1];
Tam=Tam<<8;
Tam=Tam+display_ram[(y2*4)+1][y1];
Tam=Tam<<8;
Tam=Tam+display_ram[(y2*4)+2][y1];
Tam=Tam<<8;
Tam=Tam+display_ram[(y2*4)+3][y1];
Tam=Tam<<1;
Tam=Tam+ZeroBit;
display_ram[(y2*4) ][y1]=(int32)(Tam>>24)&0xFF;
display_ram[(y2*4)+1][y1]=(int32)(Tam>>16)&0xFF;
display_ram[(y2*4)+2][y1]=(int32)(Tam>>8)&0xFF;
display_ram[(y2*4)+3][y1]=(int32)(Tam&0xFF);
Return OwerFlow;
}
/*******************************************************************************
* Text Basma Fonksiyonu Font1 *
* Parameter: x, y, Fill *
* Return: *
*******************************************************************************/
void DrawCharFont1(unsigned x, unsigned y, int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int clm=x,row=y;
While (Text[i]!='\0')
{
if(clm+5>WIDTH) //Satır sonuna gelindimi Bir Alt Satıra Geç
{
clm=0;
row=row+8;
if(row+8>HEIGHT+1) break;
}
for(b=0;b<5;b++)
{
cdata=Font_5x7[Text[i]-32][b];
for(a=0;a<8;a++)
{
PutPixel(clm+b,row+a,(fill-(cdata>>a) & 0x01));
}
}
i++;
clm=clm+6;
}
}
/*******************************************************************************
* Text Basma Fonksiyonu Font2 *
* Parameter: x, y, Fill *
* Return: *
*******************************************************************************/
void DrawCharFont2(unsigned int x, unsigned int y, int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int clm=x,row=y;
while(Text[i]!='\0')
{
if(clm+8>WIDTH) //Satır sonuna gelindimi Bir Alt Satıra Geç
{
clm=0;
row=row+12;
if(row+12>HEIGHT+1) break;
}
for(b=0;b<16;b=b+2)
{
cdata=Font_8x12[Text[i]-32][b];
for(a=0;a<8;a++)
{
PutPixel(clm+(b/2),row+a,(fill-(cdata>>a) & 0x01));
}
cdata=Font_8x12[Text[i]-32][b+1];
for(a=0;a<4;a++)
{
PutPixel(clm+(b/2),row+8+a,(fill-(cdata>>a) & 0x01));
}
}
clm=clm+8;
i++;
}
}
/*******************************************************************************
* Text Basma Fonksiyonu Font3 *
* Parameter: x, y, Fill *
* Return: *
*******************************************************************************/
void DrawCharFont3(unsigned int x, unsigned int y, int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int clm=x,row=y;
while(Text[i]!='\0')
{
if(clm+12>WIDTH) //Satır sonuna gelindimi Bir Alt Satıra Geç
{
clm=0;
row=row+14;
if(row+14>HEIGHT+1) break;
}
for(b=0;b<24;b=b+2)
{
cdata=Font_12x14[Text[i]-32][b];
for(a=0;a<8;a++)
{
PutPixel(clm+(b/2),row+a,(fill-(cdata>>a) & 0x01));
}
cdata=Font_12x14[Text[i]-32][b+1];
for(a=0;a<6;a++)
{
PutPixel(clm+(b/2),row+8+a,(fill-(cdata>>a) & 0x01));
}
}
clm=clm+12;
i++;
}
}
/*******************************************************************************
* Text Basma Fonksiyonu Font4 *
* Parameter: x, y, Fill *
* Return: *
*******************************************************************************/
void DrawCharFont4(unsigned int x, unsigned int y, int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int cadr=0;
unsigned int clm=x,row=y;
while(Text[i]!='\0')
{
if(clm+12>WIDTH) //Satır sonuna gelindimi Bir Alt Satıra Geç
{
clm=0;
row=row+16;
if(row+16>HEIGHT+1) break;
}
cadr=CharAdres(Text[i]);
for(b=0;b<24;b=b+2)
{
cdata=Font_12x16[cadr][b];
for(a=0;a<8;a++)
{
PutPixel(clm+(b/2),row+a,(fill-(cdata>>a) & 0x01));
}
cdata=Font_12x16[cadr][b+1];
for(a=0;a<8;a++)
{
PutPixel(clm+(b/2),row+8+a,(fill-(cdata>>a) & 0x01));
}
}
clm=clm+12;
i++;
}
}
/*******************************************************************************
* Text Kaydırma Fonksiyonu Font1 *
* Parameter: Line, Speed, Fill *
* Return: *
*******************************************************************************/
void ScrollTextFont1 (unsigned int Line, unsigned int speed,int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int16 delay=speed*20;
int1 ZeroBit=0;
While(Text[i]!='\0')
{
if(Line+Font1H-1>HEIGHT)Break;
for(b=0;b<5;b++)
{
cdata=Font_5x7[Text[i]-32][b];
for (a=0;a<8;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(Line+a,ZeroBit);
}
delay_Ms(210-delay);
}
for (a=0;a<8;a++)
{
LineScroll(Line+a,0);
}
delay_Ms(210-delay);
i++;
}
}
/*******************************************************************************
* Text Kaydırma Fonksiyonu Font2 *
* Parameter: Line, Speed, Fill *
* Return: *
*******************************************************************************/
void ScrollTextFont2(unsigned int Line, unsigned int Speed,int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int16 delay=speed*20;
unsigned int16 sayac=0;
int1 ZeroBit=0;
while(Text[i]!='\0')
{
if(Line+Font2H-1>HEIGHT)Break;
for(b=0;b<16;b=b+2)
{
cdata=Font_8x12[Text[i]-32][b];
for(a=0;a<8;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(Line+a,ZeroBit);
}
cdata=Font_8x12[Text[i]-32][b+1];
for(a=0;a<4;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(Line+8+a,ZeroBit);
}
for(sayac=0;sayac<210-delay;sayac++)
{
delay_ms(1);
}
}
i++;
}
}
/*******************************************************************************
* Text Kaydırma Fonksiyonu Font3 *
* Parameter: Line, Speed, Fill *
* Return: *
*******************************************************************************/
void ScrollTextFont3(unsigned int Line, unsigned int Speed,int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0;
unsigned int16 delay=speed*20;
unsigned int16 sayac=0;
int1 ZeroBit=0;
while(Text[i]!='\0')
{
if(Line+Font3H-1>HEIGHT)Break;
for(b=0;b<24;b=b+2)
{
cdata=Font_12x14[Text[i]-32][b];
for(a=0;a<8;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(Line+a,ZeroBit);
}
cdata=Font_12x14[Text[i]-32][b+1];
for(a=0;a<6;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(Line+8+a,ZeroBit);
}
for(sayac=0;sayac<210-delay;sayac++)
{
delay_ms(1);
}
}
i++;
}
}
/*******************************************************************************
* Text Kaydırma Fonksiyonu Font4 *
* Parameter: Line, Speed, Fill *
* Return: *
*******************************************************************************/
void ScrollTextFont4(unsigned int Line, unsigned int Speed,int1 fill){
unsigned int a=0,b=0,i=0;
unsigned int cdata=0,cadr=0;;
unsigned int16 delay=speed*20;
unsigned int16 sayac=0;
int1 ZeroBit=0;
while(Text[i]!='\0')
{
if(Line+Font4H-1>HEIGHT)Break;
cadr=CharAdres(Text[i]);
for(b=0;b<24;b=b+2)
{
cdata=Font_12x16[cadr][b];
for(a=0;a<8;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(a,ZeroBit);
}
cdata=Font_12x16[cadr][b+1];
for(a=0;a<8;a++)
{
ZeroBit=fill-(cdata>>a) & 0x01;
LineScroll(8+a,ZeroBit);
}
for(sayac=0;sayac<210-delay;sayac++)
{
delay_ms(1);
}
}
i++;
}
}
/*******************************************************************************
* Ekran Temizleme Fonksiyonu *
* Parameter: fill *
* Return: *
*******************************************************************************/
void clear_display(int1 fill){
int8 i=0,j=0,fdata=0;
if (fill){
fdata=0x00;
}else{
fdata=0xFF;
}
for (i=0;i<4;i++)
{
for (j=0;j<16;j++)
{
display_ram[j][i]=fdata;
}
}
}
/*******************************************************************************
* Ekran Tersleme Fonksiyonu *
* Parameter: *
* Return: *
*******************************************************************************/
void invert_screen(void){
int8 i=0,j=0;
for(i=0;i<4;i++)
{
for(j=0;j<16;j++)
{
display_ram[j][i] =~ display_ram[j][i]; //Önbellekteki değer değillenip geri yazılıyor
}
}
}
/*******************************************************************************
* Parlaklık Ayar Fonksiyonu *
* Parameter: value (0-100) *
* Return: *
*******************************************************************************/
void Set_Brightness(int8 value){
set_pwm1_duty((int16)value*10);
}
/*******************************************************************************
* Pixel Fonksiyonu *
* Parameter: Xpos, Ypos, fill *
* Return: *
*******************************************************************************/
void PutPixel(unsigned int Xpos,unsigned int Ypos, int1 fill)
{
int8 y1=0,x1=0;
int8 y2=0,x2=0;
int8 temp=0;
y1 = Ypos%4;
y2 = Ypos/4;
x1 = Xpos%8;
x2 = Xpos/8;
if(fill) //Nokta Koy
{
temp=display_ram[(y2*4)+x2][y1]; //Ram'deki değer ön belleğe alınıyor.
display_ram[(y2*4)+x2][y1] = (temp & (255-(128>>x1))); //x'inci bit 0 yapılır
}
else //Noktayı Sil
{
temp=display_ram[(y2*4)+x2][y1]; //Ram'deki değer ön belleğe alınıyor.
display_ram[(y2*4)+x2][y1] = (temp | (128>>x1)); //x'inci Bit 1 yapılır
}
}
/*******************************************************************************
* Pixel Okuma Fonksiyonu *
* Parameter: Xpos, Ypos *
* Return: value *
*******************************************************************************/
int1 GetPixel(unsigned int Xpos,unsigned int Ypos){
int8 y1=0,x1=0;
int8 y2=0,x2=0;
int8 temp=0;
int1 value=0;
y1 = Ypos%4;
y2 = Ypos/4;
x1 = Xpos%8;
x2 = Xpos/8;
temp=display_ram[(y2*4)+x2][y1]; //Ram'deki değer ön belleğe alınıyor.
value=1-(0x80 & temp<<x1)/128; //Ram adresindeki bit geri gönderiliyor
return value;
}
/*******************************************************************************
* Çizgi Çizme Fonksiyonu *
* Parameter: x1, x2, y1, y2, fill *
* Return: *
*******************************************************************************/
void Line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 fill)
{
signed int16 addx=1, addy=1, P;
signed int16 i, dy, dx, diff;
if(x2>x1)
{
dx = x2 - x1;
}else{
dx = x1 - x2;
addx = -1;
}
if(y2>y1)
{
dy = y2 - y1;
}else{
dy = y1 - y2;
addy = -1;
}
if(dx >= dy)
{
dy *= 2;
P = dy - dx;
diff = P - dx;
for(i=0; i<=dx; i++)
{
PutPixel(x1, y1, fill);
if(P < 0)
{
P += dy;
x1 += addx;
}
else
{
P += diff;
x1 += addx;
y1 += addy;
}
}
}
else
{
dx *= 2;
P = dx - dy;
diff = P - dy;
for(i=0; i<=dy; ++i)
{
PutPixel(x1, y1, fill);
if(P < 0)
{
P += dx;
y1 += addy;
}
else
{
P += diff;
x1 += addx;
y1 += addy;
}
}
}
}
/*******************************************************************************
* Dikdörtgen Çizme Fonksiyonu *
* Parameter: x1, x2, y1, y2, fill *
* Return: *
*******************************************************************************/
void Rectangle(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 fill)
{
unsigned int16 i, xmin, xmax, ymin, ymax;
if(fill)
{
if(x1 < x2)
{
xmin = x1;
xmax = x2;
}
else
{
xmin = x2;
xmax = x1;
}
if(y1 < y2)
{
ymin = y1;
ymax = y2;
}
else
{
ymin = y2;
ymax = y1;
}
for(; xmin <= xmax; ++xmin)
{
for(i=ymin; i<=ymax; ++i)
{
PutPixel(xmin, i, 1);
}
}
}
else
{
Line(x1, y1, x2, y1, 1);
Line(x2, y1, x2, y2, 1);
Line(x2, y2, x1, y2, 1);
Line(x1, y2, x1, y1, 1);
}
}
/*******************************************************************************
* Çember Cizme Fonksiyonu *
* Parameter: x, y, Size, fill *
* Return: *
*******************************************************************************/
void Circle(unsigned int x, unsigned int y, unsigned int size, int1 fill)
{
signed int a,b,P;
a=0;
b=size;
P=1-size;
do
{
if(fill)
{
Line(x-a, y+b, x+a, y+b,1);
Line(x-a, y-b, x+a, y-b,1);
Line(x-b, y+a, x+b, y+a,1);
Line(x-b, y-a, x+b, y-a,1);
}
else
{
PutPixel(a+x, b+y,1);
PutPixel(b+x, a+y,1);
PutPixel(x-a, b+y,1);
PutPixel(x-b, a+y,1);
PutPixel(b+x, y-a,1);
PutPixel(a+x, y-b,1);
PutPixel(x-a, y-b,1);
PutPixel(x-b, y-a,1);
}
if(P < 0)
P+= 3 + 2*a++;
else
P+= 5 + 2*(a++ - b--);
}while(a<=b);
}
/*******************************************************************************
* Bargraph Çizme Fonksiyonu *
* Parameter: x1, y1, x2, y2, Mode, Value *
* Return: *
*******************************************************************************/
void Bargraph (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, int1 hor, unsigned int value,)
{
unsigned int w=0;
unsigned int h=0;
unsigned int a=0,b=0;
unsigned int16 barval=0;
if(x1>x2) w=x1-x2;
if(x1<x2) w=x2-x1;
if(y1>y2) h=y1-y2;
if(y1<y2) h=y2-y1;
if(value>100)value=100;
if(hor) //Bar Dikey Olarak Oluşturulacak
{
barval=((int16)value*h)/100;
for (a=0;a<h+1;a++)
{
for(b=0;b<w+1;b++)
{
if(barval>=a){
PutPixel(x1+b,15-a+y1,1);
}else{
PutPixel(x1+b,15-a+y1,0);
}
}
}
}else{ //Bar Yatay olarak Oluşturulacak
barval=((int16)value*w)/100;
for (a=0;a<w+1;a++)
{
for(b=0;b<h+1;b++)
{
if(barval>=a)
{
PutPixel(x1+a,y1+b,1);
}else{
PutPixel(x1+a,y1+b,0);
}
}
}
}
}
/*******************************************************************************
* Text Basma Fonksiyonu *
* Parameter: x, y, size, fill *
* Return: *
*******************************************************************************/
void ShowString(unsigned int x, unsigned int y, unsigned int size, int1 fill){
switch(size)
{
case 1: DrawCharFont1(x,y,fill);break;
case 2: DrawCharFont2(x,y,fill);break;
case 3: DrawCharFont3(x,y,fill);break;
case 4: DrawCharFont4(x,y,fill);break;
default: break;
}
}
/*******************************************************************************
* Text Kaydırma Fonksiyonu *
* Parameter: Line, Size, Speed, Fill *
* Return: *
*******************************************************************************/
void TextToLeftScroll(unsigned int Line, unsigned int Size, unsigned int Speed,int1 fill){
switch (size)
{
case 1: ScrollTextFont1(Line,Speed,fill);Break;
case 2: ScrollTextFont2(Line,Speed,fill);Break;
case 3: ScrollTextFont3(Line,Speed,fill);Break;
case 4: ScrollTextFont4(Line,Speed,fill);Break;
default: Break;
}
}
void Writeimage(){
int8 a=0,b=0,i=0;
int8 cdata=0;
for (a=0;a<32;a++)
{
cdata=imageBuffer[i];
for(b=0;b<8;b++)
{
PutPixel(a,b,(cdata>>b)&0x01);
}
i++;
cdata=imageBuffer[i];
for(b=0;b<8;b++)
{
PutPixel(a,8+b,(cdata>>b)&0x01);
}
i++;
}
}
font1.h
const unsigned char Font_5x7[96][5] ={ //
0x00, 0x00, 0x00, 0x00, 0x00, // SPACE 32
0x00, 0x00, 0x5F, 0x00, 0x00, // ! 33
0x00, 0x03, 0x00, 0x03, 0x00, // " 34
0x14, 0x3E, 0x14, 0x3E, 0x14, // # 35
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $ 36
0x43, 0x33, 0x08, 0x66, 0x61, // % 37
0x36, 0x49, 0x55, 0x22, 0x50, // & 38
0x00, 0x05, 0x03, 0x00, 0x00, // ' 39
0x00, 0x1C, 0x22, 0x41, 0x00, // ( 40
0x00, 0x41, 0x22, 0x1C, 0x00, // ) 41
0x14, 0x08, 0x3E, 0x08, 0x14, // * 42
0x08, 0x08, 0x3E, 0x08, 0x08, // + 43
0x00, 0x50, 0x30, 0x00, 0x00, // , 44
0x08, 0x08, 0x08, 0x08, 0x08, // - 45
0x00, 0x60, 0x60, 0x00, 0x00, // . 46
0x20, 0x10, 0x08, 0x04, 0x02, // / 47
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 48
0x04, 0x02, 0x7F, 0x00, 0x00, // 1 49
0x42, 0x61, 0x51, 0x49, 0x46, // 2 50
0x22, 0x41, 0x49, 0x49, 0x36, // 3 51
0x18, 0x14, 0x12, 0x7F, 0x10, // 4 52
0x27, 0x45, 0x45, 0x45, 0x39, // 5 53
0x3E, 0x49, 0x49, 0x49, 0x32, // 6 54
0x01, 0x01, 0x71, 0x09, 0x07, // 7 55
0x36, 0x49, 0x49, 0x49, 0x36, // 8 56
0x26, 0x49, 0x49, 0x49, 0x3E, // 9 57
0x00, 0x36, 0x36, 0x00, 0x00, // : 58
0x00, 0x56, 0x36, 0x00, 0x00, // ; 59
0x08, 0x14, 0x22, 0x41, 0x00, // < 60
0x14, 0x14, 0x14, 0x14, 0x14, // = 61
0x00, 0x41, 0x22, 0x14, 0x08, // > 62
0x02, 0x01, 0x51, 0x09, 0x06, // ? 63
0x3E, 0x41, 0x59, 0x55, 0x5E, // @ 64
0x7E, 0x09, 0x09, 0x09, 0x7E, // A 65
0x7F, 0x49, 0x49, 0x49, 0x36, // B 66
0x3E, 0x41, 0x41, 0x41, 0x22, // C 67
0x7F, 0x41, 0x41, 0x41, 0x3E, // D 68
0x7F, 0x49, 0x49, 0x49, 0x41, // E 69
0x7F, 0x09, 0x09, 0x09, 0x01, // F 70
0x3E, 0x41, 0x41, 0x49, 0x3A, // G 71
0x7F, 0x08, 0x08, 0x08, 0x7F, // H 72
0x00, 0x41, 0x7F, 0x41, 0x00, // I 73
0x30, 0x40, 0x40, 0x40, 0x3F, // J 74
0x7F, 0x08, 0x14, 0x22, 0x41, // K 75
0x7F, 0x40, 0x40, 0x40, 0x40, // L 76
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M 77
0x7F, 0x02, 0x04, 0x08, 0x7F, // N 78
0x3E, 0x41, 0x41, 0x41, 0x3E, // O 79
0x7F, 0x09, 0x09, 0x09, 0x06, // P 80
0x1E, 0x21, 0x21, 0x21, 0x5E, // Q 81
0x7F, 0x09, 0x09, 0x09, 0x76, // R 82
0x26, 0x49, 0x49, 0x49, 0x32, // S 83
0x01, 0x01, 0x7F, 0x01, 0x01, // T 84
0x3F, 0x40, 0x40, 0x40, 0x3F, // U 85
0x1F, 0x20, 0x40, 0x20, 0x1F, // V 86
0x7F, 0x20, 0x10, 0x20, 0x7F, // W 87
0x41, 0x22, 0x1C, 0x22, 0x41, // X 88
0x07, 0x08, 0x70, 0x08, 0x07, // Y 89
0x61, 0x51, 0x49, 0x45, 0x43, // Z 90
0x00, 0x7F, 0x41, 0x00, 0x00, // [ 91
0x02, 0x04, 0x08, 0x10, 0x20, // \ 92
0x00, 0x00, 0x41, 0x7F, 0x00, // ] 93
0x04, 0x02, 0x01, 0x02, 0x04, // ^ 94
0x40, 0x40, 0x40, 0x40, 0x40, // _ 95
0x00, 0x01, 0x02, 0x04, 0x00, // ` 96
0x20, 0x54, 0x54, 0x54, 0x78, // a 97
0x7F, 0x44, 0x44, 0x44, 0x38, // b 98
0x38, 0x44, 0x44, 0x44, 0x44, // c 99
0x38, 0x44, 0x44, 0x44, 0x7F, // d 100
0x38, 0x54, 0x54, 0x54, 0x18, // e 101
0x04, 0x04, 0x7E, 0x05, 0x05, // f 102
0x08, 0x54, 0x54, 0x54, 0x3C, // g 103
0x7F, 0x08, 0x04, 0x04, 0x78, // h 104
0x00, 0x44, 0x7D, 0x40, 0x00, // i 105
0x20, 0x40, 0x44, 0x3D, 0x00, // j 106
0x7F, 0x10, 0x28, 0x44, 0x00, // k 107
0x00, 0x41, 0x7F, 0x40, 0x00, // l 108
0x7C, 0x04, 0x78, 0x04, 0x78, // m 109
0x7C, 0x08, 0x04, 0x04, 0x78, // n 110
0x38, 0x44, 0x44, 0x44, 0x38, // o 111
0x7C, 0x14, 0x14, 0x14, 0x08, // p 112
0x08, 0x14, 0x14, 0x14, 0x7C, // q 113
0x00, 0x7C, 0x08, 0x04, 0x04, // r 114
0x48, 0x54, 0x54, 0x54, 0x20, // s 115
0x04, 0x04, 0x3F, 0x44, 0x44, // t 116
0x3C, 0x40, 0x40, 0x20, 0x7C, // u 117
0x1C, 0x20, 0x40, 0x20, 0x1C, // v 118
0x3C, 0x40, 0x30, 0x40, 0x3C, // w 119
0x44, 0x28, 0x10, 0x28, 0x44, // x 120
0x0C, 0x50, 0x50, 0x50, 0x3C, // y 121
0x44, 0x64, 0x54, 0x4C, 0x44, // z 122
0x00, 0x08, 0x36, 0x41, 0x41, // { 123
0x00, 0x00, 0x7F, 0x00, 0x00, // | 124
0x41, 0x41, 0x36, 0x08, 0x00, // } 125
0x02, 0x01, 0x02, 0x04, 0x02};// ~ 126
font2.h
//FontSize : 8 x 12
const unsigned char Font_8x12[96][16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
0x00, 0x00, 0x7E, 0x03, 0x7E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0xC0, 0x00, 0xD8, 0x03, 0xF8, 0x00, 0xDE, 0x00, 0xD8, 0x03, 0xF8, 0x00, 0xDE, 0x00, 0x18, 0x00, // Code for char #
0x1C, 0x01, 0x3E, 0x02, 0x22, 0x02, 0xFF, 0x07, 0x22, 0x02, 0xE2, 0x03, 0xC4, 0x01, 0x00, 0x00, // Code for char $
0x0C, 0x06, 0x92, 0x03, 0xCC, 0x00, 0x60, 0x00, 0x30, 0x03, 0x98, 0x04, 0x0E, 0x03, 0x00, 0x00, // Code for char %
0xDC, 0x01, 0xFE, 0x03, 0x22, 0x02, 0x22, 0x02, 0x7E, 0x02, 0xDC, 0x01, 0x00, 0x03, 0x80, 0x04, // Code for char &
0x00, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x00, 0x00, 0xFC, 0x01, 0xFE, 0x03, 0x03, 0x06, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x00, 0x00, 0x01, 0x04, 0x03, 0x06, 0xFE, 0x03, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, // Code for char *
0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFE, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, // Code for char +
0x00, 0x08, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x00, 0x08, 0x00, 0x06, 0x80, 0x01, 0x60, 0x00, 0x18, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0xFC, 0x01, 0xFE, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFE, 0x03, 0xFC, 0x01, 0x00, 0x00, // Code for char 0
0x00, 0x00, 0x04, 0x02, 0x04, 0x02, 0xFE, 0x03, 0xFE, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, // Code for char 1
0x0C, 0x02, 0x02, 0x03, 0x82, 0x03, 0xC2, 0x02, 0x62, 0x02, 0x3E, 0x02, 0x1C, 0x02, 0x00, 0x00, // Code for char 2
0x04, 0x01, 0x02, 0x02, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0xFE, 0x03, 0xDC, 0x01, 0x00, 0x00, // Code for char 3
0x60, 0x00, 0x50, 0x00, 0x48, 0x00, 0x44, 0x00, 0xFE, 0x03, 0xFE, 0x03, 0x40, 0x00, 0x00, 0x00, // Code for char 4
0x1E, 0x01, 0x1E, 0x02, 0x12, 0x02, 0x12, 0x02, 0x12, 0x02, 0xF2, 0x03, 0xE2, 0x01, 0x00, 0x00, // Code for char 5
0xFC, 0x01, 0xFE, 0x03, 0x12, 0x02, 0x12, 0x02, 0x12, 0x02, 0xF2, 0x03, 0xE4, 0x01, 0x00, 0x00, // Code for char 6
0x02, 0x00, 0x02, 0x00, 0x82, 0x03, 0xE2, 0x03, 0x7A, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char 7
0xDC, 0x01, 0xFE, 0x03, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0xFE, 0x03, 0xDC, 0x01, 0x00, 0x00, // Code for char 8
0x3C, 0x00, 0x7E, 0x02, 0x42, 0x02, 0x42, 0x02, 0x42, 0x03, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, // Code for char 9
0x00, 0x00, 0x18, 0x03, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x00, 0x04, 0x18, 0x07, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x60, 0x00, 0x60, 0x00, 0x90, 0x00, 0x90, 0x00, 0x08, 0x01, 0x08, 0x01, 0x04, 0x02, 0x00, 0x00, // Code for char <
0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x00, 0x00, // Code for char =
0x04, 0x02, 0x04, 0x02, 0x08, 0x01, 0x08, 0x01, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00, 0x00, // Code for char >
0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x62, 0x03, 0x72, 0x03, 0x1E, 0x00, 0x0C, 0x00, 0x00, 0x00, // Code for char ?
0xF8, 0x00, 0x04, 0x01, 0x72, 0x02, 0x8A, 0x02, 0x8A, 0x02, 0xF2, 0x02, 0x86, 0x02, 0x7C, 0x01, // Code for char @
0xF8, 0x03, 0xFC, 0x03, 0x46, 0x00, 0x46, 0x00, 0x46, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0x00, 0x00, // Code for char A
0xFE, 0x03, 0xFE, 0x03, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0xFE, 0x03, 0xDC, 0x01, 0x00, 0x00, // Code for char B
0xFC, 0x01, 0xFE, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x8C, 0x01, 0x00, 0x00, // Code for char C
0xFE, 0x03, 0xFE, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, // Code for char D
0xFE, 0x03, 0xFE, 0x03, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char E
0xFE, 0x03, 0xFE, 0x03, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F
0xFC, 0x01, 0xFE, 0x03, 0x02, 0x02, 0x02, 0x02, 0x22, 0x02, 0xE2, 0x03, 0xEC, 0x03, 0x00, 0x00, // Code for char G
0xFE, 0x03, 0xFE, 0x03, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xFE, 0x03, 0xFE, 0x03, 0x00, 0x00, // Code for char H
0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xFE, 0x03, 0xFE, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFE, 0x03, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0xFE, 0x03, 0xFE, 0x03, 0x70, 0x00, 0xD8, 0x00, 0x8C, 0x01, 0x06, 0x03, 0x02, 0x02, 0x00, 0x00, // Code for char K
0xFE, 0x03, 0xFE, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char L
0xFE, 0x03, 0x1C, 0x00, 0x30, 0x00, 0x40, 0x00, 0x30, 0x00, 0x1C, 0x00, 0xFE, 0x03, 0x00, 0x00, // Code for char M
0xFE, 0x03, 0x06, 0x00, 0x1E, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x03, 0xFE, 0x03, 0x00, 0x00, // Code for char N
0xFC, 0x01, 0xFE, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0xFE, 0x03, 0xFC, 0x01, 0x00, 0x00, // Code for char O
0xFE, 0x03, 0xFE, 0x03, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7E, 0x00, 0x3C, 0x00, 0x00, 0x00, // Code for char P
0xFC, 0x01, 0xFE, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0xFE, 0x07, 0xFC, 0x05, // Code for char Q
0xFE, 0x03, 0xFE, 0x03, 0x22, 0x00, 0x62, 0x00, 0xE2, 0x00, 0xBE, 0x03, 0x1C, 0x02, 0x00, 0x00, // Code for char R
0x9C, 0x01, 0x3E, 0x02, 0x22, 0x02, 0x22, 0x02, 0x22, 0x02, 0xE2, 0x03, 0xCC, 0x01, 0x00, 0x00, // Code for char S
0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x03, 0xFE, 0x03, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, // Code for char T
0xFE, 0x01, 0xFE, 0x03, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xFE, 0x03, 0xFE, 0x01, 0x00, 0x00, // Code for char U
0x7E, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0x7E, 0x00, // Code for char V
0xFE, 0x03, 0x00, 0x03, 0x80, 0x01, 0xF0, 0x00, 0xF0, 0x00, 0x80, 0x01, 0x00, 0x03, 0xFE, 0x03, // Code for char W
0x06, 0x03, 0x8E, 0x03, 0xD8, 0x00, 0x70, 0x00, 0x70, 0x00, 0xD8, 0x00, 0x8E, 0x03, 0x06, 0x03, // Code for char X
0x06, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0xE0, 0x03, 0x38, 0x00, 0x1E, 0x00, 0x06, 0x00, // Code for char Y
0x02, 0x03, 0x82, 0x03, 0xC2, 0x02, 0x62, 0x02, 0x32, 0x02, 0x1A, 0x02, 0x0E, 0x02, 0x00, 0x00, // Code for char Z
0x00, 0x00, 0xFE, 0x07, 0xFE, 0x07, 0x02, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x06, 0x00, 0x18, 0x00, 0x60, 0x00, 0x80, 0x01, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash
0x00, 0x00, 0x02, 0x04, 0x02, 0x04, 0xFE, 0x07, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, // Code for char ^
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x00, 0x03, 0xA0, 0x07, 0x90, 0x04, 0x90, 0x04, 0x90, 0x04, 0xF0, 0x07, 0xE0, 0x07, 0x00, 0x00, // Code for char a
0xFE, 0x07, 0xFE, 0x07, 0x20, 0x04, 0x10, 0x04, 0x10, 0x04, 0xF0, 0x07, 0xE0, 0x03, 0x00, 0x00, // Code for char b
0xE0, 0x03, 0xF0, 0x07, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char c
0xE0, 0x03, 0xF0, 0x07, 0x10, 0x04, 0x10, 0x04, 0x10, 0x02, 0xFE, 0x07, 0xFE, 0x07, 0x00, 0x00, // Code for char d
0xE0, 0x03, 0xF0, 0x07, 0x90, 0x04, 0x90, 0x04, 0x90, 0x04, 0xF0, 0x04, 0xE0, 0x02, 0x00, 0x00, // Code for char e
0x10, 0x00, 0xFC, 0x07, 0xFE, 0x07, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0x7C, 0x02, 0xFE, 0x04, 0x82, 0x04, 0x82, 0x04, 0x42, 0x04, 0xFE, 0x07, 0xFE, 0x03, 0x00, 0x00, // Code for char g
0xFE, 0x07, 0xFE, 0x07, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x07, 0xE0, 0x07, 0x00, 0x00, // Code for char h
0xF6, 0x07, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x00, 0x00, 0x10, 0x00, 0xF6, 0x07, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0xFE, 0x07, 0xFE, 0x07, 0xC0, 0x01, 0x60, 0x03, 0x30, 0x06, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char k
0xFE, 0x07, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0xE0, 0x07, 0x10, 0x00, 0x10, 0x00, 0xE0, 0x07, 0xE0, 0x07, 0x10, 0x00, 0x10, 0x00, 0xE0, 0x07, // Code for char m
0xF0, 0x07, 0xF0, 0x07, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x07, 0xE0, 0x07, 0x00, 0x00, // Code for char n
0xE0, 0x03, 0xF0, 0x07, 0x10, 0x04, 0x10, 0x04, 0x10, 0x04, 0xF0, 0x07, 0xE0, 0x03, 0x00, 0x00, // Code for char o
0xFE, 0x07, 0xFE, 0x07, 0x84, 0x00, 0x82, 0x00, 0x82, 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, // Code for char p
0x7C, 0x00, 0xFE, 0x00, 0x82, 0x00, 0x82, 0x00, 0x42, 0x00, 0xFE, 0x07, 0xFE, 0x07, 0x00, 0x00, // Code for char q
0xF0, 0x07, 0xF0, 0x07, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r
0x60, 0x02, 0xF0, 0x04, 0xD0, 0x04, 0x90, 0x05, 0x90, 0x07, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x10, 0x00, 0xFC, 0x03, 0xFC, 0x07, 0x10, 0x04, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0xF0, 0x03, 0xF0, 0x07, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0xF0, 0x07, 0xF0, 0x07, 0x00, 0x00, // Code for char u
0x70, 0x00, 0xF0, 0x01, 0x80, 0x07, 0x00, 0x06, 0x80, 0x07, 0xF0, 0x01, 0x70, 0x00, 0x00, 0x00, // Code for char v
0xF0, 0x03, 0x00, 0x06, 0x00, 0x04, 0xE0, 0x03, 0x00, 0x04, 0x00, 0x06, 0xF0, 0x03, 0x00, 0x00, // Code for char w
0x30, 0x06, 0x70, 0x07, 0xC0, 0x01, 0xC0, 0x01, 0x70, 0x07, 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x18, 0x02, 0x30, 0x04, 0x60, 0x04, 0xC0, 0x07, 0xC0, 0x03, 0x60, 0x00, 0x38, 0x00, 0x00, 0x00, // Code for char y
0x10, 0x06, 0x10, 0x07, 0x90, 0x05, 0xD0, 0x04, 0x70, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x60, 0x00, 0xFC, 0x03, 0x9E, 0x07, 0x02, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x02, 0x04, 0x02, 0x04, 0x9E, 0x07, 0xFC, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0xE0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x70, 0x00, // Code for char ~
0x00, 0x00, 0xFE, 0x07, 0x02, 0x04, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char
};
font3.h
const unsigned char Font_12x14[96][24] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
0x00, 0x00, 0xFE, 0x1B, 0xFE, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x00, 0x03, 0x30, 0x1B, 0xB0, 0x07, 0x78, 0x03, 0x36, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x1B, 0xB0, 0x07, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char #
0x70, 0x0C, 0xF8, 0x1C, 0x8C, 0x10, 0x84, 0x10, 0xFF, 0x3F, 0x84, 0x10, 0x84, 0x18, 0x9C, 0x0F, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $
0x0E, 0x18, 0x1F, 0x1C, 0x11, 0x0E, 0x1F, 0x07, 0xCE, 0x03, 0xE0, 0x01, 0x70, 0x0E, 0x38, 0x1F, 0x1C, 0x11, 0x0E, 0x1F, 0x07, 0x0E, 0x00, 0x00, // Code for char %
0x00, 0x07, 0x9C, 0x0F, 0xFE, 0x18, 0x62, 0x10, 0xC2, 0x10, 0xE2, 0x11, 0x3E, 0x1B, 0x1C, 0x0E, 0xC0, 0x0F, 0xC0, 0x19, 0x00, 0x00, 0x00, 0x00, // Code for char &
0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x00, 0x00, 0xF0, 0x0F, 0xFC, 0x3F, 0x0E, 0x30, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x0E, 0x30, 0xFC, 0x3F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x00, 0x00, 0x42, 0x00, 0x24, 0x00, 0x18, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x18, 0x00, 0x24, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xF0, 0x07, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char +
0x00, 0x00, 0x00, 0x2C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0E, 0x80, 0x01, 0x70, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0xF8, 0x07, 0xFC, 0x0F, 0x06, 0x18, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x06, 0x18, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 0
0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x08, 0x10, 0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1
0x08, 0x10, 0x0C, 0x18, 0x06, 0x1C, 0x02, 0x16, 0x02, 0x13, 0x82, 0x11, 0xC6, 0x10, 0x7C, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 2
0x0C, 0x0C, 0x06, 0x18, 0x02, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0xE6, 0x18, 0xBC, 0x0F, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 3
0x80, 0x01, 0x40, 0x01, 0x20, 0x01, 0x10, 0x01, 0x08, 0x01, 0x04, 0x01, 0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char 4
0x00, 0x0C, 0x3E, 0x1C, 0x3E, 0x10, 0x22, 0x10, 0x22, 0x10, 0x22, 0x10, 0x62, 0x18, 0xC2, 0x0F, 0x82, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 5
0xF0, 0x07, 0xF8, 0x0F, 0x2C, 0x18, 0x26, 0x10, 0x22, 0x10, 0x22, 0x10, 0x62, 0x18, 0xC2, 0x0F, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 6
0x02, 0x00, 0x02, 0x00, 0x02, 0x18, 0x02, 0x1E, 0x82, 0x07, 0xE2, 0x01, 0x7A, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 7
0x18, 0x07, 0xBC, 0x0F, 0xE6, 0x18, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0xE6, 0x18, 0xBC, 0x0F, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 8
0x78, 0x08, 0xFC, 0x18, 0xC6, 0x11, 0x82, 0x11, 0x82, 0x11, 0x82, 0x11, 0xC6, 0x18, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9
0x00, 0x00, 0x00, 0x00, 0x70, 0x1C, 0x70, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x00, 0x00, 0x00, 0x10, 0x70, 0x1C, 0x70, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x40, 0x02, 0x40, 0x02, 0x20, 0x04, 0x20, 0x04, 0x10, 0x08, 0x10, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x00, 0x00, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char =
0x00, 0x00, 0x08, 0x10, 0x08, 0x10, 0x10, 0x08, 0x10, 0x08, 0x20, 0x04, 0x20, 0x04, 0x40, 0x02, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x0C, 0x00, 0x0E, 0x00, 0x02, 0x00, 0x02, 0x1B, 0x82, 0x1B, 0xC6, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ?
0xFC, 0x07, 0x06, 0x0C, 0xF3, 0x19, 0x19, 0x13, 0x0D, 0x16, 0x0D, 0x16, 0x0D, 0x16, 0xFD, 0x17, 0xF9, 0x17, 0x02, 0x14, 0xFC, 0x13, 0x00, 0x00, // Code for char @
0xF8, 0x1F, 0xFC, 0x1F, 0x8E, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x8E, 0x01, 0xFC, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, // Code for char A
0xFE, 0x1F, 0xFE, 0x1F, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x66, 0x10, 0xFC, 0x18, 0x98, 0x0F, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char B
0xF0, 0x03, 0xFC, 0x0F, 0x0C, 0x0C, 0x06, 0x18, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x06, 0x18, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char C
0xFE, 0x1F, 0xFE, 0x1F, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x06, 0x18, 0x04, 0x08, 0x1C, 0x0E, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, // Code for char D
0xFE, 0x1F, 0xFE, 0x1F, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char E
0xFE, 0x1F, 0xFE, 0x1F, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F
0xF0, 0x03, 0xFC, 0x0F, 0x0C, 0x0C, 0x06, 0x18, 0x02, 0x10, 0x02, 0x10, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x8E, 0x1F, 0x00, 0x00, 0x00, 0x00, // Code for char G
0xFE, 0x1F, 0xFE, 0x1F, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, // Code for char H
0x02, 0x10, 0x02, 0x10, 0xFE, 0x1F, 0xFE, 0x1F, 0x02, 0x10, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x00, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x18, 0xFE, 0x0F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0xFE, 0x1F, 0xFE, 0x1F, 0x40, 0x00, 0xE0, 0x00, 0xB0, 0x01, 0x18, 0x03, 0x0C, 0x06, 0x06, 0x0C, 0x02, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, // Code for char K
0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char L
0xFE, 0x1F, 0x0E, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x80, 0x03, 0x00, 0x06, 0x80, 0x03, 0xF0, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0xFE, 0x1F, 0x00, 0x00, // Code for char M
0xFE, 0x1F, 0xFC, 0x1F, 0x18, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x06, 0xFE, 0x0F, 0xFE, 0x1F, 0x00, 0x00, // Code for char N
0xF0, 0x03, 0xFC, 0x0F, 0x0C, 0x0C, 0x06, 0x18, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x06, 0x18, 0x0C, 0x0C, 0xFC, 0x0F, 0xF0, 0x03, 0x00, 0x00, // Code for char O
0xFE, 0x1F, 0xFE, 0x1F, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x01, 0xFC, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char P
0xF0, 0x03, 0xFC, 0x0F, 0x0C, 0x0C, 0x06, 0x18, 0x02, 0x10, 0x02, 0x30, 0x02, 0x32, 0x06, 0x1E, 0x0C, 0x0C, 0xFC, 0x1F, 0xF0, 0x33, 0x00, 0x00, // Code for char Q
0xFE, 0x1F, 0xFE, 0x1F, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x86, 0x03, 0xFC, 0x06, 0x78, 0x0C, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, // Code for char R
0x38, 0x0C, 0x7C, 0x1C, 0xE6, 0x10, 0xC2, 0x10, 0xC2, 0x10, 0xC2, 0x10, 0xC2, 0x19, 0x8E, 0x0F, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char S
0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0xFE, 0x1F, 0xFE, 0x1F, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T
0xFE, 0x07, 0xFE, 0x0F, 0x00, 0x18, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x18, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, // Code for char U
0x0E, 0x00, 0x7E, 0x00, 0xF0, 0x03, 0x80, 0x1F, 0x00, 0x1C, 0x00, 0x1C, 0x80, 0x1F, 0xF0, 0x03, 0x7E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char V
0x7E, 0x00, 0xE0, 0x03, 0x00, 0x0F, 0x00, 0x1C, 0x00, 0x06, 0xE0, 0x03, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x0F, 0xE0, 0x03, 0x7E, 0x00, 0x00, 0x00, // Code for char W
0x06, 0x18, 0x0E, 0x1C, 0x18, 0x06, 0x30, 0x03, 0xE0, 0x01, 0xE0, 0x01, 0x30, 0x03, 0x18, 0x06, 0x0E, 0x1C, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00, // Code for char X
0x06, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xC0, 0x1F, 0xC0, 0x1F, 0xE0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y
0x02, 0x18, 0x02, 0x1C, 0x02, 0x17, 0x82, 0x13, 0xC2, 0x10, 0x72, 0x10, 0x3A, 0x10, 0x0E, 0x10, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Z
0x00, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x00, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x80, 0x01, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash
0x00, 0x00, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x18, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x18, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, // Code for char ^
0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x00, 0x0E, 0x20, 0x1F, 0x30, 0x11, 0x90, 0x10, 0x90, 0x10, 0x90, 0x10, 0xB0, 0x08, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a
0xFF, 0x1F, 0xFF, 0x1F, 0x20, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x18, 0xE0, 0x0F, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b
0xC0, 0x07, 0xE0, 0x0F, 0x30, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c
0xC0, 0x07, 0xE0, 0x0F, 0x30, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x08, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char d
0xC0, 0x07, 0xE0, 0x0F, 0x30, 0x19, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x30, 0x11, 0xE0, 0x19, 0xC0, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e
0x10, 0x00, 0xFE, 0x1F, 0xFF, 0x1F, 0x11, 0x00, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0xF8, 0x00, 0xFC, 0x01, 0x06, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x01, 0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char g
0xFF, 0x1F, 0xFF, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h
0x00, 0x00, 0xF6, 0x1F, 0xF6, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xF6, 0x1F, 0xF6, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x01, 0x80, 0x01, 0xC0, 0x03, 0x60, 0x06, 0x30, 0x0C, 0x10, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k
0x00, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0xF0, 0x1F, 0xF0, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x1F, 0xE0, 0x1F, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0xE0, 0x1F, 0x00, 0x00, // Code for char m
0xF0, 0x1F, 0xF0, 0x1F, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n
0xC0, 0x07, 0xE0, 0x0F, 0x30, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x18, 0xE0, 0x0F, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o
0xFE, 0x1F, 0xFE, 0x1F, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x03, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p
0xF8, 0x00, 0xFC, 0x01, 0x06, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x01, 0xFE, 0x1F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char q
0xF0, 0x1F, 0xF0, 0x1F, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r
0xE0, 0x08, 0xF0, 0x11, 0x90, 0x11, 0x90, 0x13, 0x10, 0x13, 0x10, 0x1F, 0x20, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x10, 0x00, 0xFE, 0x0F, 0xFE, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0xF0, 0x07, 0xF0, 0x0F, 0x00, 0x18, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0xF0, 0x1F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u
0x70, 0x00, 0xF0, 0x03, 0x80, 0x0F, 0x00, 0x1C, 0x00, 0x1C, 0x80, 0x0F, 0xF0, 0x03, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v
0xF0, 0x03, 0xF0, 0x1F, 0x00, 0x1C, 0x80, 0x0F, 0xE0, 0x03, 0xF0, 0x00, 0xE0, 0x03, 0x00, 0x0F, 0x00, 0x0C, 0xF0, 0x1F, 0xF0, 0x1F, 0x00, 0x00, // Code for char w
0x10, 0x10, 0x30, 0x18, 0x60, 0x0C, 0xC0, 0x07, 0x80, 0x03, 0xC0, 0x07, 0x60, 0x0C, 0x30, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x0E, 0x00, 0x7E, 0x10, 0xF0, 0x19, 0x80, 0x1F, 0x80, 0x0F, 0xF0, 0x01, 0x7E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y
0x10, 0x18, 0x10, 0x1C, 0x10, 0x16, 0x10, 0x13, 0x90, 0x11, 0xD0, 0x10, 0x70, 0x10, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x00, 0x00, 0xC0, 0x00, 0xF8, 0x07, 0x3C, 0x0F, 0x06, 0x18, 0x02, 0x10, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x00, 0x00, 0x02, 0x10, 0x02, 0x10, 0x06, 0x18, 0x3C, 0x0F, 0xF8, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x80, 0x03, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x03, 0x80, 0x03, 0xE0, 0x00, 0x00, 0x00, // Code for char ~
0xFE, 0x0F, 0xFE, 0x0F, 0x02, 0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char
};
font4.h
//GLCD FontName : Arial12x16
//GLCD FontSize : 12 x 16
const unsigned char Font_12x16[99][24] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
0x00, 0x00, 0x00, 0x00, 0xFE, 0x6F, 0xFE, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x30, 0x06, 0x30, 0x66, 0x30, 0x7F, 0xF8, 0x1F, 0xFE, 0x06, 0x36, 0x66, 0x30, 0x7F, 0xF8, 0x1F, 0xFE, 0x06, 0x36, 0x06, 0x30, 0x06, 0x00, 0x00, // Code for char #
0x00, 0x00, 0x30, 0x08, 0x78, 0x18, 0xCC, 0x30, 0x84, 0x20, 0xFE, 0x7F, 0x84, 0x21, 0x0C, 0x33, 0x18, 0x1E, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char $
0x1C, 0x40, 0x3E, 0x70, 0x22, 0x38, 0x3E, 0x0E, 0x1C, 0x07, 0xC0, 0x01, 0xE0, 0x38, 0x38, 0x7C, 0x1E, 0x44, 0x06, 0x7C, 0x00, 0x38, 0x00, 0x00, // Code for char %
0x00, 0x1E, 0x38, 0x3F, 0xFC, 0x73, 0xE6, 0x61, 0xC6, 0x61, 0xC6, 0x63, 0x7E, 0x36, 0x3C, 0x3C, 0x00, 0x18, 0x00, 0x3E, 0x00, 0x66, 0x00, 0x00, // Code for char &
0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x00, 0x00, 0xF0, 0x07, 0xFE, 0x3F, 0x07, 0x70, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x00, 0x00, 0x01, 0x40, 0x07, 0x70, 0xFE, 0x3F, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x00, 0x00, 0x48, 0x00, 0x68, 0x00, 0x1E, 0x00, 0x68, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xF8, 0x1F, 0xF8, 0x1F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, // Code for char +
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, // Code for char -
0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x00, 0x60, 0x00, 0x7C, 0xC0, 0x1F, 0xF8, 0x03, 0x3E, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0x00, 0x00, 0xF8, 0x1F, 0xFC, 0x3F, 0x0E, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0xFC, 0x3F, 0xF8, 0x1F, 0x00, 0x00, // Code for char 0
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1
0x00, 0x00, 0x18, 0x60, 0x1C, 0x70, 0x0E, 0x78, 0x06, 0x6C, 0x06, 0x66, 0x06, 0x66, 0x06, 0x63, 0x8E, 0x61, 0xFC, 0x60, 0x78, 0x60, 0x00, 0x00, // Code for char 2
0x00, 0x00, 0x08, 0x18, 0x0C, 0x38, 0x06, 0x70, 0x06, 0x60, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xCE, 0x73, 0xFC, 0x3F, 0x78, 0x1E, 0x00, 0x00, // Code for char 3
0x00, 0x00, 0x00, 0x0F, 0x80, 0x0F, 0xC0, 0x0C, 0x60, 0x0C, 0x30, 0x0C, 0x18, 0x0C, 0xFC, 0x7F, 0xFE, 0x7F, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, // Code for char 4
0x00, 0x00, 0xFE, 0x19, 0xFE, 0x39, 0xC6, 0x70, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0x60, 0xE6, 0x70, 0xC6, 0x3F, 0x86, 0x1F, 0x00, 0x00, // Code for char 5
0x00, 0x00, 0xF8, 0x1F, 0xFC, 0x3F, 0x8E, 0x71, 0xC6, 0x60, 0xC6, 0x60, 0xC6, 0x60, 0xC6, 0x60, 0xC6, 0x71, 0x8C, 0x3F, 0x18, 0x1F, 0x00, 0x00, // Code for char 6
0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x70, 0x06, 0x7C, 0x06, 0x0F, 0xC6, 0x03, 0xF6, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char 7
0x00, 0x00, 0x78, 0x1E, 0xFC, 0x3F, 0xCE, 0x73, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xCE, 0x73, 0xFC, 0x3F, 0x78, 0x1E, 0x00, 0x00, // Code for char 8
0x00, 0x00, 0x78, 0x18, 0xFC, 0x38, 0xCE, 0x71, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xCE, 0x71, 0xFC, 0x3F, 0xF8, 0x1F, 0x00, 0x00, // Code for char 9
0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x00, 0x00, 0x00, 0x00, 0x30, 0x58, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x00, 0x00, 0x00, 0x01, 0x80, 0x03, 0x80, 0x02, 0xC0, 0x06, 0xC0, 0x06, 0x40, 0x04, 0x60, 0x0C, 0x60, 0x0C, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x00, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, // Code for char =
0x00, 0x00, 0x30, 0x18, 0x60, 0x0C, 0x60, 0x0C, 0x40, 0x04, 0xC0, 0x06, 0xC0, 0x06, 0x80, 0x02, 0x80, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x00, 0x00, 0x18, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x06, 0x6E, 0x06, 0x6F, 0x86, 0x03, 0xCE, 0x01, 0xFC, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ?
0xF0, 0x0F, 0x18, 0x18, 0xCC, 0x33, 0x64, 0x26, 0x36, 0x2C, 0x16, 0x2C, 0x16, 0x2E, 0xF6, 0x2B, 0xE6, 0x28, 0x0C, 0x24, 0xF8, 0x13, 0x00, 0x00, // Code for char @
0x00, 0x00, 0xE0, 0x7F, 0xF8, 0x7F, 0x3C, 0x03, 0x0E, 0x03, 0x06, 0x03, 0x06, 0x03, 0x0E, 0x03, 0x3C, 0x03, 0xF8, 0x7F, 0xE0, 0x7F, 0x00, 0x00, // Code for char A
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0xCE, 0x61, 0xFC, 0x73, 0x78, 0x3E, 0x00, 0x1C, 0x00, 0x00, // Code for char B
0x00, 0x00, 0xF0, 0x07, 0xF8, 0x1F, 0x1C, 0x38, 0x0E, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0x18, 0x18, 0x00, 0x00, // Code for char C
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0xF8, 0x1F, 0xE0, 0x0F, 0x00, 0x00, // Code for char D
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x06, 0x60, 0x00, 0x00, // Code for char E
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x06, 0x00, 0x00, 0x00, // Code for char F
0x00, 0x00, 0xF0, 0x0F, 0xF8, 0x3F, 0x3C, 0x78, 0x0E, 0x70, 0x06, 0x70, 0x06, 0x63, 0x06, 0x63, 0x0E, 0x73, 0x1C, 0x77, 0x18, 0x3F, 0x00, 0x00, // Code for char G
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, // Code for char H
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0xFE, 0x3F, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0xE0, 0x01, 0xF0, 0x03, 0x38, 0x07, 0x1C, 0x1E, 0x0E, 0x38, 0x06, 0x70, 0x02, 0x60, 0x00, 0x00, // Code for char K
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, // Code for char L
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xF8, 0x01, 0xC0, 0x07, 0x00, 0x18, 0x00, 0x18, 0xC0, 0x07, 0xF8, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, // Code for char M
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x3C, 0x00, 0x70, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x38, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, // Code for char N
0xF0, 0x0F, 0xFC, 0x3F, 0x1C, 0x38, 0x0E, 0x70, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x1C, 0x38, 0xFC, 0x3F, 0xF0, 0x0F, 0x00, 0x00, // Code for char O
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x8E, 0x03, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, // Code for char P
0x00, 0x00, 0xF8, 0x0F, 0xFC, 0x1F, 0x0E, 0x38, 0x06, 0x30, 0x06, 0x30, 0x06, 0x30, 0x06, 0x34, 0x0E, 0x38, 0xFC, 0x1F, 0xF8, 0x2F, 0x00, 0x00, // Code for char Q
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x86, 0x01, 0x86, 0x01, 0x86, 0x01, 0x86, 0x03, 0x86, 0x0F, 0xCE, 0x1D, 0xFC, 0x78, 0x78, 0x70, 0x00, 0x00, // Code for char R
0x00, 0x00, 0x78, 0x1C, 0xFC, 0x3C, 0xCE, 0x70, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x86, 0x61, 0x8E, 0x73, 0x1C, 0x3F, 0x18, 0x1E, 0x00, 0x00, // Code for char S
0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char T
0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x3F, 0x00, 0x30, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x30, 0xFE, 0x3F, 0xFE, 0x0F, 0x00, 0x00, // Code for char U
0x00, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x1F, 0xC0, 0x07, 0xFE, 0x01, 0x7E, 0x00, 0x00, 0x00, // Code for char V
0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x38, 0x00, 0x0F, 0xC0, 0x01, 0x30, 0x00, 0xC0, 0x01, 0x00, 0x0F, 0x00, 0x38, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, // Code for char W
0x00, 0x00, 0x02, 0x40, 0x0E, 0x70, 0x3C, 0x3C, 0x70, 0x0E, 0xC0, 0x03, 0xC0, 0x03, 0x70, 0x0E, 0x3C, 0x3C, 0x0E, 0x70, 0x02, 0x40, 0x00, 0x00, // Code for char X
0x00, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xE0, 0x00, 0xC0, 0x7F, 0xC0, 0x7F, 0x60, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char Y
0x00, 0x00, 0x06, 0x70, 0x06, 0x78, 0x06, 0x6E, 0x06, 0x67, 0x86, 0x61, 0xE6, 0x60, 0x76, 0x60, 0x1E, 0x60, 0x0E, 0x60, 0x06, 0x60, 0x00, 0x00, // Code for char Z
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, // Code for char BackSlash
0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x00, 0x00, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x06, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^
0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x00, 0x00, 0xC0, 0x3C, 0xC0, 0x7E, 0x60, 0x66, 0x60, 0x66, 0x60, 0x63, 0x60, 0x33, 0xE0, 0x3F, 0xC0, 0x7F, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, // Code for char a
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xC0, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0x70, 0xC0, 0x3F, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, // Code for char b
0x00, 0x00, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x70, 0x60, 0x60, 0x60, 0x60, 0xE0, 0x70, 0xC0, 0x30, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c
0x00, 0x00, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x30, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, // Code for char d
0x00, 0x00, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x76, 0x60, 0x66, 0x60, 0x66, 0x60, 0x66, 0xE0, 0x66, 0xC0, 0x37, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, // Code for char e
0x00, 0x00, 0x60, 0x00, 0xFC, 0x7F, 0xFE, 0x7F, 0x66, 0x00, 0x66, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0x00, 0x00, 0xF8, 0x38, 0xFC, 0x71, 0x8E, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x06, 0x63, 0x0E, 0x73, 0xFC, 0x3F, 0xF8, 0x1F, 0x00, 0x00, // Code for char g
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x7F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF6, 0x7F, 0xF6, 0x7F, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x20, 0x60, 0xE6, 0x7F, 0xE6, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x1F, 0xE0, 0x7C, 0x60, 0x70, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0x00, 0x00, 0xC0, 0x7F, 0xE0, 0x7F, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x3F, 0x80, 0x3F, 0xC0, 0x01, 0xE0, 0x00, 0xE0, 0x7F, 0xC0, 0x7F, 0x00, 0x00, // Code for char m
0x00, 0x00, 0xE0, 0x7F, 0xE0, 0x7F, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x7F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n
0x00, 0x00, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0x70, 0xC0, 0x3F, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, // Code for char o
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x8C, 0x01, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x8E, 0x03, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p
0x00, 0x00, 0xF8, 0x00, 0xFC, 0x01, 0x8E, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x8C, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, // Code for char q
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x40, 0xC0, 0x7F, 0xC0, 0x7F, 0x60, 0x40, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x00, 0x00, // Code for char r
0x00, 0x00, 0xC0, 0x11, 0xE0, 0x33, 0x60, 0x63, 0x60, 0x66, 0x60, 0x66, 0x60, 0x6C, 0xC0, 0x7C, 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x00, 0x00, 0x60, 0x00, 0xFC, 0x3F, 0xFC, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0x00, 0x00, 0xE0, 0x3F, 0xE0, 0x7F, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x30, 0xE0, 0x7F, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u
0x00, 0x00, 0x60, 0x00, 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x70, 0x00, 0x3C, 0x80, 0x0F, 0xE0, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v
0x00, 0x00, 0xE0, 0x3F, 0x00, 0x60, 0x00, 0x70, 0x80, 0x3F, 0xE0, 0x00, 0xE0, 0x00, 0x80, 0x1F, 0x00, 0x70, 0x00, 0x60, 0xE0, 0x3F, 0x00, 0x00, // Code for char w
0x00, 0x00, 0x20, 0x40, 0x60, 0x60, 0xC0, 0x39, 0x80, 0x1F, 0x00, 0x06, 0x80, 0x1F, 0xC0, 0x39, 0x60, 0x60, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x40, 0xC0, 0x63, 0x00, 0x7F, 0x80, 0x1F, 0xF0, 0x03, 0x7C, 0x00, 0x0C, 0x00, 0x00, 0x00, // Code for char y
0x00, 0x00, 0x00, 0x70, 0x60, 0x78, 0x60, 0x7C, 0x60, 0x6E, 0x60, 0x66, 0x60, 0x63, 0xE0, 0x63, 0xE0, 0x61, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 0xFC, 0x3F, 0x7E, 0x7E, 0x06, 0x60, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x00, 0x00, 0x06, 0x60, 0x06, 0x60, 0x7E, 0x7E, 0xFC, 0x3F, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char ~
0x00, 0x00, 0xFC, 0x3F, 0x04, 0x20, 0x04, 0x20, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0xF0, 0x3F, 0xF0, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x06, 0x60, 0x06, 0x60, 0xF0, 0x7F, 0xF0, 0x3F, 0x00, 0x00, // Code for char Ü
0xC0, 0x1F, 0xE0, 0x3F, 0x76, 0x70, 0x36, 0x60, 0x30, 0x60, 0x30, 0x60, 0x30, 0x60, 0x36, 0x60, 0x76, 0x70, 0xE0, 0x3F, 0xC0, 0x1F, 0x00, 0x00, // Code for char Ö
0x00, 0x00, 0x38, 0x0C, 0x7C, 0x18, 0xEE, 0x18, 0xC6, 0x58, 0xC6, 0x78, 0xC6, 0x78, 0xC6, 0x18, 0xC6, 0x1D, 0x8C, 0x0F, 0x08, 0x07, 0x00, 0x00 // Code for char Ş
};
Merhabalar,
Asagidaki degisiklikleri yapiyorum ancak 1 den fazla panel eklesemde sonuç alamadim. Baska bir degisikligi ihtiyaç var mi ? Kullanmak istedigim yapi 64x16 matrix olacak sekilde yani yan yana iki panel.
yardimci olursaniz sevinirim.
unsigned int8 display_ram[32][4];
void write_data(unsigned int8 row_adr)
{
int8 i=0,j=0;
int8 k=7;
while(k!=255) // Bu Döngü ileriye dogru sayarsa panel sagdan
{j=31-k; // Sola Dogru yüklenir.
for (i=0;i<4;i++) // Satirlar dolduruluyor..
{
spi_write(display_ram[j][row_adr]);
j-=8;
}
k–;
}
output_high(LATCH);
delay_cycles(2);
output_low(LATCH);
}
@e135193 üstad ilgili konular burada açıklayıcı şekilde belirtilmiştir.
https://www.picproje.org/index.php/topic,69924.msg538544.html#msg538544
@gokhangokcen eline sağlık. Güzel çalışma olmuş.
Çok teşekkürler. Favorilerime ekledim.
eski mesajımdaki düzenle butonu kaybolmuş.Yazmış olduğum kod ile ilgili "amatörce" videomu sizlerle paylaşmak istedim.Video editlemeyi bilmediğim için arkadan müzik vs. sesleri falan geliyor kusura bakmayın.
Projenin ortalarına doğru çektiğim video.
Gökhan Hocam,
Mucit23'ün kodunun üzerine geliştirme yaptığınızı söylemişsiniz. 8x8 fontunu kullanarak alt alta iki satır yazmak için ne gibi bir ayar yapmak gerekiyor ?
Ekran izin verilen boyuttan sonra otomatik alt satıra geçiyor.O şekilde ayarlanmış bir kütüphane idi. Yani örneğin 16x32 bir panelde çalışıyorsanız 8x5 font kullandığınızda ekrana maksimum 5 karakter sığıyor ve 6. karakteri ilave ettiğinizde otomatikman alt satıra iniyor.
Ben
@Mucit23'ün en yeni kütüphanesinde 8x8 font kullandığımda, yaptığım denemede alt satıra geçmiyor. problem 8x8 font kaynaklı olabilir mi ?
Ayrıca proje kodlarını ve şemasını paylaşmanız mümkün mü ?
proje kodları yukarıda zaten.Tamamı var hatta eksiksiz bir vaziyette. (sadece kütüphane 18f4620.h math.h vs. gibi derleyicinin içinde olan kodlar yok)