Bir kaç günder D ile LCD panel uygulamasını nasıl yapayım diye düşünüyorum. Ama işin içinden çıkamadım :rolleyes:
Kodun en son hali şu şekilde:
import std.stdio;
import giriscikis;
import core.thread;
version (linux)
{
/*
paralel portun adresi
*/
const uint adres = 0x0378;
const uint kontrol = 0x037A;
/*
göndereceğimiz veri
*/
ubyte veri = 0b0000;
const ubyte Komut = 0b1000; // komut
const ubyte Veri = 0b0000; // veri
const ubyte E1 = 0b0000; /+ veri +/
const ubyte E0 = 0b0001; /+ gönder +/
const ubyte EkranıTemizle = 0b00000001;
const ubyte PaneliAç = 0b00001100;
}
void main()
{
version(linux)
{
/*
Linux'ta paralel porta erişmek için yönetici haklarını alıyoruz
*/
erişimhakları(adres, 1, 1);
erişimhakları(kontrol, 1, 1);
}
version (Windows)
{
/*
paralel portun adresi
*/
short adres = 0x0378;
/*
göndereceğimiz veri
*/
short veri = 0b1111;
}
komutGönder(EkranıTemizle);
}
void komutGönder(ubyte veri)
{
yaz(kontrol, Komut);
yaz(kontrol, E1);
yaz(adres, veri);
yaz(kontrol, E0);
Thread.sleep(dur!"usecs"(40));
}
Şimdi burada ilk sormak istediğim işletim sistemine bağlı olan kısımları ister istemez global değişken yaptım. Bu kısımları kod tekrarı olmaması açısından tek bir kaynak dosyasına toplasam mı.
Bir diğeri de sizin de dikkat edeceğiniz gibi kodun okunabilir olması adına Komut, Veri, EkranıTemizle gibi bir sürü ek değişken kullanmak zorunda kaldım. Yoksa basitçe bu mesajdaki gibi (http://ddili.org/forum/thread/678) sayısal değerler kullanıp bu değişkenlerden kurtulsamıydım.
Şimdi LCD panele komut ya da veri gönderme şu şekilde oluyor. 'RS' 0 iken komut 'RS' 1 iken veri göndereceğimizi belirtiyoruz. 'Enable '(LCD aktif) bitini 1'den 0 yaptığımız zaman da veri ya da komut gönderiliyor.
Şu şekilde göstermek gerekirse
RS . . E
1 0 0 0
Örneğin burada RS0 yapmak için donanım tarafından terslendiği için 1000 göndermek gerekiyor.
Bir de bu şekilde kodu daha okunabilir yapmak için değişken kullandığımızda bir sürü birbirine bağlı değişken de var. Örneğin
0 0 0 0 0 1 P İ Y
Yukarıda paneli aç değişkeni 00001100 şeklinde tanımlı. Ama kullanıcı örneğin aynı zamanda paneli aç, imleci aç, yanıp sönmeyi aç demek isterse 00001111 şeklinde komut gönderebilir. Yani değişkenler birbirine bağımlı.
Kısacası yazdığım kodu pek şık bulmadım. Enum falan mı kullansaydık acaba .. Şimdilik işin içinden çıkamadım
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]