swatip
Newbie level 6
- Joined
- May 11, 2011
- Messages
- 13
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Activity points
- 1,356
How to interface 89c52 microcontroller to ps2 keyboard? and what is the source code for it?
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
#include <p89v51rx2.h>
#define HIGH 1
#define LOW 0
sbit data_bit=P3^3;
sbit clk=P3^2;
void MSDelay(unsigned char delay)
{
unsigned char i;
for(i=0;i<delay;i++)
{
}
}
void ps2_write(unsigned char command)
{
unsigned char i;
unsigned char parity = 1;
data_bit=HIGH;
clk=HIGH;
MSDelay(100);
clk=LOW;
MSDelay(100);
data_bit=LOW;
MSDelay(10);
clk=HIGH;
/* wait for device to take control of clock */
while (clk==HIGH); // this loop intentionally left blank
for (i=0; i < 8; i++)
{
if (command & 0x01)
{
data_bit=HIGH;
}else
{
data_bit=LOW;
}
// wait for clock
while (clk== LOW);
while (clk== HIGH);
parity = parity ^ (command & 0x01);
command = command >> 1;
}
// parity bit
if (parity)
{
data_bit=HIGH;
}else
{
data_bit=LOW;
}
//clock cycle - like ack.
while(clk==LOW);
while(clk==HIGH);
data_bit=HIGH;
MSDelay(10);
while (clk==HIGH);
// mode switch
while ((clk==LOW)||(data_bit== LOW));
// hold up incoming data
clk=LOW;
}
unsigned char ps2_read()
{
unsigned char data1 = 0x00;
unsigned char i;
unsigned char bit1 = 0x01;
// start clock
clk=HIGH;
data_bit=HIGH;
MSDelay(10);
while (clk == HIGH);
while (clk==LOW);//eat start bit
for (i=0; i < 8; i++)
{
while (clk==HIGH);
if(data_bit==HIGH)
{
data1 = data1 | bit1;
}
while (clk == LOW);
bit1= bit1<< 1;
}
// eat parity bit, ignore it.
while (clk==HIGH);
while (clk==LOW);
// eat stop bit
while (clk==HIGH);
while (clk==LOW);
clk=LOW; // hold incoming data
return data1;
}
void serial_init()
{
FCF=1;
SCON = 0x50; /* mode 1, 8-bit uart, enable receiver */
TMOD = 0x20; /* timer 1, mode 2, 8-bit reload */
TH1 = 253; /* reload value for 2400 baud */
ET0 = 0; /* we don't want this timer to make interrupts */
TR1 = 1; /* start the timer */
ES = 0; /* allow serial interrupts */
EA = 0; /* enable interrupts */
}
void main()
{
unsigned char count=0;
serial_init();
P2=0x00;
ps2_write(0xff);
while(count!=3)
{
SBUF=ps2_read();
while(TI==0);
TI=0;
count++;
}
ps2_write(0xf4);
while(1)
{
ps2_read();
while(TI==0);
TI=0;
count++;
}
}
yes I want to make pc keyboard.
Any one knows How to find which key is press from keyboard on hyper terminal?? Like When I check my program on hyper terminal its shows the output only A B C D keys only what abt other keys?plz help me...