PS/2 Library
The mikroC PRO for 8051 provides a library for communication with the common PS/2 keyboard.
Notes:
- The library does not utilize interrupts for data retrieval, and requires the oscillator clock to be at least 6MHz.
- The pins to which a PS/2 keyboard is attached should be connected to the pull-up resistors.
- Although PS/2 is a two-way communication bus, this library does not provide MCU-to-keyboard communication; e.g. pressing the Caps Lock key will not turn on the Caps Lock LED.
External dependencies of PS/2 Library
| The following variables must be defined in all projects using PS/2 Library: | Description : | Example : |
|---|---|---|
extern sfr sbit bdata PS2_DATA; |
PS/2 Data line. | sbit PS2_DATA at P0_0_bit; |
extern sfr sbit bdata PS2_CLOCK; |
PS/2 Clock line. | sbit PS2_CLOCK at P0_1_bit; |
Library Routines
Ps2_Config
| Prototype |
void Ps2_Config(); |
|---|---|
| Returns |
Nothing. |
| Description |
Initializes the MCU for work with the PS/2 keyboard. |
| Requires |
Global variables :
|
| Example |
// PS2 pinout definition sbit PS2_DATA at P0_0_bit; sbit PS2_CLOCK at P0_1_bit; ... Ps2_Config(); // Init PS/2 Keyboard |
Ps2_Key_Read
| Prototype |
unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed); |
|---|---|
| Returns |
|
| Description |
The function retrieves information on key pressed. Parameters :
|
| Requires |
PS/2 keyboard needs to be initialized. See Ps2_Config routine. |
| Example |
unsigned short value, special, pressed;
...
// Press Enter to continue:
do {
if (Ps2_Key_Read(&value, &special, &pressed)) {
if ((value == 13) && (special == 1)) break;
}
} while (1);
|
Special Function Keys
| 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 |
Library Example
This simple example reads values of the pressed keys on the PS/2 keyboard and sends them via UART.
unsigned short keydata = 0, special = 0, down = 0;
// PS2 module connections
sbit PS2_DATA at P0_0_bit;
sbit PS2_CLOCK at P0_1_bit;
// End PS2 module connections
void main() {
UART1_Init(4800); // Initialize UART module at 4800 bps
Ps2_Config(); // Initialize PS/2 Keyboard
Delay_ms(100); // Wait for keyboard to finish
UART1_Write_Text("Ready");
UART1_Write(10); // Line Feed
UART1_Write(13); // Carriage return
do {
if (Ps2_Key_Read(&keydata, &special, &down)) {
if (down && (keydata == 16)) {// Backspace
UART1_Write(0x08);
}
else if (down && (keydata == 13)) {// Enter
UART1_Write('r'); // send carriage return to usart terminal
//Usart_Write('n'); // uncomment this line if usart terminal also expects line feed
// for new line transition
}
else if (down && !special && keydata) {
UART1_Write(keydata);
}
}
Delay_ms(10); // debounce
} while (1);
}
HW Connection

Example of PS2 keyboard connection
Copyright (c) 2002-2013 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
What do you think about this topic ? Send us feedback!



