Sebuah keyboard seperti miniatur komputer. keyboard mempunyai prosesor sendiri dan rangkaian sirkuit yang membawa informasi menuju dan dari prosesor tersebut. Bagian terbesar dari rangkaian keyboard berupa “key matrix”. Key matrix adalah sebuah kisi rangkaian dibawah tombol-tombol keyboard. Di dalam keyboard, tiap rangkaiannya terputus (seperti saklar) pada titik dibawah tiap tombol. Ketika kita menekan sebuah tombol, tombol tersebut menekan sebuah saklar, menjadikan rangkaian tersambung dan mengalirkan arus listrik melaluinya. Jika kita menekan lama pada satu tombol, prosesor mengenalinya sama dengan menekan tombol tersebut berulang-ulang Tata kerja keyboard PC Setiap kali salah satu tombol keyboard ditekan atau dilepas, keyboard akan mengirim kode ke host (host adalah komputer kalau keyboard dihubungkan ke PC, atau berupa mikrokontroler kalau keyboard dihubungkan ke perlatan berbasis mikrokontroler). Kode tersebut dinamakan sebagai scan code.Scan code tombol ‘S’ adalah 1B (angka heksadesimal setara dengan angka biner 00011011). Ketika tombol ‘S’ ditekan keyboard akan mengirim 1B, jika tombol ‘S’ ditekan terus maka keyboard akan mengirimkan 1B berikutnya terus menerus, sampai ada tombol lain yang ditekan atau tombol ‘S’ tadi dilepas. Keyboard juga mengirim kode saat ada satu tombol yang dilepas, kodenya adalah F0 (angka heksadesimal setara dengan angka biner 11110000), jadi kalau tombol ‘S’ tadi dilepas keyboard akan mengirim F0 dan 1B. Kode-kode tersebut dikirim keyboard secara seri, artinya dikirimkan satu bit demi satu bit. Misalnya 1B dikirimkan dengan cara : mula-mula dikirim ‘1’, sesaat kemudian ‘1’ lagi dan menyusul ‘0’ sampai akhirnya terkirim sebanyak 8 bit yang berbentuk 00011011 (dikirim mulai dari bit yang paling kanan kemudian beregeser satu per satu sampai yang paling kiri).Masing-masing tombol punya scan code sendiri, termasuk tombol ‘shift’, tombol ‘ctrl’ dan lain lain, jadi jika tombol ‘ctrl’ ditekan bersama dengan ‘S’, maka scan code yang dikirim adalah 14 (scan code untuk ‘ctrl’) dan 1B (scan code untul ‘S’). Terserah host untuk mengintepretasi scan code itu sebagai apa, bearti merupakan tugas program dalam mikrokontroler untuk mengenal scan code. Scan code disusun sebagai kode 8 bit bisa dipakai untuk membedakan 256 macam kode, sedangkan keyboard PC hanya punya 101 tombol, jadi sesungguhnya kode 8 bit tadi cukup untuk semua tombol. Tapi tombol di keyboard PC dikelompokkan menjadi 2 bagian, bagian utama dan bagian tambahan, bagian utama cukup dinyatakan dengan scan code 1 byte saja, sedangkan bagian tambahan diwakili dengan beberapa byte scan code yang selalu diawali dengan E0. Misalnya tombol ‘ctrl’ kiri diwakili dengan 14 sedangkan tombol ‘ctrl’ kanan diwakili dengan E0 14. Komunikasi antar keyboard dan host adalah komunikasi dua arah, keyboard mengirim scan code ke host, host bisa mengirim perintah untuk mengatur kerja dari key board. Kode perintah untuk keyboard tidak sebanyak scan code.Gambar 1 : menggambarkan scan code masing-masing tombol keyboard PC. Terlihat pada gambar tersebut, scan code tidak berupa kode ASCII yang biasa dipakai mewakili huruf , dan ditentukan secara acak, juga. Sehingga setelah diterima host, scan code harus dirubah menjadi kode ASCII dengan memakai cara ‘pencarian tabel’. Rangkaian penghubung Keyboard PC dibangun dengan mikrokontroler MCS48, yang merupakan saudara tua MCS51 tapi jauh lebih sederhana. Untuk keperluan membentuk rangkaian penghubung tidak perlu diketahui bagaimana cara kerja mikrokontroler dalam keyboard, tapi cukup meninjau rangkaian elektronik bagian penghubung pada gambar. Bagian penghubung di dalam Keyboard PC Yang menarik, rangkaian sederhana ini bisa dipakai untuk komunikasi data 2 arah, yakni keyboard mengirimkan scan code ke PC, atau PC mengirimkan perintah-perintah ke keyboard, misalkan perintah untuk menyalakan beberapa lampu yang ada di keyboard. Kbd Clock dibangkitkan oleh MCS48, merupakan sinyal pendorong Kbd Data yang bisa bersumber dari keyboard maupun bersumber dari PC. Level tegangan pada kedua sinyal ini memenuhi standar sinyal TTL biasa, jadi bisa langsung dihubungkan ke AT89C2051.Sebagai contoh Kbd Clock dihubungkan ke Port 3 bit 2 (kaki 6 AT89C2051) dan Kbd Data dibuhungkan ke Port 3 bit (kaki 7), dalam program hal ini dinyatakan dengan baris 1 dan baris 2 Potongan Program 1. Dengan adanya pernyataan di baris 1 dan 2, selanjutnya dalam program tidak disebutkan lagi P3.2 atau P2.3, tapi ditulis KBDclock atay KBDdata sehingga program lebih enak dibaca. Kalau program ini dipakai di proyek lain yang Port 3 bit 2 dan bit 3-nya dipakai untuk keperluan lain, Kbd Clock dan Kbd Data bisa saja dihubungkan ke port lain, asalkan baris 1 dan 2 disesuaikan dengan perubahan itu.Potongan Program 1 Pernyataan pemakaian Port1 KBDclock bit P3.2 ; P3.2 dihubungkan ke KBDclock2 KBDdata bit P3.3 ; P3.3 dihubungkan ke KBDdataSumber daya untuk keyboard dicatu dari luar, harus diperhatikan kebutuhan arusnya cukup besar bisa sampai sekitar 300 mA. Pengiriman data dari Keyboard. Sinyal pengiriman data dari Keyboard. Saat tidak ada pengiriman data, sinyal Kbd Clock dan Kbd Data dalam keadaan ‘1’. Sinyal pengiriman data dari keyboard dijelaskan sebagai berikut :1.Data mulai dikirimkan dengan me-nol-kan Kbd Data sebagai tanda mulai pengiriman (start bit), berapa saat kemudian setelah Kbd Data stabil disusul Kbd Clock berubah menjadi ‘0’ dan kembali ke ‘1’ lagi, ini berarti selesai mengirimkan data 1 bit.2.Setelah mengirim ‘start bit’, dikirimkan bit 0, bit 1 dan seterusnya sampai bit 7.3.Menyusul dikirim ‘parity bit’, yaitu bit kontrol yang berguna bagi host penerima data untuk memastikan data yang diterima tidak ada kesalahan. Jika banyaknya bit ‘1’ yang terdapat di bit 0 sampai bit 7 ganjil, ‘parity bit’ akan bernilai ‘1’.4.Sebagai penutup (stop bit) Kbd Data dikembalikan kekeadan normalnya, yaitu ‘1’. Tabel ASCII