this program is based on the PS/2 keyboard library and the LCD library, the lcd display whatever input is coming from the PS/2 keyboard.

Dependencies:   TextLCD mbed

Committer:
edwinb
Date:
Tue Mar 08 16:07:19 2011 +0000
Revision:
1:2178724f96f1
Parent:
0:3774ff2f9a59
a small typo in the code has been fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edwinb 0:3774ff2f9a59 1 #include "PS2ASCII.h"
edwinb 0:3774ff2f9a59 2
edwinb 0:3774ff2f9a59 3 //===================================
edwinb 0:3774ff2f9a59 4 //*Constructor*
edwinb 0:3774ff2f9a59 5 //===================================
edwinb 0:3774ff2f9a59 6
edwinb 0:3774ff2f9a59 7 PS2ASCII::PS2ASCII(PinName data, PinName clk) : kbd(data,clk) ,_caps(false), _shift(false), _E0flag(false) ,_numlock(false)
edwinb 0:3774ff2f9a59 8 {
edwinb 0:3774ff2f9a59 9
edwinb 0:3774ff2f9a59 10 }
edwinb 0:3774ff2f9a59 11
edwinb 0:3774ff2f9a59 12 //===================================
edwinb 0:3774ff2f9a59 13 //Functions
edwinb 0:3774ff2f9a59 14 //===================================
edwinb 0:3774ff2f9a59 15
edwinb 0:3774ff2f9a59 16 unsigned char PS2ASCII::getChar()
edwinb 0:3774ff2f9a59 17 {
edwinb 0:3774ff2f9a59 18 while(1)
edwinb 0:3774ff2f9a59 19 {
edwinb 0:3774ff2f9a59 20 _E0flag = false;
edwinb 0:3774ff2f9a59 21 unsigned char keypress = kbd.rd(); //code in
edwinb 0:3774ff2f9a59 22
edwinb 0:3774ff2f9a59 23 if(keypress == 0xE0) //is it a special E0 key?
edwinb 0:3774ff2f9a59 24 {
edwinb 0:3774ff2f9a59 25 keypress = kbd.rd(); //next byte in
edwinb 0:3774ff2f9a59 26 if(keypress == NULL) //is it a break code?
edwinb 0:3774ff2f9a59 27 {
edwinb 0:3774ff2f9a59 28 keypress = kbd.rd(); //if so chew it up and back to start
edwinb 0:3774ff2f9a59 29
edwinb 0:3774ff2f9a59 30 continue;
edwinb 0:3774ff2f9a59 31 }
edwinb 0:3774ff2f9a59 32
edwinb 0:3774ff2f9a59 33 _E0flag = true; //tell us that it is an E0 function
edwinb 0:3774ff2f9a59 34 return keypress;
edwinb 0:3774ff2f9a59 35 }
edwinb 0:3774ff2f9a59 36
edwinb 0:3774ff2f9a59 37 if((keypress == 0x12) || (keypress == 0x59)) //SHIFT pressed?
edwinb 0:3774ff2f9a59 38 {
edwinb 0:3774ff2f9a59 39 _shift = true;
edwinb 0:3774ff2f9a59 40 continue;
edwinb 0:3774ff2f9a59 41 }
edwinb 0:3774ff2f9a59 42
edwinb 0:3774ff2f9a59 43 if(keypress == NULL) //gets rid of byte 1 of break code
edwinb 0:3774ff2f9a59 44 {
edwinb 0:3774ff2f9a59 45 keypress = kbd.rd(); //byte 2 of break code in
edwinb 0:3774ff2f9a59 46
edwinb 0:3774ff2f9a59 47 if((keypress == 0x12) || (keypress == 0x59))
edwinb 0:3774ff2f9a59 48 {
edwinb 0:3774ff2f9a59 49 _shift = false;
edwinb 0:3774ff2f9a59 50 }
edwinb 0:3774ff2f9a59 51 continue;
edwinb 0:3774ff2f9a59 52 }
edwinb 0:3774ff2f9a59 53
edwinb 0:3774ff2f9a59 54 switch (keypress) {
edwinb 0:3774ff2f9a59 55 case 0x58:
edwinb 0:3774ff2f9a59 56 _caps = !_caps; //CAPS LOCK key
edwinb 0:3774ff2f9a59 57 continue;
edwinb 0:3774ff2f9a59 58 case 0x80:
edwinb 0:3774ff2f9a59 59 _numlock = !_numlock;
edwinb 0:3774ff2f9a59 60 continue;
edwinb 0:3774ff2f9a59 61 default:
edwinb 0:3774ff2f9a59 62 break;
edwinb 0:3774ff2f9a59 63 }
edwinb 0:3774ff2f9a59 64
edwinb 0:3774ff2f9a59 65 unsigned char initial_keypress = keypress;
edwinb 0:3774ff2f9a59 66
edwinb 0:3774ff2f9a59 67 if(_shift == true) //if SHIFT is pressed take shifted character
edwinb 0:3774ff2f9a59 68 {
edwinb 0:3774ff2f9a59 69 keypress = shift_on[keypress];
edwinb 0:3774ff2f9a59 70 }
edwinb 0:3774ff2f9a59 71
edwinb 0:3774ff2f9a59 72 if((_caps == true)&&(initial_keypress >= 97)&&(initial_keypress <= 127))
edwinb 0:3774ff2f9a59 73 {
edwinb 0:3774ff2f9a59 74 keypress = shift_on[keypress]; //if caps is on shift the letter up
edwinb 0:3774ff2f9a59 75 }
edwinb 0:3774ff2f9a59 76
edwinb 0:3774ff2f9a59 77 return(keypress);
edwinb 0:3774ff2f9a59 78
edwinb 0:3774ff2f9a59 79 }
edwinb 0:3774ff2f9a59 80 }
edwinb 0:3774ff2f9a59 81
edwinb 0:3774ff2f9a59 82 bool PS2ASCII::E0flag()
edwinb 0:3774ff2f9a59 83 {
edwinb 0:3774ff2f9a59 84 return _E0flag;
edwinb 0:3774ff2f9a59 85 }
edwinb 0:3774ff2f9a59 86
edwinb 0:3774ff2f9a59 87 bool PS2ASCII::numlock()
edwinb 0:3774ff2f9a59 88 {
edwinb 0:3774ff2f9a59 89 return _numlock;
edwinb 0:3774ff2f9a59 90 }
edwinb 0:3774ff2f9a59 91
edwinb 0:3774ff2f9a59 92