- 16x2 LCD Ekranın Çalışması
- STM8 Mikrodenetleyicili Arayüz LCD'sine Devre Şeması
- STM8 LCD Kitaplığı - STM8S103F3P6 için Başlık Dosyası
- STM8S Mikrodenetleyici için LCD Programı
- LCD'li STM8 - Çalışıyor
16x2 Alfanümerik LCD ekran, hobiler ve meraklılar arasında en yaygın olarak kullanılan ekrandır. Ekran, kullanıcıya temel bilgileri görüntülemek istediğinizde çok kullanışlıdır ve ayrıca kodumuzun test edilmesine veya hata ayıklanmasına yardımcı olabilir. Bu özel 16x2 LCD modülü kolayca temin edilebilir ve uzun süredir popülerdir. Bağlantılı makalede 16x2 LCD modülünün temelleri hakkında daha fazla bilgi edinebilirsiniz.
STM8 Mikrodenetleyici eğitimleri serimize devam etmek için, bu eğitimde, bir LCD ile STM8 Mikroişlemci arasında nasıl arabirim kurulacağını öğreneceğiz. Daha önce 16x2 LCD'yi diğer birçok mikrodenetleyiciyle de arayüzledik, öğreticiler aşağıda listelenmiştir ve ilgilenirseniz kontrol edebilirsiniz.
STM8'de yeniyseniz, kontrol panosu ve programlama ortamının temellerini anlamak için STM8 Mikroişlemci makalesine başlama konusuna göz atın. Bu eğiticide temel bilgileri ele almayacağız.
16x2 LCD Ekranın Çalışması
Adından da anlaşılacağı gibi, 16x2 LCD 16 Sütun ve 2 Satır olacaktır. Yani toplamda, bu ekranda 32 karakter görüntüleyebileceğiz ve bu karakterler alfabe veya sayılar veya hatta semboller olabilir. Bu eğitimde kullandığımız basit bir 16x2 LCD pin çıkışı aşağıda gösterilmiştir.
Gördüğünüz gibi, ekranın 16 pini vardır ve aşağıdaki tabloda gösterildiği gibi beş kategoriye, Güç Pimleri, kontrast pini, Kontrol Pimleri, Veri pimleri ve Arka Işık pimlerine ayırabiliriz. Bu eğitimin devre şemasını tartıştığımızda her bir pinin ayrıntılarına gireceğiz.
Kategori | PIN NO. | Pin Adı | Fonksiyon |
Güç Pimleri | 1 | VSS | Zemin Pimi, Toprağa bağlı |
2 | VDD veya Vcc | Gerilim Pimi + 5V | |
Kontrast Pimi | 3 | V0 veya VEE | Kontrast Ayarı, değişken bir dirençle Vcc'ye bağlanır. |
Kontrol Pimleri | 4 | RS | Kayıt Seçimi Pin, RS = 0 Komut modu, RS = 1 Veri modu |
5 | RW | Okuma / Yazma pimi, RW = 0 Yazma modu, RW = 1 Okuma modu | |
6 | E | LCD'yi etkinleştirmek için yüksek ila düşük darbe gerekir | |
Veri Pinleri | 7-14 | D0-D7 | Veri Pinleri, LCD'de gösterilecek Verileri veya komut talimatlarını saklar |
Arka Işık Pimleri | 15 | LED + veya A | Arka Işık + 5V'ye güç vermek için |
16 | LED- veya K | Arka Işık Zemin |
LCD'nin arka tarafında, aşağıdaki resimde gösterildiği gibi, içinde HD44780 LCD sürücü IC (kırmızı daire içine alınmış) bulunan iki siyah nokta göreceksiniz. Mikrodenetleyicimiz bu IC ile iletişim kurmalı ve bu da LCD'de neyin görüntüleneceğini kontrol edecektir. Tüm bunların tam olarak nasıl çalıştığını merak ediyorsanız, LCD'nin nasıl çalıştığını ayrıntılı olarak tartıştığımız 16x2 LCD ekranın çalışmasını kontrol etmelisiniz.
Bu eğitimde, basit LCD_print _char ve LCD_print_string komutlarını kullanarak 16x2 LCD ekranda alfamerik karakterleri (alfabe ve sayılar) görüntülemek için devre şemasını ve kodunu tartışacağız. Bu komutlar, başlık dosyamızı ekledikten sonra programda doğrudan kullanılabilir. Başlık dosyası, sizin için çoğu şeyle ilgilenir, bu nedenle ekranın veya HD44780 sürücü IC'nin nasıl çalıştığını bilmek zorunlu değildir.
STM8 Mikrodenetleyicili Arayüz LCD'sine Devre Şeması
Tam STM8 LCD Devresi aşağıdaki görüntüde bulunabilir. Gördüğünüz gibi LCD'li STM8S103F3P6 Kontrolör bağlantısı çok basit, LCD ekranımız doğrudan kartımıza bağlı ve ST-bağlantısı da panoyu programlamak için bağlı.
Vss ve Vcc güç pinleri STM8S kartındaki 5V pinine bağlıdır, LCD'nin çalışma voltajının 5V olduğunu ve 3.3V ile çalışmak üzere bağlandığını unutmayın. Dolayısıyla, STM8S103F3P6 Mikrodenetleyicinin 3,3V'de çalışmasına rağmen, LCD için 5V beslemesine sahip olmak zorunlu olsa da, bunu bir şarj denetleyici IC kullanarak önleyebilirsiniz, ancak bunu bu eğitimde tartışmayacağız.
Daha sonra, LCD'nin kontrastını ayarlamak için kullanılan kontrast pinimiz var, kontrastı kontrol edebilmemiz için potansiyometreye bağladık. 10k'lik bir pot kullandık, ancak diğer yakın değerleri de kullanabilirsiniz, pot, kontrast pimine 0-5 V sağlamak için potansiyel bir bölücü görevi görür, tipik olarak makul kontrast için yaklaşık 2.2V sağlamak için doğrudan bir direnç de kullanabilirsiniz. değer. Ardından sıfırlama (RS), Okuma / Yazma (RW) ve Etkinleştirme (E) pinlerine sahibiz. Okuma-yazma pimi topraklanmıştır çünkü LCD'den hiçbir şey okumayacağız, sadece yazma işlemlerini gerçekleştireceğiz. Diğer iki kontrol pini Rs ve E, sırasıyla PA1 ve PA2 pimlerine bağlanır.
Sonra DB0'dan DB7'ye veri pinlerine sahibiz. 16x2 LCD iki modda çalışabilir, biri LCD'deki tüm 8 veri pinini (DB0-DB7) kullanmamız gereken 8 bitlik bir işlem modu, diğeri ise yalnızca 4'e ihtiyacımız olan 4 bitlik işlem modudur. veri pinleri (DB4-DB7). 4 bitlik mod, denetleyiciden daha az GPIO pini gerektirdiğinden yaygın olarak kullanılır, bu nedenle bu eğiticide 4 bit modu da kullandık ve yalnızca DB4, DB5, DB6 ve DB7 pinlerini PD1, PD2, PD3 pinlerine bağladık ve PD4 sırasıyla.
Son iki pin BLA ve BLK, dahili arka ışık LED'ine güç sağlamak için kullanılır, akım sınırlama direnci olarak 560 ohm'luk bir direnç kullandık. ST-Link programcısı, önceki eğitimimizde olduğu gibi her zaman olduğu gibi bağlanmıştır. Tam bağlantıyı devre tahtasında yaptım ve kurulumum aşağıdaki resimde gösterildiği gibi görünüyor.
STM8 LCD Kitaplığı - STM8S103F3P6 için Başlık Dosyası
Devre şemasına geçmeden önce, aşağıdaki bağlantıyı kullanarak GitHub'dan STM8 LCD başlık dosyasını alalım.
STM8S 16x2 LCD başlık dosyası
Deponun tamamını indirebilir ve stm8s103_LCD_16x2.h dosyasını alabilir veya yukarıdaki bağlantıdan kodu basitleştirebilirsiniz. Projeyi ayarlarken, bu başlık dosyasıyla birlikte tüm gerekli başlık dosyalarını inc dizinine eklediğinizden emin olun.
Başlık dosyalarını nasıl ekleyeceğinizden ve programı nasıl derleyeceğinizden emin değilseniz, bu sayfanın altındaki videoyu izleyin. Ve başlık dosyasındaki kodun nasıl çalıştığını merak ediyorsanız, bir LCD eğitimiyle PIC'e göz atabilirsiniz. Bu projede kullanılan başlık dosyası orada anlatılana çok benziyor, bu yüzden bunun ayrıntılarına girmeyeceğiz.
STM8S Mikrodenetleyici için LCD Programı
Gösteri için, STM8S kontrol cihazımızı "Devre Özeti" gibi basit bir dizi gösterecek şekilde programlayacağız ve ardından ikinci satırda her saniye için bir "Test" değeri artıracağız. Programın tamamı bu sayfanın alt kısmında bulunabilir. Açıklama aşağıdaki gibidir.
Programımıza her zaman olduğu gibi pinleri tanımlayarak ve gerekli başlık dosyalarını ekleyerek başlıyoruz. Yukarıdaki açıklanan devre şeması olarak, bağlı olan LCD_RS biz olarak tanımladığımız böylece PA1 için LCD_RS GPIOA, GPIO_PIN_1. Benzer şekilde, diğer pinler için de aynısını yaptık. Farklı bir devre izliyorlarsa, bu değerleri uygun şekilde değiştirdiğinizden emin olun.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3 #define LCD_DB6_x2.
Daha sonra ana programımızın içinde, bu örnek kod için gerekli olan değişkenleri tanımladık. Sıfıra başlatılan test_var adında bir test değişkenimiz var, değişkeni artırıp LCD'de göstereceğiz. D1'den d4'e kadar olan karakterler test değişkeninin 4 hanesini temsil eder çünkü LCD'miz int değerini doğrudan gösteremez, onları karakterlere dönüştürmemiz gerekir.
// Değişken bildirimleri int test_var = 0; char d4, d3, d2, d1;
LCD_Begin () fonksiyonu LCD başlatmak için kullanılır. Bu işlev, gerekli tüm GPIO pinlerini başlatacak ve ayrıca LCD'yi 16x2 LCD moduna ayarlayacaktır. Ardından, LCD'deki tüm değerleri temizlemek için kullanılan LCD_Clear () işlevine sahibiz , bu LCD'deki her şeyi silecek, böylece yeni değerler yazmak temiz olacak. Ardından , x ve y'nin yeni karakterimizi yazmamız gereken konumlar olduğu LCD_Set_Cursor (x, y) fonksiyonumuz var. Örneğin, (1,1) ilk satır ve ilk Sütun anlamına gelir, benzer şekilde (2,12) aynı şekilde ikinci satır 12 sütun anlamına gelir. Daha önce tartıştığımız gibi burada 2 satır ve 16 sütunumuz olduğunu unutmayın.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Şimdi, LCD ayarlandı, temizlendi ve imleç yerinde. Sonraki şey ekrana bir şey yazdırmak. Biz kullanabilirsiniz LCD_Print_String (“Örnek dize”) LCD ve bir dize yazdırmak için LCD_Print_Char (a) LCD bir karakter değerini yazdırmak için. Buradaki programımızda “STM8S103F3P3 LCD” yazdırdık ve aşağıdaki kodu kullanarak 5 saniyelik bir gecikme yarattık.
Lcd_Print_String ("STM8S103F3P3 LCD"); gecikme_ms (5000);
5 saniyelik gecikmeden sonra, LCD'yi tekrar temizleriz ve ilk satırda “Devre Özeti” ve ikinci satırda “Test:” I görüntüleriz.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Devre Özeti"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
İçinde ise döngü, biz tamsayı değişken üzerinde değer bölecek test_var basit bölünme ve modül operatörleri kullanarak LCD ekranda görüntülenebilen böylece bireysel karakterlerin içine. ASCII değerini karaktere dönüştürmek için '0' da ekledik.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Sonra imleci (2,6) olarak ayarladık çünkü ikinci satıra 6 karakter olan "Test:" yazmıştık. Üzerine yazarsak, mevcut karakter LCD'de yeni bir karakterle değiştirilecektir. Ayrıca 1 saniyelik bir gecikme ekledik ve değişkeni artırdık.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); gecikme_ms (1000); test_var ++;
LCD'li STM8 - Çalışıyor
Programımızı test etmek için, kodu kontrolörümüze yüklemeniz ve mikro USB bağlantı noktasıyla çalıştırmanız yeterlidir. LCD'nin çalışması için 5V'ye ihtiyaç duyduğunu ve bu nedenle panele USB bağlantı noktasından güç sağlamanın zorunlu olduğunu unutmayın. Daha önce doğrudan ST-link'ten güç verdik çünkü 5V beslemesine ihtiyacımız yoktu.
Gördüğünüz gibi, LCD beklendiği gibi çalışıyor ve test değişkeni değeri yaklaşık olarak her saniye artıyor. Ayrıca, zamanlayıcıları kullanmadığımızı ve bu gecikmeyi oluşturmak için yalnızca gecikme işlevini kullandığımızı unutmayın, bu nedenle gecikme süresinin doğru olmasını beklemeyin, zamanlayıcıları daha sonra bu amaç için başka bir öğreticide kullanacağız.
Projenin tam çalışması aşağıda bağlantısı verilen videoda bulunabilir. Umarım öğreticiden keyif almışsınızdır ve yararlı bir şeyler öğrenmişsinizdir. Herhangi bir sorunuz varsa, yorum bölümünde bırakın veya diğer teknik sorular için forumlarımızı kullanın.