Alfanumerik LCD Üzerinde Büyük Font Uygulaması

Bazen bir uygulama yapınca farklı olsun istersiniz değil mi ? Bende bu şekilde düşünerek 16×2 karakter LCD kullanmam gereken özel projelerde büyük font kullanma yolunu araştırdım ve Jalv2 ile yazdığım uygulamalarda kullanmak üzere bir kaç fonksiyon yazdım. İnternette araştırırsanız bir çok farklı dilde örnekler bulabilirsiniz. Aynı zamanda 16×4 gibi diğer alfanumerik LCD lerde de kullanılabilir.
Bu uygulamayı 2013 yılında yapmıştım. O zamandan beri çok çok kullanmadım ama son projem olan Unoputer için kullanacağım. Daha önce farklı sitelerde paylaşmıştım. Belki görmüş olabilirsiniz.
Bu yazıda Jalv2 ile nasıl kullanabileceğinize değineceğim. Örnek video ve devre şemasını yazının devamında bulabilirsiniz.
Herşeyden önce demo uygulamamız için basit bir şema hazırlamalıyız. Bu sayede Denemelerinizi yapabilirsiniz.
PIC16F628A kullanarak 16×2 LCD sürmemiz gerekmektedir. Kodumuzu bu şemaya göre yazacağız.
Öncelikle özel karakter oluşturmak için karakter parçacıklarını tanımlamalı ve LCD ye yüklenmelidir.
LCD tanımlaması bize 8 adet tanımlama yapmamıza izin veriyor. Öncelikle karakter oluşturma işi yapan bir program ile aşağıdaki karakter parçacıklarını oluşturuyoruz.
Eğer estetik görüntüye ihtiyaç yoksa K7 karakterini K0,K1,K2,K3 yerinde kullanabiliriz. Hatta LCD nin içerisinde hazır olarak K7 karakterine karşılık gelebilecek karakter var. O zaman K4,K5,K6 tanımlaması yeterlidir. Bu seferlik tüm karakterleri tanıtıp uygulamayı yapalım.
Uygulamaları bir dizi olarak tanıtıp daha sonra LCD ye aktarmamız gerekiyor.
Karaktercikleri tanımlarken 5×8 için her satır için 8 adet tanımlama yapmak gerek. Örneğin K0 için {7,15,31,31,31,31,31,31} tanımlaması yapılmalıdır.
Yukarıda gördüğünüz ekran görüntüsü LCD KarakterMatik – DC uygulaması ile alınmıştır. Benzer özellikte başka bir uygulama ile de alabilirsiniz.
Sırada oluşturulan özel karakterleri LCD nin RAM’ine yüklemek var. Bunun için kullandığınız dilin LCD kullanım ile ilgili kütüphanesi yada özel komutu varsa kullanmanız gerekecek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
-- ----------------------------------------------------------------------------- -- Özel kullanılacak Karakterleri parçalarını Tanımlama -- ----------------------------------------------------------------------------- const byte K0[] = {7,15,31,31,31,31,31,31} const byte K1[] = {28,30,31,31,31,31,31,31} const byte K2[] = {31,31,31,31,31,31,30,28} const byte K3[] = {31,31,31,31,31,31,15,7} const byte K4[] = {31,31,31,0,0,0,0,0} const byte K5[] = {0,0,0,0,0,31,31,31} const byte K6[] = {31,31,31,0,0,0,31,31} const byte K7[] = {31,31,31,31,31,31,31,31} -- ----------------------------------------------------------------------------- -- Karakter Parçaları LCD'nin RAM hafızasına yükleniyor. -- ----------------------------------------------------------------------------- lcd_define(0,K0) lcd_define(1,K1) lcd_define(2,K2) lcd_define(3,K3) lcd_define(4,K4) lcd_define(5,K5) lcd_define(6,K6) lcd_define(7,K7) |
Oluşturduğumuz karaktercikleri bir araya getirerek istediğimiz karakterleri oluşturabiliriz. Bu işlemi aşağıdaki yordam sayesinde yapabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
-- ----------------------------------------------------------------------------- -- Rakamları Oluşturmak için Gerekli Alt Program -- -- Line : Yazının Hangi Satırdan Başlaması gerektiği -- pos : Yazının Hangi Sutundan Başlayacağı -- rakam: Yazdırılması istenen Numara -- -- ----------------------------------------------------------------------------- Procedure Number_Font(byte in line,byte in pos,byte in karakter) is pos = pos * 4 -- Karakter Sirası = 0,1,2,3 case karakter of 0 : block -- 0 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 1: block -- 1 rakamı yazdır lcd_cursor_position(line,pos) lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 7 lcd = 5 end block 2: block -- 2 rakamı yazdır lcd_cursor_position(line,pos) lcd = 6 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 5 end block 3: block -- 3 rakamı yazdır lcd_cursor_position(line,pos) lcd = 6 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 5 lcd = 2 end block 4: block -- 4 rakamı yazdır lcd_cursor_position(line,pos) lcd = 3 lcd = 5 lcd = 7 lcd_cursor_position(line+1,pos+2) lcd = 7 end block 5: block -- 5 rakamı yazdır lcd_cursor_position(line,pos) lcd = 3 lcd = 6 lcd = 6 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 5 lcd = 2 end block 6: block -- 6 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 6 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 7: block -- 7 rakamı yazdır lcd_cursor_position(line,pos) lcd = 4 lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos+2) lcd = 7 end block 8: block -- 8 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 9: block -- 9 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos+2)lcd = 7 end block end case end procedure |
Artık gerekli tanımlamalar ve karakter oluşturma alt programı şekillendiğine göre demo uygulamamızı derleyip deneme yapabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
-- ----------------------------------------------------------------------------- -- Program : 16X2 Karakter Lcd ile Büyük Font Kullanımı -- Author : Sercan TEK - www.sercanca.com -- Tarih : 2017 Ocak -- chip : 16F628 -- Compiler : jalv24q6 (compiled Oct 25 2016) -- ----------------------------------------------------------------------------- include 16F628a pragma target clock 4_000_000 -- Kristal 4 MHZ pragma target osc INTOSC_NOCLKOUT -- Dahili OSC pragma target WDT DISABLED -- WDT Kapalı pragma target PWRTE ENABLED -- power up timer Açık pragma target MCLR INTERNAL -- mclr pini devre dışı pragma target LVP DISABLED -- Düşük Voltajlı Programalama Kapalı enable_digital_io() -- Tüm pinler Digital Giriş Çıkış -- ----------------------------------------------------------------------------- -- LCD Tanımlamaları -- ----------------------------------------------------------------------------- alias lcd_rs is pin_a1 -- LCD RS pini alias lcd_en is pin_a0 -- LCD EN pini alias lcd_d4 is pin_b7 -- LCD D4 pini alias lcd_d5 is pin_b6 -- LCD D5 pini alias lcd_d6 is pin_b5 -- LCD D6 pini alias lcd_d7 is pin_b4 -- LCD D7 pini alias lcd_rs_direction is pin_a1_direction -- RS pini takma isim alias lcd_en_direction is pin_a0_direction -- EN pini takma isim const byte LCD_ROWS = 2 -- LCD 2 satır const byte LCD_CHARS = 16 -- LCD 16 sutun lcd_rs_direction = output -- RS pini çıkış lcd_en_direction = output -- EN pini çıkış pin_b7_direction = output -- B7 pini çıkış pin_b6_direction = output -- B6 pini çıkış pin_b5_direction = output -- B5 pini çıkış pin_b4_direction = output -- B4 pini çıkış include lcd_hd44780_4 include print -- ----------------------------------------------------------------------------- -- İlk ayarlar -- ----------------------------------------------------------------------------- lcd_init() -- LCD başlatılıypr const byte Yazi1[] = "Jalv2 Buyuk Font" const byte Yazi2[] = " olusturma " const byte Yazi3[] = "Jalv2" const byte Yazi4[] = "Big Font" -- ----------------------------------------------------------------------------- -- Özel kullanılacak Karakterleri parçalarını Tanımlama -- ----------------------------------------------------------------------------- const byte K0[] = {7,15,31,31,31,31,31,31} const byte K1[] = {28,30,31,31,31,31,31,31} const byte K2[] = {31,31,31,31,31,31,30,28} const byte K3[] = {31,31,31,31,31,31,15,7} const byte K4[] = {31,31,31,0,0,0,0,0} const byte K5[] = {0,0,0,0,0,31,31,31} const byte K6[] = {31,31,31,0,0,0,31,31} const byte K7[] = {31,31,31,31,31,31,31,31} -- ----------------------------------------------------------------------------- -- Karakter Parçaları LCD'nin RAM hafızasına yükleniyor. -- ----------------------------------------------------------------------------- lcd_define(0,K0) lcd_define(1,K1) lcd_define(2,K2) lcd_define(3,K3) lcd_define(4,K4) lcd_define(5,K5) lcd_define(6,K6) lcd_define(7,K7) -- ----------------------------------------------------------------------------- -- Rakamları Oluşturmak için Gerekli Alt Program -- -- Line : Yazının Hangi Satırdan Başlaması gerektiği -- pos : Yazının Hangi Sutundan Başlayacağı -- rakam: Yazdırılması istenen Numara -- -- ----------------------------------------------------------------------------- Procedure Number_Font(byte in line,byte in pos,byte in karakter) is pos = pos * 4 -- Karakter Sirası = 0,1,2,3 case karakter of 0 : block -- 0 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 1: block -- 1 rakamı yazdır lcd_cursor_position(line,pos) lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 7 lcd = 5 end block 2: block -- 2 rakamı yazdır lcd_cursor_position(line,pos) lcd = 6 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 5 end block 3: block -- 3 rakamı yazdır lcd_cursor_position(line,pos) lcd = 6 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 5 lcd = 2 end block 4: block -- 4 rakamı yazdır lcd_cursor_position(line,pos) lcd = 3 lcd = 5 lcd = 7 lcd_cursor_position(line+1,pos+2) lcd = 7 end block 5: block -- 5 rakamı yazdır lcd_cursor_position(line,pos) lcd = 3 lcd = 6 lcd = 6 lcd_cursor_position(line+1,pos) lcd = 5 lcd = 5 lcd = 2 end block 6: block -- 6 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 6 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 7: block -- 7 rakamı yazdır lcd_cursor_position(line,pos) lcd = 4 lcd = 4 lcd = 1 lcd_cursor_position(line+1,pos+2) lcd = 7 end block 8: block -- 8 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos) lcd = 3 lcd = 5 lcd = 2 end block 9: block -- 9 rakamı yazdır lcd_cursor_position(line,pos) lcd = 0 lcd = 6 lcd = 1 lcd_cursor_position(line+1,pos+2)lcd = 7 end block end case end procedure var byte sayac,sayac2,temp=0 var byte sira = 0 forever loop -- Demo lcd_clear_screen lcd_cursor_position(0,0) print_string(lcd,yazi1) lcd_cursor_position(1,0) print_string(lcd,yazi2) _usec_delay(1500000) lcd_clear_screen temp = 0 for 3 using sayac2 loop for 4 using sayac loop number_font(0,sira,sayac+temp) sira = sira + 1 end loop if sayac2 == 2 then lcd_cursor_position(0,8) print_string(lcd,yazi3) lcd_cursor_position(1,8) print_string(lcd,yazi4) end if _usec_delay(1500000) temp = temp + 4 lcd_clear_screen sira = 0 end loop end loop |
Uygulama videosu
Demo uygulamasının dosyalarını buradan indirebilirsiniz.
16×2 Karakter LCD Büyük Font uygulaması
Bu Uygulamada Neler Öğrenebiliriz ?
- Jalv2 dilinin temel kullanımı
- Jalv2 dilinde 16×2 alfanumerik LCD kullanımı
- Jalv2 dilinde PIC16F628A kullanımı ve sigorta ayarları
- Jalv2 dilinde LCD için özel karakter tanımlanması
- Jalv2 dilinde LCD’de büyük font kullanımı
Başka bir yazıda görüşmek üzere,
Sercan TEK
Sercan bey .ben teybi direk kontaga baglayabilirmiyim.nasil bi yol izlemem lazim
kontak ile teyp arasına bir adet röle koymalısınız. kontak röleyi etkin yapacak. rölede teybi.
Ama yeni teyplerde birde kontak kablosu bulunuyor. Eğer kontak kablosu varsa direkt kontağa kablosuna bağlayabilirsiniz.
Tesk ederim