Just as a PC software, that are being used in PCs to increase the typing skill and speed in a computer keyboard, this device has been developed to do the same job but without any PC. The device has a PS/2 keyboard port to connect a computer PS/2 keyboard (not an USB keyboard) and a LCD screen to display. When the circuit is assembled and programmed, a PS/2 keyboard has to be connected at the PS/2 socket provided in the device and it then serves as a portable TYPING ENHANCER. It needs only a 5V power supply and nothing else. It has no connection with PC.

Software Structure
PS/2 KEYBOARD PROTOCOL
– 8 data bits (LSB first);
– 1 parity bit (if number of ones is even, then parity bit = 1);
– 1 stop bit (always 1).

NOTE:- As I said previously, the PS/2 working and its protocol is a vast topic and needs to be studied separately. I have tried to produce a short description before you; here I would notify you that the communication described above is only by the KEYBOARD to HOST i.e. when the keyboard talks to the host, the above communication protocol is used. But when the HOST wants to communicate to the KEYBOARD, the communication protocol will be again different from it. In this project, we don’t need the HOST to KEYBOARD protocol and so it is omitted. Also, there are in total three SCAN CODE set but here I have shown you only the SCAN CODE set 2 as I have experimented only with that SCAN CODE set.
SCAN CODE
KEY
|
MAKE
|
BREAK
|
KEY
|
MAKE
|
BREAK
|
KEY
|
MAKE
|
BREAK
|
A
|
1C
|
F0,1C
|
9
|
46
|
F0,46
|
[
|
54
|
FO,54
|
B
|
32
|
F0,32
|
`
|
0E
|
F0,0E
|
INSERT
|
E0,70
|
E0,F0,70
|
C
|
21
|
F0,21
|
–
|
4E
|
F0,4E
|
HOME
|
E0,6C
|
E0,F0,6C
|
D
|
23
|
F0,23
|
=
|
55
|
FO,55
|
PG UP
|
E0,7D
|
E0,F0,7D
|
E
|
24
|
F0,24
|
|
5D
|
F0,5D
|
DELETE
|
E0,71
|
E0,F0,71
|
F
|
2B
|
F0,2B
|
BKSP
|
66
|
F0,66
|
END
|
E0,69
|
E0,F0,69
|
G
|
34
|
F0,34
|
SPACE
|
29
|
F0,29
|
PG DN
|
E0,7A
|
E0,F0,7A
|
H
|
33
|
F0,33
|
TAB
|
0D
|
F0,0D
|
U ARROW
|
E0,75
|
E0,F0,75
|
I
|
43
|
F0,43
|
CAPS
|
58
|
F0,58
|
L ARROW
|
E0,6B
|
E0,F0,6B
|
J
|
3B
|
F0,3B
|
L SHFT
|
12
|
FO,12
|
D ARROW
|
E0,72
|
E0,F0,72
|
K
|
42
|
F0,42
|
L CTRL
|
14
|
FO,14
|
R ARROW
|
E0,74
|
E0,F0,74
|
L
|
4B
|
F0,4B
|
L GUI
|
E0,1F
|
E0,F0,1F
|
NUM
|
77
|
F0,77
|
M
|
3A
|
F0,3A
|
L ALT
|
11
|
F0,11
|
KP /
|
E0,4A
|
E0,F0,4A
|
N
|
31
|
F0,31
|
R SHFT
|
59
|
F0,59
|
KP *
|
7C
|
F0,7C
|
O
|
44
|
F0,44
|
R CTRL
|
E0,14
|
E0,F0,14
|
KP –
|
7B
|
F0,7B
|
P
|
4D
|
F0,4D
|
R GUI
|
E0,27
|
E0,F0,27
|
KP +
|
79
|
F0,79
|
Q
|
15
|
F0,15
|
R ALT
|
E0,11
|
E0,F0,11
|
KP EN
|
E0,5A
|
E0,F0,5A
|
R
|
2D
|
F0,2D
|
APPS
|
E0,2F
|
E0,F0,2F
|
KP .
|
71
|
F0,71
|
S
|
1B
|
F0,1B
|
ENTER
|
5A
|
F0,5A
|
KP 0
|
70
|
F0,70
|
T
|
2C
|
F0,2C
|
ESC
|
76
|
F0,76
|
KP 1
|
69
|
F0,69
|
U
|
3C
|
F0,3C
|
F1
|
05
|
F0,05
|
KP 2
|
72
|
F0,72
|
V
|
2A
|
F0,2A
|
F2
|
06
|
F0,06
|
KP 3
|
7A
|
F0,7A
|
W
|
1D
|
F0,1D
|
F3
|
04
|
F0,04
|
KP 4
|
6B
|
F0,6B
|
X
|
22
|
F0,22
|
F4
|
0C
|
F0,0C
|
KP 5
|
73
|
F0,73
|
Y
|
35
|
F0,35
|
F5
|
03
|
F0,03
|
KP 6
|
74
|
F0,74
|
Z
|
1A
|
F0,1A
|
F6
|
0B
|
F0,0B
|
KP 7
|
6C
|
F0,6C
|
0
|
45
|
F0,45
|
F7
|
83
|
F0,83
|
KP 8
|
75
|
F0,75
|
1
|
16
|
F0,16
|
F8
|
0A
|
F0,0A
|
KP 9
|
7D
|
F0,7D
|
2
|
1E
|
F0,1E
|
F9
|
01
|
F0,01
|
]
|
5B
|
F0,5B
|
3
|
26
|
F0,26
|
F10
|
09
|
F0,09
|
;
|
4C
|
F0,4C
|
4
|
25
|
F0,25
|
F11
|
78
|
F0,78
|
‘
|
52
|
F0,52
|
5
|
2E
|
F0,2E
|
F12
|
07
|
F0,07
|
,
|
41
|
F0,41
|
6
|
36
|
F0,36
|
PRNT
SCRN |
E0,12,
E0,7C |
E0,F0,
7C,E0, F0,12 |
.
|
49
|
F0,49
|
7
|
3D
|
F0,3D
|
SCROLL
|
7E
|
F0,7E
|
/
|
4A
|
F0,4A
|
8
|
3E
|
F0,3E
|
PAUSE
|
E1,14,77,
E1,F0,14, F0,77 |
-NONE-
|
Video
Project Source Code
###
ORG 00H
HARDWARE_CONNECTION:
LCD_DATA EQU P2
LCD_RS EQU P1.0
LCD_EN EQU P1.1
KBD_DATA EQU P1.2
KBD_CLK EQU P1.3
SOFTWARE_VARIABLE:
TEMPVAR_1 EQU R0
TEMPVAR_2 EQU 30H
DISPLAYED_KEY EQU 31H
READY_DATA EQU R2
ASCII EQU R3
PRESET_VALUE EQU R4
TEMPVAR_5 EQU R5
TEMPVAR_6 EQU R6
TEMPVAR_7 EQU R7
LCD_INITIALIZATION:
MOV A,#38H
ACALL LCD_COMND_WRT
MOV A,#0CH
ACALL LCD_COMND_WRT
MOV A,#01H
ACALL LCD_COMND_WRT
MOV A,#80H
ACALL LCD_COMND_WRT
MOV DPTR,#TYPING
ACALL STRING_DISPLAY
ACALL DELAY_ONES
MOV PRESET_VALUE,#0AH
PROMT_TO_START:
MOV A,#80H ;ASK TO PRESS AN ALPHABET
ACALL LCD_COMND_WRT
MOV DPTR,#PRESS_ALPHABET_1
ACALL STRING_DISPLAY
MOV A,#0C0H
ACALL LCD_COMND_WRT
MOV DPTR,#PRESS_ALPHABET_2
ACALL STRING_DISPLAY
ACALL READ_KEY ;READ THE ALPHABET
MOV A,ASCII ;CHECK FOR KEY OTHER THAN ALPHABET
CJNE A,#00H,CONTINUE
SJMP PROMT_TO_START ;IF KEY IS OTHER THAN ALPHABET
CONTINUE: ;IF KEY IS AN ALPHABET
MOV A,ASCII
ADD A,PRESET_VALUE
ACALL COMPARE_ASCII
MOV A,#01H ;ASK TO PRESS THE DISPLAYED ALPHABET
ACALL LCD_COMND_WRT
MOV A,#80H
ACALL LCD_COMND_WRT
MOV DPTR,#PRESS_DIS_ALPHABET
ACALL STRING_DISPLAY
MOV A,#0C7H
ACALL LCD_COMND_WRT
MOV A,READY_DATA
MOV DISPLAYED_KEY,A
ACALL LCD_DATA_WRT
CLR C
SUBB A,#40H
MOV PRESET_VALUE,A
SJMP CHK_KEY
COMPARE_ASCII: ;COMPARING ASCII CODE WITH 'Z'
CJNE A,#5AH,DATA_NOT_EQUAL
DATA_EQUAL: ;WHEN ASCII CODE EQUAL TO 'Z'
INC PRESET_VALUE
INC PRESET_VALUE
CLR C
SUBB A,PRESET_VALUE
MOV READY_DATA,A
RET
DATA_NOT_EQUAL: ;CHECKING FOR < OR >, WHEN NOT EQUAL TO 'Z'
JNC NOT_NORMAL
DATA_NORMAL: ;WHEN ASCII CODE < 'Z'
MOV READY_DATA,A
RET
NOT_NORMAL: ;WHEN ASCII CODE > 'Z'
CLR C
SUBB A,#5AH
ADD A,#40H
MOV READY_DATA,A
RET
CHK_KEY: ACALL READ_KEY
MOV A,ASCII
CJNE A,#00H,MOVE_ON
MOV ASCII,#45H
SJMP NOT_EQUAL
MOVE_ON: CJNE A,DISPLAYED_KEY,NOT_EQUAL
MOV A,#01H
ACALL LCD_COMND_WRT
MOV A,#80H
ACALL LCD_COMND_WRT
MOV DPTR,#TATS_CORRECT
ACALL STRING_DISPLAY
ACALL DELAY_ONES
LJMP CONTINUE
NOT_EQUAL:
MOV A,#01H
ACALL LCD_COMND_WRT
MOV A,#80H
ACALL LCD_COMND_WRT
MOV DPTR,#TATS_WRONG
ACALL STRING_DISPLAY
ACALL DELAY_ONES
LJMP CONTINUE
READ_KEY:
MOV TEMPVAR_2,#03H
READ_KEY_AGAIN:
MOV A,#00H
CLR C
MOV TEMPVAR_1,#08H
JB KBD_CLK,$
JNB KBD_CLK,$
JB KBD_CLK,$
JNB KBD_CLK,$
READ_KEY_BACK:
MOV C,KBD_DATA
RRC A
JB KBD_CLK,$
JNB KBD_CLK,$
DJNZ TEMPVAR_1,READ_KEY_BACK
JNB KBD_CLK,$
JB KBD_CLK,$
JNB KBD_CLK,$
DJNZ TEMPVAR_2,READ_KEY_AGAIN
PRESS_A:CJNE A,#1CH,PRESS_B
MOV ASCII,#41H
RET
PRESS_B:CJNE A,#32H,PRESS_C
MOV ASCII,#42H
RET
PRESS_C:CJNE A,#21H,PRESS_D
MOV ASCII,#43H
RET
PRESS_D:CJNE A,#23H,PRESS_E
MOV ASCII,#44H
RET
PRESS_E:CJNE A,#24H,PRESS_F
MOV ASCII,#45H
RET
PRESS_F:CJNE A,#2BH,PRESS_G
MOV ASCII,#46H
RET
PRESS_G:CJNE A,#34H,PRESS_H
MOV ASCII,#47H
RET
PRESS_H:CJNE A,#33H,PRESS_I
MOV ASCII,#48H
RET
PRESS_I:CJNE A,#43H,PRESS_J
MOV ASCII,#49H
RET
PRESS_J:CJNE A,#3BH,PRESS_K
MOV ASCII,#4AH
RET
PRESS_K:CJNE A,#42H,PRESS_L
MOV ASCII,#4BH
RET
PRESS_L:CJNE A,#4BH,PRESS_M
MOV ASCII,#4CH
RET
PRESS_M:CJNE A,#3AH,PRESS_N
MOV ASCII,#4DH
RET
PRESS_N:CJNE A,#31H,PRESS_O
MOV ASCII,#4EH
RET
PRESS_O:CJNE A,#44H,PRESS_P
MOV ASCII,#4FH
RET
PRESS_P:CJNE A,#4DH,PRESS_Q
MOV ASCII,#50H
RET
PRESS_Q:CJNE A,#15H,PRESS_R
MOV ASCII,#51H
RET
PRESS_R:CJNE A,#2DH,PRESS_S
MOV ASCII,#52H
RET
PRESS_S:CJNE A,#1BH,PRESS_T
MOV ASCII,#53H
RET
PRESS_T:CJNE A,#2CH,PRESS_U
MOV ASCII,#54H
RET
PRESS_U:CJNE A,#3CH,PRESS_V
MOV ASCII,#55H
RET
PRESS_V:CJNE A,#2AH,PRESS_W
MOV ASCII,#56H
RET
PRESS_W:CJNE A,#1DH,PRESS_X
MOV ASCII,#57H
RET
PRESS_X:CJNE A,#22H,PRESS_Y
MOV ASCII,#58H
RET
PRESS_Y:CJNE A,#35H,PRESS_Z
MOV ASCII,#59H
RET
PRESS_Z:CJNE A,#1AH,EXIT
MOV ASCII,#5AH
RET
EXIT: MOV ASCII,#00H
RET
LCD_COMND_WRT:
MOV LCD_DATA,A
CLR LCD_RS
SETB LCD_EN
ACALL DELAY_NINE
CLR LCD_EN
RET
LCD_DATA_WRT:
MOV LCD_DATA,A
SETB LCD_RS
SETB LCD_EN
ACALL DELAY_NINE
CLR LCD_EN
RET
DELAY_NINE:
MOV TEMPVAR_5,#16
NINE_BACK:MOV TEMPVAR_6,#250
DJNZ TEMPVAR_6,$
DJNZ TEMPVAR_5,NINE_BACK
RET
DELAY_ONES:
MOV TEMPVAR_5,#9
NEE_BACK:MOV TEMPVAR_6,#255
NE_BACK:MOV TEMPVAR_7,#255
DJNZ TEMPVAR_7,$
DJNZ TEMPVAR_6,NE_BACK
DJNZ TEMPVAR_5,NEE_BACK
RET
STRING_DISPLAY:
DIS_BACK:CLR A
MOVC A,@A+DPTR
JZ DIS_OUT
ACALL LCD_DATA_WRT
INC DPTR
SJMP DIS_BACK
DIS_OUT:RET
TYPING: DB 'TYPING ENHANCER',0
PRESS_ALPHABET_1: DB 'PLEASE PRESS ANY',0
PRESS_ALPHABET_2: DB 'ALPHABET TO PLAY',0
PRESS_DIS_ALPHABET: DB 'PRESS THE LETTER',0
TATS_CORRECT: DB 'THAT IS CORRECT',0
TATS_WRONG: DB 'THAT IS WRONG',0
END
###
Circuit Diagrams
Filed Under: Electronic Projects
Questions related to this article?
👉Ask and discuss on EDAboard.com and Electro-Tech-Online.com forums.
Tell Us What You Think!!
You must be logged in to post a comment.