PIC18F452 PS/2インターフェイスの実験(キーボードの接続)

PS2キーボードとPC(PIC)間はシリアル通信にてデータの送受信が行われています。
キーボードに使われるコネクタは6ピンのミニDINプラグと呼ばれるもので、6ピンのうち4ピンが実際に使われています。

ピン#
1:IO DATA
3:   GND
4:   +5V DC
5:IO CLOCK

今回PICと接続予定のPS2キーボードです。

PS2キーボード 18F452


PICとの接続は、+5V、GNDのほかにDATA信号、クロック信号の合計4線分を準備します。
また、DATAとクロックはプルアップが必要になります。

PS2インターフェイス 回路図

mikroCでキーボードと通信する際の注意点を列挙すると、
1:PICのクロック周波数は6MHz以上
2:DATA,CLOCKはプルアップをする
3:PICからキーボードに対してコマンドは発行できない。
  キーボード上のLEDを点灯することができない。

mikroCのキーボード関連のライブラリ

void Ps2_Init(unsigned short *port);
ポートを指定して初期化。指定ポートのピン0(PORTB.F0)がDATAに、ピン1(PORTB.F1)がクロックになります。

void Ps2_Config(unsigned short *port, unsigned short clock, unsigned short data);
ポートとピンを指定して初期化。

unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed);
キーボードから押し下げ情報を取得。
戻り値:1−>取得成功
     0−>取得失敗
value:取得した情報(アスキー値)が格納される。
special:取得した情報がファンクションキー等特殊なキーだった場合に1、それ以外は0

Key Value returned
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9
F10 10
F11 11
F12 12
Enter 13
Page Up 14
Page Down 15
Backspace 16
Insert 17
Delete 18
Windows 19
Ctrl 20
Shift 21
Alt 22
Print Screen 23
Pause 24
Caps Lock 25
End 26
Home 27
Scroll Lock 28
Num Lock 29
Left Arrow 30
Right Arrow 31
Up Arrow 32
Down Arrow 33
Escape 34
Tab 35


pressed:キーが押されていれば1、おされていなければ0


Ps2_Key_Readは、キーボードのキーを押し下げたときと離したときの両方で戻り値として1を返します。
3番目の引数はキーを押したときか離したときかを区別するために使います。
1番目の引数は押したとき、離したときの両方で同じ値が代入されます。
キーを押して何か処理する場合は必ず、3番目の引数で押されているときの読み取りかチェックして処理すれば
キーを離したときに同じ処理を2回することはなくなるとおもいます。

// KeyPressed確認プログラム
while(1){
 if (Ps2_Key_Read(&KeyValue, &KeySpecial, &KeyPressed)) {
  Lcd_Cmd(LCD_CLEAR);
  Lcd_Cmd(LCD_RETURN_HOME);
  Lcd_Chr_Cp(KeyValue);
  if(KeyPressed==1){
   Lcd_Out_Cp(" KeyPressed YES");
  }else{
   Lcd_Out_Cp(" KeyPressed NO");
  }

 }
}


PS/2プロトコル PICとPS/2キーボードを接続する際の注意事項






戻る
TOPへ