Klavye tuş kodları tablosunu tarayın. Pemin dijital sinyallerinin değerlendirilmesi konusunda. klavyeler. Android'de QR Kodları Nasıl Taranır?

Çoğunluk modern klavyeler multimedya tuşlarıyla donatılmış ve farelerde zaten üç ila yedi düğme bulunuyor. Sürücüler ve her türlü faydalı programlar Yalnızca Windows. Herkes Linux'un sistemi kendiniz için özelleştirme yeteneğiyle ünlü olduğunu bilir, tabii ki nerede ve neyi yapılandıracağınızı biliyorsanız. Görevimiz penguene ek somunlarla çalışmayı öğretmektir.

Anahtar tarama kodunun belirlenmesi

Klavyenizde neye basarsanız basın, X sunucusu ve çekirdek genel olarak üzerinde ne yazıldığını veya çizildiğini umursamaz. Yalnızca düğmenin tarama koduyla ilgilenirler ve önce X'ler çekirdek anahtar kod tablosunu okur, ardından anahtar kod kendi kod tablosuna bağlanır. Eğer içindeyse Windows sorunları Konsolda multimedya tuşları için herhangi bir ayar yoktur, bu nedenle Linux'ta konsoldaki ve X-Window'daki düğmelere basıldığında verilecek tepkiyi ayrı ayrı yapılandırmanız gerekir.

Anahtar kodunu bulmak için X sunucusunda bulunan xev yardımcı programını kullanmalısınız. Başlattıktan sonra, Olay Test Cihazı penceresi görünür, şimdi verilen kodu hatırlayarak tuşlara sırayla basın:

$xev
...
KeyRelease olayı, seri 31, sentetik NO, pencere 0x3e00001,
kök 0x67, alt w 0x0, zaman 279734676, (311,611), kök:(1104,687),
durum 0x2000, anahtar kodu 236 (keysym 0x1008ff19, XF86Mail), aynı_ekran EVET,

XFilterEvent şunu döndürür: Yanlış
KeyRelease olayı, seri 31, sentetik NO, pencere 0x2600001,
kök 0x67, alt w 0x0, zaman 265877259, (883,334), kök:(886,358),
durum 0x0, tuş kodu 161 (anahtar sembolü 0x0, NoSymbol), aynı_ekran EVET,
XLookupString 0 bayt verir:
XFilterEvent şunu döndürür: Yanlış

Olay Test Cihazı penceresinden geçen her fare hareketi izlendiğinden çıktı çok büyük olabilir. Anahtar, KeyRelease bloğu tarafından tanımlanır, özellikle anahtar kodu değeri tam olarak bilmek istediğimiz tarama kodudur. Gösterilen örnekte iki tuşa basılmıştır. Anahtar kodu 236, Keysym'de belirtilen X sunucusunun anahtar koduna ve ayrıca KDE'de varsayılan posta istemcisini başlatan XF86Mail eylemine karşılık gelir. 161 numaralı anahtar için kod ve eylem tanımlanmamıştır.

Bir tuşa basılması mümkündür ancak tarama kodu verilmemektedir. Bu, çekirdeğin eşleşen bir değer bulamadığı anlamına gelir. Dmesg çıktısı aşağıdaki satırı içermelidir:

"Setkeycodes 0xec" kullanın "Bunu duyurmak için.

Yani, setkeycodes kullanarak anahtar tarama kodunu kendiniz ayarlamanız önerilir ve anahtar kodu değerini seçmek çok basittir. Ortaya çıkan rakamı ondalık sayıya dönüştürün (çoğu hesap makinesi bunu yapabilir) ve 128 ekleyin. Bu örnekte 0xec = 236 yani tarama kodu 364 elde ederiz. Şüphe durumunda kullanılan ve kullanılmayan tarama kodlarının listesi şu şekilde olabilir: konsolda veya dumpkey'lerde getkeycodes yardımcı programını çalıştırarak görüntülenebilir. Örneğin çıktı “getkeycodes | grep<код клавиши>"hiçbir şey vermedi, bu yüzden bu kod güvenle kullanılabilir.

Xmodmap için grafiksel bir ön uç olan XKeycaps yardımcı programı (www.jwz.org/xkeycaps) aynı zamanda tarama kodunun belirlenmesine de yardımcı olabilir.

Xev programı elbette konsolda çalışmıyor. Çekirdek tarafından verilen tarama kodunu bulmak için showkey veya getkeycodes yardımcı programını kullanmalısınız:

$gösteri anahtarı
klavye UNICODE modundaydı
herhangi bir tuşa basın (son basıştan 10 saniye sonra program sona erecektir)...
0xe0 0x6c 0xe0 0xec

İlk iki rakam basılan tuşa, ikincisi ise basılmamasına karşılık gelir.

X-Window'da tarama kodu bağlamayı ayarlama

Yani artık tarama kodlarımız var, X sunucusuna bu tuşa basıldığında gerçekte ne yapması gerektiğini belirtmemiz, yani ona sembolik bir ad vermemiz gerekiyor. XF86keysym.h başlık dosyasında sembol adlarının bir listesi verilmiştir. Varsayılan olarak, X sunucusu başlık dosyaları modern dağıtımlara yüklenmez. Ubuntu'da görmek için x11proto-core-dev paketini kurmanız gerekir, ardından bu dosya /usr/include/X11 dizininde yer alacaktır. Alternatif olarak X.Org CVS sunucusuyla iletişime geçebilirsiniz. Haydi bakalım:

$ cat /usr/include/X11/XF86keysym.h
/*
* Bazı "İnternet" klavyelerinde bulunan tuşlar.
*/
#define XF86XK_Bekleme 0x1008FF10
#define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_AudioRaiseVolume 0x1008FF13
#define XF86XK_AudioPlay 0x1008FF14
#define XF86XK_AudioStop 0x1008FF15
#define XF86XK_Mail 0x1008FF19

Son satırı xev çıktısıyla karşılaştırırsak, değerlerin anahtar kodu 236 - tuşlarısym 0x1008ff19, XF86Mail (XK_ son eki olmadan) olan anahtarla eşleştiğini görürüz. /usr/share/X11/XKeysymDB'de kullanılması gereken tüm mevcut değerlerin bir listesini bulabilirsiniz.

Kendi düzeninizi oluşturmanın iki yolu vardır: klavyenizin açıklamasını oluşturun veya Xmodmap'i kullanın. Son yöntem en basitidir, bu yüzden bunun hakkında daha fazla konuşacağız. Kullanıcının ana dizininde, istenen değerleri gireceğimiz bir file.Xmodmap oluşturun:

$ mcedit ~/. Xmod haritası

anahtar kodu 161 XF86Hesap Makinesi
tuş kodu 174 XF86AudioLowerVolume
tuş kodu 176 XF86AudioRaiseVolume
tuş kodu 162 XF86SesDuraklatma

Ve böylece, ilkenin açık olduğunu düşünüyorum. Ayrıca anahtar kodu hem ondalık hem de onaltılık biçimde girilebilir. Gözlemlerime göre çoğu anahtarın kodları standartlaştırılmıştır. Bu nedenle, bir tuşa bir kez basıldığında verilecek yanıtı ayarlarsanız ve dosyayı başka bir bilgisayara aktarırsanız, başka bir klavyede de imzalanmış bir tuşa basıldığında verilecek tepkinin benzer olma ihtimali vardır. GDM'li Gnome masaüstü kullanıcıları bu satırların tümünü sistem çapındaki /etc/X11/Xmodmap dosyasına yazabilirler.

Diğer durumlarda yine de X sunucusuna oluşturulan dosyayı kullanmasını söylememiz gerekir. Bu, farklı dağıtımlarda farklı şekilde uygulanır, ana fikir, kullanıcı oturum açtığında veya X başladığında /usr/bin/xmodmap $HOME/.Xmodmap komutunu çalıştırmaktır.Burada herkes istediği gibi dans eder. Forumlarda $HOME/.xsession dosyasının (bazı dağıtımlarda .Xsession olarak adlandırılabilir), .xprofile veya /etc/X11/Xsession sisteminin kullanılmasını öneriyorlar. Ve korkarım hepsi bu değil olası seçenekler. KUbuntu'da bunun nasıl yapıldığını görelim:

$ sudo grep -iR xmodmap /etc

Sonuç olarak, aşağıdaki içeriğe sahip çok ilginç bir /etc/X11/Xsession.d/80ubuntu-xmodmap dosyası buluyoruz:

$ cat /etc/X11/Xsession.d/80ubuntu-xmodmap

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || doğru

USRMODMAP = "$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; Daha sonra
if [ -f "$USRMODMAP" ]; Daha sonra
/usr/bin/xmodmap "$USRMODMAP" || doğru
fi
fi

Yani ubuntu.xmodmap dosyasının içeriği ve varsa user.Xmodmap dosyası yüklenir. ubuntu.xmodmap'i düzenleyicide açtığınızda, anahtar kodların ve ilgili sembolik adların bir listesini bulacaksınız. Bundan şu sonuca varabiliriz: Bir geliştirici, dağıtımının multimedya klavyeleri desteklediğini bildirirse, büyük olasılıkla benzer bir dosya bulabilirsiniz. Diğer dağıtımlar, özel xmodmap dosyalarını başlatmak için benzer bir sisteme sahiptir.

Artık tuşlara sembolik adlar atandığına göre, istediğiniz eylemleri onlara atayabilirsiniz. KDE gibi bazı pencereleme ortamları, sembolik adlara dayalı eylemleri işleyebilir. Yani, XF86AudioPlay (SORU) ile düğmeye bastığınızda, varsayılan oynatıcı çalmaya başlar. İstediğiniz kombinasyonu ayarlamak için “KDE Kontrol Merkezi -> Bölgesel ve Erişilebilirlik Seçenekleri -> Klavye Kombinasyonları”na gidin (KUbuntu'da “Sistem Ayarları -> Klavye ve Fare”ye bakın). Hem Gnome'da (gnome-klavye bağlamalarını arayabilirsiniz) hem de XFce'de benzer bir menü öğesi vardır. Ayrıca Amarok, Konqueror, MPD gibi bazı programlar da tuş vuruşlarını işleyebilir. Olmayan diğer ortamlarda
grafiksel konfigürasyon araçları büyük olasılıkla konfigürasyon dosyalarına manuel müdahale gerektirecektir. Örneğin, IceWM'de XF86AudioPlay sembolik adındaki bir tuşa bastığınızda XMMS oynatıcısı başlar ve tekrar bastığınızda duraklar, ilk başlatmadan sonra görünen ~/.icewm dosyasına satırı eklemelisiniz:

$ mcedit ~/.icewm

XF86AudioPlay xmms tuşu --oynat-duraklat

Fluxbox'ta oynatıcıyı başlatacak satır şöyle görünecektir:

$ mcedit ~/.fluxbox/keys

Yok XF86AudioPlay:ExecCommand xmms --play-pause

Yapılandırmalarda genellikle örnekler vardır, bu nedenle pencere yöneticilerinin geri kalanını kendiniz kolayca çözebileceğinizi düşünüyorum.

Konsolda reaksiyonu ayarlama

Konsolda prosedür biraz farklıdır. Hatırlayacağınız gibi dmesg çıktısı, setkeycodes komutunu kullanarak anahtar kod atamayı öneriyordu. Ancak burada farklılıklar var - konsolda 128'den fazla tuş komutu olamaz, 0'dan 127'ye kadar değerler seçmelisiniz:

$setkeycodes 0xec 118

Mevcut klavye düzeni dosyasındaki ücretsiz değerleri görüntüleyebilirsiniz. Ubuntu ve tüm Debian tabanlı dağıtımlarda bu genellikle /etc/console-setup/boottime.kmap.gz şeklindedir. Başlangıçtan sonra anahtarlarla ilgili herhangi bir sorun olmazsa, bu satırı başlangıç ​​komut dosyalarından birine, örneğin /etc/init.d/rc.local dosyasına ekleyin.

Artık geriye kalan tek şey, anahtar ile gerçekleştirilen eylem arasındaki yazışmayı ayarlamaktır. Burada yaratıcılığa X'lerdekinden daha fazla yer var. Keymaps(5)'te, bir anahtar kodunu eşleştirme prosedürü aşağıdaki gibidir:

(düz | ) anahtar kodu anahtar numarası = anahtar sembolü

# 105 kodlu tuşa bastığınızda konsolu bir kez daha değiştirin
anahtar kodu 105 = Decr_Console
# Tıkladığınızda konsolu bir ileri değiştirir ve 106 kodlu bir anahtar
alt tuş kodu 106 = Incr_Console

Ancak komutu değişkenlerde belirterek kendi seçeneklerinizi oluşturabilirsiniz:

tuş kodu 120 = F100
string F100 = "/sbin/shutdown -h şimdi\n"

Başka bir deyişle 120 kodlu tuşa basıldığında F100 değişkeninde belirtilen eylem gerçekleştirilecektir; bizim durumumuzda bilgisayar kapanmaya ayarlıdır. F100 yerine elbette başka bir isim de kullanabilirsiniz.

Şimdi eşit derecede önemli bir kısım da tüm bunların nereye yazılacağıdır. Belgeler ve çok sayıda ipucu, mevcut konsol düzen dosyasının (benim durumumda, boottime.kmap.gz) kullanılmasını önermektedir. Bu arada, KUbuntu kurulduktan sonra mevcut olan düzenleri açıklayan tek dosya bu; Diğer seçenekleri görmek için console-data paketini yüklemelisiniz. Bundan sonra, /usr/share/keymaps/i386/ dizininde, içinde dosyalar bulunan birkaç alt dizin bulabilirsiniz. Ancak başka bir düzene geçmeniz gerekiyorsa (Ubuntu ve diğer bazı dağıtımlarda /etc/default/console-setup veya ~/.console-setup dosyası bu amaçla kullanılır), tüm ayarların başka bir düzene aktarılması gerekecektir. dosya, ki bu biraz
rahatsız. Bu adımı atmaya karar verirseniz, ilk sıraya hiçbir şey yazmadan mevcut girişleri şablon olarak kullanın ve sonuna boş bir satır bırakmayı unutmayın.

Dizüstü bilgisayar hakkında biraz

Şu ana kadar anahtar tarama kodları belirlenemeyen bir laptopa rastlamadım. Dolayısıyla buradaki ayarlar yukarıda açıklananlardan farklı değildir. Bahsetmek istediğim bir teknik olmasına rağmen. Hazırda bekletme modunun kullanımını çok kullanışlı buluyorum, bilgisayarı açtığınızda her şeyi yerli yerinde buluyorsunuz. Modern dağıtımlar, kural olarak, kurulumu genel olarak basit olmasına rağmen bunu destekler - yalnızca hazırda bekletme paketini yükleyin ve yapılandırma dosyasındaki gerekli parametreleri geçersiz kılın. Tek sorun, bu moda her geçişinizde /usr/sbin/hibernate betiğini çalıştırmanız gerekmesidir ki bu her zaman uygun değildir. Sadece dizüstü bilgisayarın kapağını kapatıp tekrar açmak istiyorum
yemek, her şeyi yerli yerinde keşfedin.

Bunu, /proc/acpi/event yoluyla mevcut tüm ACPI olaylarını yönetmenize olanak tanıyan bir tür kullanıcı arayüzü olan acpid arka plan programını kullanarak yapmak çok kolaydır. Bu durumda acpid, /etc/acpi/events/ dizininden bir dizi yapılandırma dosyasını okur. Daemon'lu paket dağıtıma dahil değilse, onu depodan yükleyin; En son sürüm phobos.fs.tum.de/acpi web sitesinden edinilebilir. Kurulumdan sonra /etc/acpi/events dizininde iki dosya oluşturmanız gerekir: lid ve power. Birincisi kapağın kapatılmasına verilen tepkiyi, ikincisi ise güç düğmesine basılmasının tepkisini anlatıyor.

$ sudo mcedit /etc/acpi/events/lid

etkinlik=düğme/kapak.*
action=/usr/sbin/hibernate

$ sudo mcedit /etc/acpi/events/power

olay=düğme/güç.*
action=/sbin/shutdown -h şimdi

Bunlar biraz basitleştirilmiş seçenekler; KUbuntu'da daha karmaşık komut dosyaları bulacaksınız. Bundan sonra acpid arka plan programını yeniden başlatmanız gerekir:

$ sudo /etc/init.d/acpid yeniden başlat

Artık dizüstü bilgisayarın kapağını kapattığınızda sistem güç kapalıyken hazırda bekletme moduna geçecek, güç düğmesine bastığınızda ise kapanacaktır. Basit ve kullanışlı.

Kurulum programları

Yapılandırma dosyalarıyla uğraşmayı sevmiyorsanız, multimedya tuşlarının çalışmasını yapılandırmanıza yardımcı olacak birkaç program öneririm. Örneğin, Sven programının (sven.linux.kiev.ua) başlangıçtaki amacı multimedya klavyede ek tuşlar yapılandırmaktır, ancak 0.4 sürümünden itibaren yazım hatalarını düzeltebilir ve klavye düzenini değiştirebilir. Üstelik normal bir klavyeniz olsa bile onun yardımıyla klavye kısayollarını kullanarak multimedya tuşlarını taklit edebilirsiniz. Ayrıca belirli fare düğmelerine de eylemler atayabilirsiniz. Yaklaşık 10.000 Rusça ve 9.500 İngilizce kelimeyi anlıyor. Program değişmiyorsa
kendisi, daha sonra düzen, özel olarak belirlenmiş bir tuş kullanılarak manuel olarak değiştirilebilir (varsayılan olarak Break). Ayrı bir tuş (Scroll Lock) kelimelerin büyük/küçük harflerini değiştirebilir (büyük, küçük, ilk harf üst, geri kalanlar alt). Klavye düzeni değiştirme göstergesi her pencerenin durumunu hatırlar; böylece uygulamalar arasında sık sık geçiş yapıyorsanız artık düzeni ek olarak değiştirmenize gerek kalmaz. Programın harika yetenekleri var ve ona bir göz atmanızı tavsiye ederim. Tüm ayarlar kullanılarak yapılır grafik programı, GTK+ kitaplıkları üzerine kurulmuştur. Sven Linux'ta test edildi ancak prensipte *BSD sistemlerinde çalışması gerekiyor. Kullanılan pencere yöneticisi
önemli değil.

KeyTouch'ın (keytouch.sf.net) yetenekleri biraz daha mütevazıdır, bu yardımcı program yalnızca multimedya tuşlarını ayarlamak için kullanılır. Bununla birlikte, herhangi bir tuşa, varsayılan ayarlardan farklı olan farklı bir eylem atayabilirsiniz. Programın web sitesinde, bazı dağıtımlara yönelik kaynak metinlere ve paketlere ek olarak, en tanınmış üreticilerin multimedya klavyeleri için hazır ayarlar bulabilirsiniz.

Bir diğer ilginç çözüm- xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) - kabuk komutları da dahil olmak üzere herhangi bir komutu herhangi bir klavye ve fare düğmesine atamanıza olanak tanır. Tüm ayarlar basit ve anlaşılır formatta bir konfigürasyon dosyasında yapılır.

Büyük olasılıkla telefonunuzda zaten varsayılan olarak yüklü QR kod tarayıcı, ilk QR kodunuzu taramak için kolayca kullanabilirsiniz. Bunu yapmak çok kolay. Talimatlarımızı takip etmeniz yeterli.

1. Telefonunuzdaki QR kod okuyucuyu açın.

2. Cihazınızı, akıllı telefonunuzun ekranında açıkça görülebilecek şekilde QR kodunun üzerinde tutun.

Akıllı telefonunuzu QR kodunun üzerinde doğru tutarsanız aşağıdakiler gerçekleşir:

  • Telefon kodu otomatik olarak tarar.
  • Bazı uygulamalarda, bir kodu taramak için akıllı telefonunuzda fotoğraf çekerken yaptığınız gibi bir düğme yerine bir görsele tıklamanız gerekir.

3. Gerekiyorsa belirtilen düğmeye basın.

Süper! Akıllı telefonunuz kodu okur ve verilen bağlantıyı takip eder, ancak bu her zaman anında gerçekleşmez. Çoğu cihazda bu işlem birkaç saniye sürebilir.

QR kodlarını her yerde görmeye başlayacaksınız. Öğretmek, bilgilendirmek, açıklamak ve daha birçok şeyi yapmak için kullanılırlar. Onları bulun ve tarayın! QR kodları size çok fazla zaman ve emek kazandıracak.

Android'de QR Kodları Nasıl Taranır?

Şimdi size Android'de QR kod tarama uygulamasını nasıl kullanacağınızı anlatacağız.

Kısaca:
1. Aç Oyun mağazası .
2. Ara QR kod okuyucu .
3. Seçin QR Kod Okuyucu(Tarama yoluyla).
4. "'ye tıklayın Düzenlemek".
5. Programı açın QR kod okuma.
7. Kamerayı QR koduna doğrultun.
8. "'ye tıklayın TAMAM".

Aşama 1. Android'de Play Store'u açın. Bu, bir uygulamadaki veya ana ekrandaki bir simgedir.

Adım 2. Arama motoruna QR kod okuyucuyu girin. QR kodunu okumak için uygulamaların bir listesi görünecektir.

  • Bu makalede QR Kod Okuyucunun nasıl kullanılacağı açıklanmaktadır ancak beğendiğiniz uygulamayı seçebilirsiniz. İndirmeden önce uygulama hakkında bilgi edindiğinizden emin olun.
  • Adımlar tüm QR kod okuma uygulamaları için aynı olmalıdır.

Aşama 3.Scan tarafından geliştirilen QR Kod Okuyucu'ya tıklayın. Geliştiricinin adı her uygulamanın altında listelenir. Scan tarafından yapılan uygulamayı bulmak için aşağı kaydırmanız gerekebilir.

Adım 4.Yükle'ye tıklayın. Android cihazınızdaki bilgilere erişim izni vermenizi isteyen bir açılır pencere görünecektir.

Adım 5.Kabul Et'i tıklayın. QR Kod Okuyucu artık Android cihazınıza yüklenecek.

    • Uygulama indirildiğinde "Yükle" butonu "Aç" olarak değişecek ve uygulamada yeni bir simgeye sahip olacaksınız.

Adım 6.QR Kod Okuyucuyu açın. Bu, uygulamadaki QR koduna benzeyen bir simgedir. Bu, standart bir kamera ekranına benzeyen bir uygulamayı açacaktır.

Adım 7QR kodunu kamera çerçevesine hizalayın. Biraz fotoğraf çekme şeklinize benziyor ancak herhangi bir tuşa basmanıza gerek yok. Barkod tarayıcı kodu okuduğunda, koddaki URL'yi içeren bir açılır pencere görünecektir.


Adım 8Web sitesini açmak için "Tamam"ı tıklayın. Bu, varsayılan web tarayıcınızı başlatır ve QR kodundaki URL'ye gider.

Basit gibi görünen ancak bazen araştırmacı için sorun yaratan bir sonraki tipik PC cihazı klavyedir.

Genel olarak cihaz basittir. Özellikle de PS/2 bağlantı noktasına bağlı olan eski modeller için geçerli değil. Çok sayıda deneysel verinin gösterdiği gibi, klavye kontrol çipi tuş vuruşlarını tarar ve bunları seri kod halinde bağlantı noktasına iletir. Bu iletimin saat frekansı (çoğu durumda) 6,3 veya 10 kHz'in katıdır. Her ne kadar yazar son yıllarda saat frekansı 20 kHz civarında olan birkaç kopyaya rastlamış olsa da.

Tüm klavyeler, herhangi bir tuşa basıp basılı tuttuğunuzda (bir duraklamadan sonra) “ad infinitum” tuş kodunun iletimini tekrarlamaya başlar. Normal modda bu durum genellikle denetleyici arabelleğinin taşmasına ve birkaç saniye içinde arızaya neden olur. Görünüyor ses sinyali sistem "dinamiği" - "gıcırtı". Test modunun özü (en genel olarak kabul edilen), bir tuşa basıldığında seçilen karakterin "klavye" kablosu aracılığıyla sonsuz iletimini sağlamaya izin veren arabellek taşma komutunu engellemektir.

Her zaman olduğu gibi, sonucun daha sonra doğru şekilde hesaplanması için, kod paketinde sürekli bir darbe değişimi oluşturmak gerekir. Klavye kodları için bu tür iki kombinasyon olabilir:

10101010 (55) tuşu “+; = "

01010101 (AA) standart tablolarda - uygulanamaz

Tarama kodlarının genel tablosu tablo 14.1'de verilmiştir.

Tablo 14.1- Klavye tarama kodları

Anahtar

Kodu tarayın

Anahtar

Kodu tarayın

Anahtar

Kodu tarayın

Anahtar

Kodu tarayın

Böylece, test modunu uygularken ve örneğin “+” tuşuna ağırlık koyarken, klavye kablosunda sonsuz sayıda darbe paketi dizisi mevcut olacaktır. Bu durumda paketteki darbe tekrarlama periyodu (yani saat frekansı) 6,10 veya 20 kHz'e eşit olacak ve paket tekrarlama frekansı çok daha düşük olacaktır. Veri formatı Şekil 14.1'de gösterilmektedir.

Klavye kablosunda veri alışverişi yapmak için iki hat vardır - KBData ve KBSync. Tarama kodlarını iletirken klavye, KBData hattındaki bir sonraki veri bitini ayarlar ve sinyali KBSync hattında "1"den "0"a aktararak iletimi onaylar.

Denetleyici, KBSync hattında düşük düzeyde veri iletmeye/almaya hazır olmadığının sinyalini verebilir. Geri kalan zamanlarda iletilecek veri olmadığında her iki hat da yüksek sinyal seviyesine sahiptir.



Yukarıda anlatıldığı gibi, klavye kablosunun PEMIN spektrumunda saat frekansı 1/76,04·10 -6 = 13,15 kHz olan frekans bileşenleri beklenmelidir. Üstelik, farklı (ancak birden fazla!) periyoda sahip iki faz kaydırmalı sinyalin varlığı nedeniyle, çift ve tek frekans bileşenlerinin genliği farklı olacaktır.

Bekleneceği gibi, senkronize bir veri hattının PEMIN'i prensipte bilgi verici değildir. Ancak bir PEMIN'i diğerinden ayırmak hiç de kolay değil. Tek bir kablo var, sinyaller senkronize...

Pratikte tek yol– pakette minimum sayıda mantıksal “1” içeren bir tarama kodu seçin. Bunlar “F3” ve F9” tuşlarıdır (onaltılık kodda 03 ve 01). "00" kodu kullanılmaz.

“F3” tarama kodunun osilogramı aşağıda gösterilmiştir.


Kesinlikle "enerji açısından", PEMIN'in tüm frekans bileşenlerini "=" koduyla ve örneğin "F9" koduyla ölçerseniz, frekans bileşenlerinin HER BİRİ üzerindeki alıcı okumalarındaki fark gerçek bilgidir. PEMIN enerjisinin bir kısmı. Üstelik bu azami azami değerdir. Bir “otomatik makineye” emanet etmek mümkün değilse iş oldukça karmaşık ve sıkıcıdır. Bunun için PEMIN'in bileşenleri düşük frekanslar kolayca tanımlanamaz. Yani aynı zamanda farklılıkları “yakalamak” için de...



SI uygulamasında, vakaların büyük çoğunluğunda, yalnızca PEMIN seviyelerini ölçerler (hiçbir şey çıkarmadan) ve güvenlik parametresini hesaplarlar. Bu "yedekle" mümkündür, ancak uzmanın gerçek durumu bilmesi gerekir.

İncelemenin sonunda - AT ve PS/2 klavye konektörlerinin "pin çıkışı".


Alıcının üzerindeki “resimler” o kadar da “klasik” olmaktan uzak görünse de yine de oldukça tanınabilir durumda. İşte örnekler



Spektrum, azalan frekansla birlikte bileşenlerin genliğinde açıkça bir artış olduğunu göstermektedir.

Bu frekans bölgesinde (onlarca kHz ve ötesinden) “klava” ölçümlerinin özellikleri de vardır. Gerçek şu ki, klavye her zamanki yerleşiminde, sistem birimi. Ve SB'nin tepesinde darbe bloğu güç kaynağı hem “E” hem de “H” bileşenleri için en güçlü PEMIN kaynağıdır. Böyle teatral bir spot ışığının "ışığında" klavyenin loş "ışığını" görmek özel bir sanattır! Bu nedenle aşağıdaki tekniği öneriyorum. Klavyeyi SB'den mümkün olduğunca uzağa taşıyın. Daha iyi - PS/2 genişleticide. Yaklaşık 2-2,5 metre.

Anteni uydudan mümkün olduğunca az yönlendirilecek şekilde yerleştirin (alıcı bant genişliği 10 kHz'den büyük olan sinyal sürekli bir spektrumdur). Yönlendirilmiş, sabit antenin yakınında klavyeyi ve kablosunu bükmeye başlayın (tersi değil!). O zaman klavyeden PEMIN sinyallerini tespit etme ve PEMIN bileşenlerini analizör ekranında kendi gözlerinizle görme şansınız çok daha yüksek olacaktır.

Yukarıdakilerin tümü PS/2 arayüzüne sahip bir klavyeye uygulandı. Ancak şimdi bunların yerini büyük ölçüde USB arayüzlü klavyeler alıyor.

Genel olarak bu arayüz yazıcılarla birlikte biraz detaylı olarak ele alındı. Ancak klavyeyle ilgili bir miktar “hedef belirleme” vermekte fayda var.

Klavyenin kesinlikle düşük hıza (yani aslında USB 1.0 arayüzü aracılığıyla) bağlandığını dikkate alarak USB arayüzü için paketlerin yapısını hatırlayalım.

Düşük hızlı cihazlar için maksimum DATA veri yükü boyutu 8 bayttır. Yani, klavye tarama kodunun tam olarak gerektirdiği şey budur.

USB hattındaki sinyali (yani veriyi) görmenin o kadar da kolay bir iş olmadığı ortaya çıktı. Bununla birlikte, tipik bir USB "klavye" modeli GENIUS KB-06XE'nin kablosunda, özellikle "veri +" hattında (tel) tam olarak ortaya çıkan şey budur (Şekil 14.10)


Bu iki osilogram, belirlenmemiş (kaotik) bir periyodiklikle birbirini değiştirir ve sinyallerin "resimleri" basılan klavye tuşuna (veya hiçbir basılmaya) bağlı değildir. Paketin (çerçeve) “değişken” kısmında başka bir değişiklik tespit etmek mümkün olmadı.

Bu paketlerin frekansı kesinlikle sabitlenmiştir (Şekil 14.11) ve her birinin süresi (osilogramlarda görülebilir) yaklaşık 34 ± 1 μs'dir.


Paketler her 4 ms'de bir takip edilir. Ancak her paketin sonunun sürekli "titrediğini" ve klasik "titremenin" belirgin olduğunu belirtmek gerekir. Bu nedenle spektral görüntü biraz bulanıktır ve ancak yeterince uzun bir ortalama almayla netleşebilir.


Ayrıca, farklı darbe tekrar periyotları ve farklı süreleri nedeniyle spektrumun sürekli ve çizgi spektrumunun bir karışımı karakterine sahip olduğu dikkate alınmalıdır. Bununla birlikte, sonsuz paket dizisi için doğal olan ve ortalama paket süresinin "loblarında" birden fazla olan spektrumun lob karakteri çok net bir şekilde korunur. Fonksiyonun yalnızca "sıfırları" titreşim ve bireysel darbelerin değişken olmayan tekrarlama periyoduyla yumuşatılır. Ancak resmin kendisi oldukça tipiktir. Daha ince bir frekans çözünürlüğüyle spektrum, paket tekrarlama oranı (250 Hz) tarafından belirlenen "çizgilere" ayrışmaya başlar (Şekil 14.13). Böylece, osilogramların en basit şekilde görüntülenmesi ve tarama kodunun gerçek iletimi ile senkronize olmaması durumunda, Veri aktarımından sorumlu çerçevenin (paket) bölümlerini tanımlama ve görselleştirme başarısız oldu. Ancak klavye kablosunun PEMIN'inin yine de bu olacağı ve başkası olmayacağı iddia edilebilir. Hangi frekanslarda aranacağı açıktır, doğası gereği sürekli olacağı açıktır (her durumda, alıcı frekans çözünürlüğü 0,3 kHz'den fazla). Ve hesaplamalarda saat değeri olarak hangi değerin değiştirileceği açıktır (deneyde bir paketteki minimum darbe süresi 1,322 μs idi). Bunu herhangi bir SI'da en az 200 MHz bant genişliğine sahip bir osiloskopla ölçmek önemsiz bir iştir. Test modu aslında herhangi bir tuştur, herhangi bir tuşa basabilirsiniz veya hiçbir şeye basamazsınız. Paketler yine de arayüz üzerinden iletilir. Ve ilk yaklaşım olarak, bunların bilgilendirici olduğunu düşünüyoruz (aksi kanıtlanana kadar).

Verilen osilogramlar ve spektrumlar, ölçümlerin yapıldığı aynı bilgisayara bağlanan AKIP-4108/2 osiloskop kullanılarak elde edilmiştir (bunun, PICO Teknoloji şirketinin bizim tarafımızdan geliştirilmesinin çok işlevsel bir tekrarı olduğuna dikkat edilmelidir. Hayır) Çinlilerden daha kötü :)).

Spektrum açıkça 1 MHz'in çok ötesine geçiyor (osiloskop artık buna izin vermiyordu ve bir analizör bağlamanın pek bir anlamı yoktu). Geri kalanı rastgele bir anten olarak kablo ve koruma derecesi tarafından belirlenir.

USB arayüzünün diğer modları için birçok GHz bant genişliğine sahip bir osiloskopa ihtiyacınız vardır.

Sürekli spektrumun tam olarak nasıl hesaplanacağı ve aynı zamanda mevcut NMD çerçevesinde nasıl kalınacağı ayrı bir konuşmadır ve açık tartışma için değildir, ne yazık ki... Ancak sonraki yayınlarda buna geri dönmemiz gerekecek, orada gidecek hiçbir yer yok. “Sınırların içinde kalmaya” çalışacağım...

Beni bu tür bir cihaz üzerinde çalışmaya iten şey, kopyalanması kolay Gamemort cihazlarının çoğunun yeterli sayıda kontrol düğmesinin uygulanmasına izin vermemesiydi. Bir PC oyun bağlantı noktası başlangıçta maksimum dört düğme için tasarlandı. Her türlü uzantı da istenilen esnekliğe sahip değildir. Örneğin, DIY'ciler arasında popüler olan CH Flightstick Pro uzantısı, 14'e kadar düğme uygulamanıza olanak tanır, ancak aynı anda iki düğmeyi kullanamazsınız - sürekli olarak "çevirmeniz gereken oyunlarda bu tür cihazlar üzerinde uçmak hakkında" kafa” - aynı kuşlarda unutabilirsiniz. Bazı uzantılar tamamen dijital bir arayüz kullanır; basılan düğmeler ve düğme sapması hakkındaki veriler, başlangıçta dört "standart" düğme hakkındaki verileri iletmeyi amaçlayan dijital oyun portu hatları üzerinden iletilir. Hatta bu tür uzantıların biraz gereksiz olduğunu düşünüyorum. Analog verileri dijitale dönüştürmek joystick tasarımını karmaşık hale getirir. Ayrıca her oyun, kendisine ne tür bir canavarın "bağlandığını" anlamak istemez. Ve klavye - işte karşınızda, 102 tuşlu görkemiyle! Ayrıca RU.GAME.FLIGHT aboneleri de zaman zaman “Klavyeyi nasıl ehlileştirip keyifle geçebilirim?” sorusunu sorarak ateşe yakıt kattı. ve hiçbir şey olmadan ayrılıyorum.

Kısaca cihazın görevi, klavye ile PC arasındaki veriyoluna "oturmak" ve cihazda basılan düğmelere uygun olarak klavyedeki tuş vuruşlarını simüle etmektir.

Bu yüzden onu geliştirmek için oturdum. Bundan önce çeşitli mikroişlemciler ve mikrodenetleyicilerle çalışma deneyimim vardı. Genel olarak - parmaklar kulaktan kulağa. Ve şimdi rıhtımı alacağıma, RTFM yapacağıma ve bir hafta içinde beyaz bir ata bineceğime safça inandım. Bütün sorun, klavye ile denetleyici arasındaki veri aktarım protokolüne ilişkin belgeleri ne internette ne de ilgili Fido konferanslarında bulamamamdı. Bir osiloskop alıp birkaç haftayı derme çatma parçaları söküp tekrarlamaya çalışmak zorunda kaldım. Bu nedenle aşağıda sunulan bilgilerin çoğu vardığım sonuçların sonucudur ve belgelenmemiştir. Eğer bir konuda yanılıyorsam, yorumlarınızı şu adresten duymaktan memnuniyet duyarım: döküntü en İngiltere nokta açık.

Veri aktarımının temel ilkeleri

Aşağıdakilerin tümü, yalnızca konektörün tasarımında farklılık gösteren (bir adaptör aracılığıyla bağlanabilir) PS/2 ve AT klavyeler için geçerlidir.

Klavye ile bilgisayarın anakartında bulunan denetleyici (bundan sonra kısaca "denetleyici" olarak anılacaktır) arasında iki yönlü veri alışverişi gerçekleşir. Denetleyici çeşitli komutlar iletir (örneğin, LED'lerin durumunu veya otomatik tekrar hızını değiştirmek). Klavye, basılan tuşların tarama kodlarını iletir (tarama kodu - sembol anahtarları ASCII kodlarıyla karıştırılmamalıdır).

Kodları tarayın

Anahtar Kodu tarayın Anahtar Kodu tarayın Anahtar Kodu tarayın Anahtar Kodu tarayın
1 16 2 1E 3 26 4 25
5 2E 6 36 7 3 boyutlu 8 3E
9 46 0 45 - 4E + 55
Geri tuşu 66 Sekme 0 gün Q 15 K 1 boyutlu
e 24 R 2 boyutlu T 2C e 35
sen 3C BEN 43 Ö 44 P 4 gün
[ 54 ] 5B Girmek 5A Ctrl(L) 14
A 1C S 1B D 23 F 2B
G 34 H 33 J 3B k 42
L 4B ; 4C " 52 ` 0E
Shift(L) 12 \ 61 Z 1 A X 22
C 21 V 2A B 32 N 31
M 3 A , 41 . 49 / 4A
Shift(R) 59 Alt(L) 11 Uzay 29 Büyük harf kilidi 58
Esc 76 F1 05 F2 06 F3 04
F4 0C F5 03 F6 0B F7 83
F8 0A F9 01 F10 09 F11 78
F12 07 Kaydırma kilidi 7E * 7C Rakam kilidi 77
7 6C 8 75 9 7 boyutlu - 7B
4 6B 5 73 6 74 + 5A
1 69 2 72 3 7A 0 70
. 71 Al(R) E0-11 Ctrl(R) E0-14 Ekran görüntüsü E0-12-E0-7C
Sokmak E0-70 Silmek E0-71 Sol E0-6B Ev E0-6C
Son E0-69 Yukarı E0-75 Aşağı E0-72 Sayfa yukarı E0-7D
Sayfa Aşağı E0-7A Sağ E0-74 Girmek E0-5A / E0-4A

Not: AT klavyesinde aslında üç farklı tarama kodu seti bulunur. Yalnızca 2 numaralı setin (varsayılan set) değerlerini verdim.

Bir tuşa bastığınızda klavye bu tuşun tarama kodunu denetleyiciye iletir. Serbest bırakıldığında önce 0F0h öneki ve ardından serbest bırakılan anahtarın tarama kodu.

Shift, Alt ve Ctrl tuş kombinasyonları iki tarama kodu dizisi halinde iletilir. Denetleyici açısından bakıldığında bu anahtarlar diğerlerinden farklı değildir. Aynı şekilde, Num Lock ve Caps Lock modları donanım düzeyinde farklılık göstermez; klavye kesintilerine hizmet veren programa göre yazılım düzeyinde farklılık gösterirler.

Otomatik tekrar modunun uygulanmasından kısaca bahsetmek istiyorum. Kural olarak, otomatik tekrarlama işlevleri klavyenin kendisine atanır - belirli bir süre sonra, tuş bırakılmazsa klavye tamamen aynı tarama kodunu başka bir tane gönderir. Bu sırada başka bir tuşa basarsanız, denetleyiciye başka bir tarama kodu "uçacak" ve yalnızca bir tuşa basıldığı kabul edilecektir. Oyunlarda bu sorun basitçe çözülür - 0F0h önekiyle ilgili tarama kodu gelene kadar tuşa basılmış sayılır. Bu nedenle prensip olarak otomatik tekrar işlevlerini uygulamadım.

Yukarıdaki tarama kodlarına ek olarak klavye bazı servis komutlarını da döndürebilir. Ancak bu komutların yanı sıra kontrolör tarafından verilen komutların da bu durumda pratik bir değeri yoktur. Bu nedenle bunların üzerinde durmayacağım.

Değişim protokolünün açıklaması

Klavye ile denetleyici arasındaki veri alışverişi, seri protokol kullanılarak eşzamansız olarak gerçekleştirilir. Eşzamansız aktarımın özü, verilerin yalnızca iletilecek bir şey olduğunda iletilmesidir - klavyedeki bir tuşa basıldığında/bırakıldığında ve karşılık gelen tarama kodunun yayınlanması gerektiğinde veya denetleyicinin klavyeye bir komut vermesi gerektiğinde.

Veri alışverişi için iki hat vardır - KBData ve KBSync. Tarama kodlarını iletirken klavye, KBData hattındaki bir sonraki veri bitini ayarlar ve sinyali KBSync hattında "1"den "0"a aktararak iletimi onaylar. Denetleyiciden veri alırken klavye, KBData hattından veri bitini okur ve KBSync hattındaki sinyali "1"den "0"a aktararak alımı onaylar. Denetleyici, KBSync hattında düşük düzeyde veri iletmeye/almaya hazır olmadığının sinyalini verebilir. Geri kalan zamanlarda iletilecek veri olmadığında her iki hat da yüksek sinyal seviyesine sahiptir. KBSync hattının darbe tekrarlama hızı yaklaşık 10-25 KHz'dir.

Veriler şu sırayla iletilir: bir başlangıç ​​biti - “0”, sekiz veri biti, bir eşlik biti (tüm bitlerin toplamı +1), bir durdurma biti - “1”. Her bayt veriyi aldıktan sonra denetleyici, KBSync hattını düşük seviyeye ayarlar, böylece alınan verileri işlemekle meşgul olduğunu ve bir sonrakini almaya hazır olmadığını bildirir. Bu, kabulün teyidi olarak kabul edilebilir. Klavye, alınan komutun her baytını 0FAh kodunu vererek onaylar. İletim sırasında bir hata meydana gelirse, kontrolör 0FEh komutunu vererek son baytın iletiminin tekrarlanmasını isteyebilir. Klavye farklı davranıyor; hataları yok sayıyor. Bunda ölümcül bir şey görmüyorum - eğer sisteminiz sık sık çöküyorsa, masaüstünüzde yeri yoktur.

Büyük olasılıkla açıklamalarım çok kafa karıştırıcıydı, bu yüzden bunları birkaç zaman diyagramıyla göstermeye çalışacağım.

Klavyeden veri aktarımının genel görünümü (S1 - başlangıç ​​biti; S2 - durdurma biti; D0-D7 - veri; P - eşlik biti; W - alınan verilerin işlenmesi)

Bayt 74 saatlik aktarıma bir örnek - sayısal tuş takımındaki “6” tuşu. Bu örnekte, klavye tarafından bir aktarım başlatıldığında denetleyici, veri almaya hazır olmadığını bildirir ve klavye, KBSync hattının serbest kalmasını bekler.

Donanım uygulaması

Şimdi doğrudan cihazın donanımdaki uygulamasının açıklamasına geçeceğim.

Cihaz, KBSync ve KBData sinyallerinin kesilmesine bağlanır ve klavyeden/klavyeye sinyalleri kendisi aracılığıyla iletir, dört düğmenin durumunu yoklar ve karşılık gelen tarama kodlarını yayınlayarak klavyenin çalışmasını simüle eder.

Cihaz, tek çipli bir mikro denetleyici AT89C2051'e dayanmaktadır. Atmel AT89C2051 mikrodenetleyicisi MCS-51 ailesine aittir ( yerli analog-MK-51). AT89C2051 ile i8051 arasındaki temel fark, daha düşük güç tüketimi, G/Ç hattı sayısının 15'e düşürülmesi ve harici belleğin kullanılamamasıdır. Daha detaylı bilgi AT89C2051 ve i8051, www.atmel.com ve www.intel.com adreslerinde bulunabilir. AT89C2051 yerine harici ROM ile AT89C51, i8051 (KR1816BE51) veya i8031 (KR1816BE31) kullanabilirsiniz. Ancak son iki seçenek, artan güç tüketimi nedeniyle klavye denetleyicisinin sigortasının atmasına neden olabilir.

Atmel mikrokontrolörlerinde, ana atamadan sonra saat üretecinin maksimum frekansı megahertz cinsinden gösterilir. 24 MHz frekansı ve daha yüksek frekansı olan 16-20 MHz kuvars için tasarlanmış bir mikrodenetleyici kurmanızı tavsiye ederim.

Şematik diyagram. (R1-R4 - 47K; R5 - 10K; C1, C2 - 18pF; C3 - 1uF; D1 - AT89C2051; BQ1 - kuvars 12-24MHz)

P1.4 satırı, düğme yoklama etkinleştirme çıkışı olarak kullanılır. Bu gelecekteki genişletmeler için bir temeldir - P1.4-P1.7 satırları, basılan düğmelerin yoklanması için hattın adresini vermek için kullanılacaktır (her biri 4 düğmeden oluşan en fazla 16 satır). P1.0-P1.3 satırındaki “0” ilgili düğmeye basıldığı anlamına gelir.

C3 ve R5 elemanları, güç uygulandığında sıfırlama sinyali üreten bir devre uygular.

Klavye ve kontrol cihazından gelen KBVeri hatları P3.2 (INT0) ve P3.3 (INT1) girişlerine beslenir. Bu nedenle, klavyeden veya denetleyiciden veri aktarımını başlatma girişimi karşılık gelen bir kesintiye neden olur. Bu kesintilere hizmet veren rutinler, mikro denetleyici aracılığıyla bir baytın aktarımına karşılık gelen sinyalleri basitçe yayınlar. Mikrokontrolör veri aktarımıyla meşgul olmadığında P1.0-P1.4 hatları yoklanır, alınan veriler işlenir ve ilgili tarama kodları kontrolöre verilir. Bu sürüm, cihazın kendisi tarafından iletilen verilere öncelik verir. Bu nedenle bazen klavye verileri kaybolabilir.

Bu bölümü sonuçlandırmak için AT ve PS/2 klavye konnektörlerinin pin şemasını vereceğim.

-KBReset sinyali isteğe bağlı bir sinyaldir. Bazı denetleyiciler klavyeyi sıfırlamak için bunu kullanabilir.

Firmware metni

Meraklı bir okuyucunun beni düzeltebileceğini veya programı başka türde bir mikro denetleyiciyle çalışacak şekilde uyarlayabileceğini umarak AT89C2051 mikro denetleyicisinin donanım yazılımının kaynak metnini sunuyorum.

Org 0 sjmp start org 3 jmp from_keyboard; INT0 org 13h jmp to_keyboard; INT1 başlangıç ​​hamlesi a,#5 ; kesme tipinin ayarlanması mov tcon,a ; Ön tarafta INT0 ve INT1 - mov a,#0 ; "1"den "0"a geçiş mov ip,a mov a,#85h mov yani,a mov a,#0ffh ; son hareket 6,a 06h adresinde saklanır; işlenmiş kod clr p1.4; yoklama döngüsünü etkinleştir mov a,p1 ; anl a,#15 butonlarının durumu okunur; - P1 bağlantı noktasının en az anlamlı dört biti; D0 - yukarı; D1 - sağ; D2 - aşağı; D3 - sola hareket noktası,#hat_table ; dört düğme hakkındaki verileri oku movc a,@a+dptr ; sekiz yöne genişletildi; D0 - yukarı; D1 - sağ; D2 - aşağı; D3 - sol; D4 - sağ yukarı; D5 - sağdan aşağı; D6 - sol-aşağı; D7 - sola yukarı hareket r2,a ; veri kaydediliyor mov r0,a xrl a,6 ; yeni veriler jz döngüsünden farklı değilse; önceki döngüde alınan - yoklama mov r1,#8'i tekrarlayın; sekiz bitlik döngü loop3 jnb acc.7,loop2 ; "1" - acc mov a,r1 mov dptr,#key_table-1 değişikliği yapıldı; karşılık gelen tarama kodunu çıkarın movc a,@a+dptr push acc mov a,r0 ; kayıt R0 - rlc a'ya basma/bırakma işareti; öykünülmüş anahtar mov r0,a ; "1" - "anahtar" mov acc.7,c'ye göre yayınlandı; eğer D7=1 ise - tarama kodunun önüne 0f0h acall send_key gelecektir; tarama kodunun verilmesi pop acc sjmp loop2a loop2 push acc mov a,r0 rlc a mov r0,a pop acc loop2a rl a djnz 1,loop3 mov 6,r2 sjmp loop send_key mov ie,#80h ; send2comp çağrısı devre dışı bırakılır; tarama kodu gönderiliyor mov yani,#85h ; kesintiler etkin ret send2comp jnb acc.7,send ; gerekirse, 0f0h push acc mov a,#0f0h acall gönder pop acc clr acc.7 mov b,#200 l9 nop djnz b,l9 gönder push 1 push 0 clr p3.3 ; P3.3 - KBVeri hareketi b,#6; başlangıç ​​bitinin verilmesi l10 nop djnz b,l10 clr p3.5 mov b,#15 l2 nop djnz b,l2 setb p3.5 mov b,#6 l3 nop djnz b,l3 mov r0,#8 ; sekiz veri biti çıkışı ve eşlik sayımı mov r1,#1 byte_loop xrl 1h,a rrc a mov p3.3,c mov b,#6 l6 nop djnz b,l6 clr p3.5 mov b,#15 l4 nop djnz b, l4 setb p3.5 mov b,#6 l5 nop djnz b,l5 djnz r0,byte_loop mov a,r1 mov c,acc.0 mov p3.3,c ; çıkış eşlik biti mov b,#6 l8 nop djnz b,l8 clr p3.5 mov b,#15 l12 nop djnz b,l12 setb p3.5 mov b,#6 l13 nop djnz b,l13 setb p3.3 ; çıkış durdurma biti mov b,#6 l7 nop djnz b,l7 clr p3.5 mov b,#15 l11 nop djnz b,l11 setb p3.5 mov b,#200 l14 nop djnz b,l14 setb p3.5 pop 0 pop 1 ret from_keyboard ; bir baytın denetleyiciye aktarımı mov ie,#80h push psw push acc push b mov b,#2 in6 jnb p3. 4,in8 djnz b,in6 sjmp in7 in8 mov b,#10 in1 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in1 in2 mov a,p3 rl a orl a,#11010111b mov p3,a jb p3.4,in2 djnz b,in1 in3 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in3 mov p3,#0ffh in4 jb p3.5,in4 in5 jnb p3 .3,in7 clr p3.4 jnb p3.5,in5 in7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov ie,#85h reti to_keyboard ; bir baytı klavyeye aktarma mov ie,#80h push psw push acc push b mov b,#5 out61 jb p3.5,out7 djnz b,out61 setb p3.4 setb p3.2 out62 jnb p3.5,out62 out6 mov c ,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out6 out8 mov b,#10 out1 mov c,p3.4 mov p3.5,c mov c , p3.3 mov p3.2,c jnb p3.4,out1 out2 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out2 djnz b, out1 out3 mov c,p3.4 mov p3.5,c mov c,p3.2 mov p3.3,c jnb p3.2,out3 out7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov yani ,#85h reti hat_table ; P1 bağlantı noktasından okunan verileri genişletme tablosu; tablodaki indeks dört bitlik bir ikili koddur; veri - taklit edilen sekiz anahtarın durumu; "0" - tuşa basıldı db 0ffh ; sol+sağ+yukarı+aşağı=yasak kombinasyon db 0ffh ; sol+sağ+aşağı=yasak kombinasyon db 0ffh ; sol+yukarı+aşağı=yasak kombinasyon db 0bfh ; sol+aşağı=sol-aşağı db 0ffh ; sol+sağ+yukarı=yasak kombinasyon db 0ffh ; sol+sağ=yasak kombinasyon db 07fh ; sol+yukarı=sol-yukarı db 0f7h ; sol db 0ffh ; sağ+yukarı+aşağı=yasak kombinasyon db 0dfh ; aşağı+sağ=aşağı-sağ db 0ffh ; yukarı+aşağı=yasak kombinasyon db 0fbh ; aşağı db 0efh; sağ+yukarı=sağ yukarı db 0fdh ; sağ db 0feh; yukarı db 0ffh; hiçbir tuşa basılmadı key_table ; tarama kodu tablosu db 75h; sayısal tuş takımı 8 db 74h; sayısal tuş takımı 6 db 72h; sayısal tuş takımı 2 db 6bh; sayısal tuş takımı 4 db 7dh; sayısal tuş takımı 9 db 7ah; sayısal tuş takımı 3 db 69h; sayısal tuş takımı 1 db 6ch; sayısal tuş takımı 7

Tools.zip arşivinde iki program bulacaksınız: a51.exe - bir montajcı, hex2bin - birleştiricinin çıkışında elde edilen hex dosyalarının, mikrodenetleyici ROM'unu bir programlayıcıyla flaşlamak için uygun bir ikili formata dönüştürücüsü .

Montaj ve Sorun Giderme

Cihazı yukarıdaki şemaya göre bir devre tahtası, evde kazınmış veya endüstriyel olarak üretilmiş bir tahta üzerine monte edebilirsiniz. Mikrodenetleyicinin altına mutlaka soket konulmalıdır. 2-3 adet 16 pinli DIP paketi için kartta yer bırakmak en iyisidir - bunlar sonraki sürümlere eklenecektir.

Daha sonra istenilen değişiklikler yapıldıktan sonra a51.exe programı kullanılarak mikro programın kaynak metni birleştirilir. Ürün yazılımını programlayıcıyla flaşlamak için, ortaya çıkan hex dosyası, hex2bin.exe programı tarafından ikili bir görüntüye dönüştürülür.

Cihazı tamamen monte ettikten sonra klavyeye ve bilgisayara bağlarız. Üç... İki... Bir... Hadi gidelim!.. İyi olduğu bilinen bileşenlerden doğru şekilde monte edilmiş bir cihazın hemen çalışması gerekir. Değilse, doğru kurulumu ve mikro denetleyicide güç olup olmadığını kontrol edin. Bir osiloskop kullanarak saat üretecinin çalışıp çalışmadığını ve güç açıldığında RST girişine yüksek seviyeli bir darbe gelip gelmediğini kontrol edin. Klavyedeki tuşlara basıldığında, P3.3 ve P3.5 satırlarındaki darbeler, biraz gecikmeyle sırasıyla P3.2 ve P3.4 satırlarındaki darbeleri tekrarlamalıdır. Cihaz düğmelerine bastığınızda/bıraktığınızda, P3.3 ve P3.5 satırlarında da darbeler görünmelidir. Bu işe yaramazsa bana yazın ( döküntü en ayrılmak nokta ru) klavyenizin, anakartınızın/çoklu kartınızın, kullanılan mikro denetleyicinizin modelini ve tipini (AT, PS/2) ve kullanılan sıklığı belirten hata raporu kuvars rezonatör. Cihazı kullanabileceğim maksimum sayı ile test etmeye çalıştım anakartlar ve klavyeler - herhangi bir sorun tespit edilmedi. Benim durumumda 14,2 MHz kuvars kullanıldı.

Bilinen hatalar

Firmware'in mevcut sürümü aşağıdaki kusurları içeriyor:

  • Çift baytlı tarama kodları izlenmez. Bu, bazen kulübeyi ve klavyeyi aynı anda kullanırken klavye tuşlarının basıldığında "donmasına" veya yanlış algılanmasına neden olur;
  • Bazen veriler denetleyiciden klavyeye hatalı şekilde aktarılır. Bu, örneğin Num Lock, Caps Lock, Scroll Lock tuşlarına basıldığında LED'lerin durumlarının değişmemesiyle ifade edilebilir;
  • Kulübe düğmelerinin temas noktalarının takırdaması. Şu ana kadar oyunlarda bu benim için ölümcül olmadı.

Gelecek planları

Gelecekteki sürümlerde uygulamak istediklerimin kısa bir listesi:

  • Küçük hata düzeltmeleri - daha doğru sinyal işleme; çift ​​baytlı tarama kodlarının izlenmesi;
  • 16x4 matris bağlantısı - 64 adede kadar düğme veya iki kulübe ve 56 adede kadar düğme desteği;
  • Mikrodenetleyici ROM'unda saklanan 16'ya kadar farklı tarama kodu düzenini destekler;
  • 32'ye kadar tarama kodu düzenini "anında" kaydetme ve yeniden programlama özelliğine sahip bir NVRAM yongasının bağlantısı.

Çözüm

Cihazımın çalışma prensibini anlamak için gerekli tüm verileri sunmaya çalıştım. Bu açıklamanın teknik olarak %100 doğru olduğu iddia edilmemektedir. Eğer bir konuda yanılıyorsam, lütfen bana olaylara bakış açınızı söyleyin. Devremde ve/veya donanım yazılımımda iyileştirmeler ve eklemeler yapabilirseniz, devrenin daha da geliştirilmesine yönelik fikirleriniz varsa lütfen bana bildirin. Ayrıca bu cihazı diğer mikrodenetleyici türlerine kopyalayabilen veya uyarlayabilen ustalardan bilgi bekliyorum.

Vladimir "Rasp" Klimus (döküntü en İngiltere nokta açık)

  1. Google Play penceresinin üst kısmında Arama dizisi. Bu tam olarak kullanacağımız şey. Uygulamamızın ismini aktif edip yazıyoruz. Tamamen girmek gerekli değildir. Ekran görüntüsünde belirtilen nesne arama sonuçlarında göründüğünde üzerine dokunmanız yeterlidir.
  1. Programın ana sayfasına yönlendirileceğiz. “INSTALL” yazan büyük yeşil bir düğme var. Tıkla.
  1. Uygulamanın indirilmesinin tamamlanmasını bekliyoruz. Ağırlığı 5 MB'ın biraz altında olduğu için işlem fazla zaman almayacaktır.
  1. Hazır. Otomatik kurulum tamamlandıktan sonra programı direkt olarak buradan başlatabiliriz.
  1. Ayrıca ana ekran(ayarlarda etkinleştirildiyse) bir başlatma kısayolu görünecektir.

Bu noktada programın kurulumu tamamlandı ve onunla çalışmaya genel bir bakışa geçebiliriz.

Aşağıdaki ekran görüntüsünde görüyorsunuz yazılım arayüzü. Burada 3 ana sekmeye ayrılmıştır. Ayrıca dişli şeklinde yapılmış bir ayarlar simgesi de bulunmaktadır. Ana “TARAMA” sekmesinde 4 ana araç vardır:

  • Barkodu tarayın. Bu, bir kamera aracılığıyla çalışan bir QR tarayıcıdır;
  • Manuel Giriş. Manuel kod veri girişi işlevi;
  • Dosyadan Kod Çözme. Bir dosyadan kod çözme. Buradan daha önce indirdiğiniz QR kodunu açıp okuyabilirsiniz;
  • Url'den kod çözme. Bağlantıya göre tarayın.

Alt kısımda kullanışlı işlevsellik sağlamayan birkaç düğme vardır. Onlara dikkat etmemelisiniz.

Program ayarlarına bakalım. Burada onlardan oldukça fazla var. Ekranlarınızda farklı konfigürasyon alanlarının ekran görüntüleri olacak, ancak biz sadece en ilginç noktalardan bazılarını dile getireceğiz.

Örneğin ilk ekranda programın sesini etkinleştirebilir veya devre dışı bırakabilirsiniz. Aynı şey titreşim tepkisi için de yapılabilir. Ana menüyü atlayarak programın tarayıcıdan hemen çalışmaya başlayacağı çalışma modunu ayarlayabilirsiniz. Bir diğer önemli özellik ise verilerin panoya otomatik olarak kopyalanmasıdır.

Taramayı başlatmak ve tarayıcıyı kendisi başlatmak istediğimizde program gerekli sistem kaynaklarına erişim isteyecektir. Doğal olarak çözülmesi gerekiyor. Ekran görüntüsünde işaretlenen düğmeye tıklayın.

Daha sonra tarayıcı çerçevesini, yatay şerit doğrudan QR'nin üzerine düşecek şekilde konumlandırıyoruz. Ellerinizi sıkmamaya çalışın ve aynı zamanda odaklanmanıza dikkat edin. Normal keskinlik olmadan tarama başarılı olmaz.

QR BARKOD TARAYICININ düşük ışık koşullarında çalışabilmesi için bir arka ışık bulunmaktadır.

Kod tanındıktan sonra aşağıdaki ekran görüntüsünde gösterilen bilgileri göreceksiniz.

QR'leri taramanın yanı sıra bunları burada da oluşturabilirsiniz. Bunu yapmak için üçüncü sekmeye gidin. Ekran görüntüsünde işaretledik. Liste şifrelenebilecek tüm veri türlerini gösterir. Aşağıdakiler desteklenmektedir:

  • telefon rehberi iletişim bilgileri;
  • telefon numarası;
  • URL'si;
  • E-posta;
  • başvuru;
  • konum;
  • herhangi bir metin;
  • yer imi;
  • takvim etkinliği.

Her şey şuna benziyor:

Veri tipini seçip belirledikten sonra tek yapmamız gereken “Kodla” butonuna tıklamak. Bu durumda bağlantıyı şifreledik.

İsteğe bağlı metni de şifrelemeye çalışalım. Bunu yapmak için istediğiniz öğeyi seçin.

İfadeyi belirlenen alana girin ve “Kodla” düğmesine basın.

Sonuç harika görünüyor. Rengini de değiştirelim. Bunun için tasarlanan düğmeye tıklayın.

Paletten istediğiniz rengi seçin.

Ve alınan QR'ye hayranız.

Etkileyici işlevselliğe sahip bir sonraki programa geçelim.

QR Droid Kod Tarayıcı

Google Play'de bulunabilecek başka bir uygulama. Ayrıca Google web sitesindeki doğrudan bir bağlantıdan da indirebilirsiniz. Şimdilik programın kendisine bakacağız.

QR Droid Kod Tarayıcı başlatma kısayolu böyle görünüyor; üzerine tıklayın.

Bu uygulama, öncekinden farklı olarak Rusça yapılmıştır ve başlar başlamaz “BAŞLAYIN” yazan butona tıklamamız gerekecek.

Tarayıcı hemen görünür, ancak önce ayarlarına bakalım. Sağ üst köşede bulunan düğmeye dokunun.

Ana menüde kullanıcıyı istenilen bölüme yönlendiren 6 adet buton döşemesi görülmektedir. İşte buradalar:

Bu nedenle, tarayıcıyı kullanmak için ana menüde etkinleştirmeniz ve QR kodunu işaretleyerek "Oku" düğmesine basmanız gerekir.

Burada başlangıç ​​ekranını seçersiniz, adresi ayarlarsınız. Kopyayı rezerve et ve yazılım arayüzünün dili yapılandırılır.

Daha sonra tarama mekanizmasını kurabiliriz. Tescilli algoritmalardan biri kullanılır: Zapper veya ZXing. Aşağıda artı işaretini etkinleştirebilir veya devre dışı bırakabilirsiniz, yapılandırabilirsiniz otomatik eylem taradıktan sonra araç ipuçlarının görüntülenmesini veya bağlantının panoya kopyalanmasını etkinleştirin.

Bu bölüm yapılandırır ses eşliği, titreşim açılır ve kapanır. Eylemlerin günlüğe kaydedilmesi ve bunlarla etkileşim süreci akıllı saat Android Giyim.

Daha sonra ihracat veya ithalat yapabileceğiz yedek kopya veya bir tarih belirleyin.

Anonim verilerin gönderilmesine izin verin (bunu devre dışı bırakmak daha iyidir), tarama sırasında alınan güvenlik bağlantısının doğrulanmasını etkinleştirin veya toplu taramayı yapılandırın. Yakınlaştırma veya vurgulama gibi özellikler aşağıda mevcuttur.

Ancak ayarlarımız burada bitmiyor. Yukarıdaki işlevlere ek olarak aşağıdakilere de sahibiz:

  • ekran yönünü ayarlama;
  • ön kamerayla çalışmak;
  • bağlantı ayrıştırma;
  • mağazaların sergilenmesi.
  • genişletilmiş kayma fonksiyonu;
  • bazı özel karakterlerin yasaklanması;
  • WEB önizlemesinin etkinleştirilmesi;
  • kayıtlı görüntüleri arayın.

Son ayarlar ekranı, maksimum konum sayısını ayarlama, özel CSV'leri yapılandırma, akıllı saati sallama ve yinelenen konumları kaydetme gibi ilginç özellikler içerir.

Ayarlara ek olarak QR Droid Kod Tarayıcı menüsünde "Diğer" adlı bir öğe bulunur. İşlevselliğini düşünelim.

İşte aşağıdaki olasılıklar:

Listemizdeki son fakat daha az işlevsel olmayan uygulamaya bakalım.

NeoReader QR ve Barkod Tarayıcı

Bu programı, diğerleri gibi, üzerinden indirip yükleyebilirsiniz. Google Oyun veya doğrudan bağlantı yoluyla. Bu yapıldığında, doğrudan onunla çalışmaya devam edebilirsiniz.

İlk başlattığımızda erişim talebini karşılamamız gerekecek. İzin Ver" i tıklayın".

Daha sonra bir ayarlar penceresi görünecektir. Burada bir dil seçebilir, ülkenizi, cinsiyetinizi ve yaşınızı belirtebilirsiniz. Aşağıdaki iki onay kutusu, programın coğrafi verilere erişimini etkinleştirmenize veya devre dışı bırakmanıza olanak tanır.

Aslında taramaya başlayabilirsiniz. Kameranızı QR koduna doğrultun; NeoReader QR ve Barkod Tarayıcı, içeriğini otomatik olarak tanıyacaktır.

Bu üç programın herhangi bir kişi için tamamen yeterli olduğunu düşünüyoruz. Sizin için en uygun olanı seçin ve kendi takdirinize göre kullanın. Çin cihazlarının bazı özelliklerinden bahsedeceğiz.

Standart işlevsellik

Bazı akıllı telefon ve tabletlerde (markaya bağlı olarak) standart olarak QR kod tarama işlevi bulunur ve her şey uygulama olmadan yapılabilir. Hepsini listelemeyeceğiz, sadece Xiaomi modeline değineceğiz.

Özetleyelim

Sonuç olarak Android'de QR kodunu nasıl tarayacağımızı öğrendik Farklı yollar. Makalenin sizin için yararlı olduğunu umuyoruz. Hala sorularınız varsa, yorumlarda onlara sorun. Herkese yardım etmeye çalışacağız.

Bu gerçekleşmese bile sitedeki kullanıcılardan biri size bu durumdan nasıl çıkacağınızı mutlaka anlatacak ve pratik tavsiyeler verecektir. Tek yapmanız gereken onu hayata geçirmek.

Video talimatı




Tepe