PS2 Mouse Interfacing dengan pemrograman bahasa C

42
BAB I PENDAHULUAN 1.1 Latar Belakang Dewasa ini semakin banyak jenis mouse yang dijual dipasaran, mulai dari mouse yang digunakan untuk keperluan pengoperasian komputer biasa sampai mouse yang khusus diciptakan untuk keperluan bermain game. Rata rata mouse yang digunakan adalah mouse yang menggunakan sensor optik sebagai pendeteksi gerakan dari mouse. Alasan kami mengambil optical mouse sebagai proyek di laboratorium mikrokontroler adalah karena merasa bahwa optical mouse sangat menarik untuk dipelajari dan diteliti, serta merupakan pengembangan dari mouse konvensional yang sudah ada sebelumnya. Disini kami akan mencoba untuk meneliti data yang dikirimkan optical mouse menggunakan rangkaian mikrokontroler berbasis ATmega 8535. Data data yang terkirim oleh optical mouse akan kami tampilkan pada lcd. 1.2 Tujuan Pengerjaan proyek mikrokontroler dan penyusunan laporan ini bertujuan untuk: 1

description

 

Transcript of PS2 Mouse Interfacing dengan pemrograman bahasa C

Page 1: PS2 Mouse Interfacing dengan pemrograman bahasa C

BAB I

PENDAHULUAN

1.1 Latar Belakang

Dewasa ini semakin banyak jenis mouse yang dijual dipasaran, mulai dari mouse yang digunakan untuk keperluan pengoperasian komputer biasa sampai mouse yang khusus diciptakan untuk keperluan bermain game. Rata rata mouse yang digunakan adalah mouse yang menggunakan sensor optik sebagai pendeteksi gerakan dari mouse.

Alasan kami mengambil optical mouse sebagai proyek di laboratorium mikrokontroler adalah karena merasa bahwa optical mouse sangat menarik untuk dipelajari dan diteliti, serta merupakan pengembangan dari mouse konvensional yang sudah ada sebelumnya.

Disini kami akan mencoba untuk meneliti data yang dikirimkan optical mouse menggunakan rangkaian mikrokontroler berbasis ATmega 8535. Data data yang terkirim oleh optical mouse akan kami tampilkan pada lcd.

1.2 Tujuan

Pengerjaan proyek mikrokontroler dan penyusunan laporan ini bertujuan

untuk:

Membuat suatu modul pembelajaran mengenai sensor CMOS pada mouse

optik, sehingga pembaca dapat memperoleh informasi mengenai

karakteristuk, fungsi, prinsip kerja dan cara pengoprasian mouse optik

dengan mikrokontroler.

Mengembangkan kreatifitas mahasiswa dalam menganalisa dan

menerapkan hasil penelitian pada suatu apilkasi dasar, guna pembuktian

hasil pnelitian.

Memenuhi tugas praktek di Section Microcontroler tingkat 3.

1.3 Manfaat

1

Page 2: PS2 Mouse Interfacing dengan pemrograman bahasa C

Manfaat yang didapat adalah lebih memahami pengoprasian dan cara kerja

mouse optik sehingga kami dapat mengaplikasikannya dalam aplikasi

sederhana.

1.4 Batasan Masalah

Interface dengan mouse hanya bisa menggunakan PS/2. Apabila menggunakan converter USB to PS/2, gerakan tidak terdeteksi.

Jenis mouse yang digunakan adalah optical mouse.

2

Page 3: PS2 Mouse Interfacing dengan pemrograman bahasa C

BAB II

LANDASAN TEORI

Dalam proyek ini kami menggunakan beberapa komponen pendukung supaya

perangkat yang kami rancang dapat beroprasi dengan baik sesuai dengan yang

kami harapkan. Komponen tersebut semua telah terbagi menurut fungsinya

masing-masing.

2.1 Atmega 8535

ATMEGA 8535 menggunakan teknologi RISC (Reduce Instruction

Set Computing) dimana program berjalan lebih cepat karena hanya

membutuhkan satu siklus clock untuk mengeksekusi satu instruksi

program.

Fitur-fitur yang dimiliki oleh mikrokontroler Atmega 8535 adalah

sebagai berikut :

1. Saluran I/O sebanyak 32 buah, yaitu PORT A, PORT B, PORT C,

dan PORT D.

2. ADC internal sebanyak 8 saluran.

3. 3 buah Timer/Counter dengan kemampuan pembandingan.

4. CPU yang terdiri dari 32 buah register.

3

Page 4: PS2 Mouse Interfacing dengan pemrograman bahasa C

5. SRAM sebesar 512 byte.

6. Memori Flash sebesar 8 kb dengan kemampuan Read While Write.

7. PORT anantarmuka SPI.

8. EEPROM sebesar 512 byte yang dapat diprogram saat operasi.

9. Antarmuka komparator analog.

10. PORT USART untuk komunikasi serial.

11. Sistem mikroprosesor 8 bit berbasis RISC dengan kecepatan

maksimal 16 MHz.

12. Dll

Pemrograman mikrokontroler Atmega 8535 dapat menggunakan low

level language (assembly) dan high level language (C, Basic, Pascal,

JAVA, dll) tergantung compiler yang digunakan (Widodo Budiharto,

2006). Pada pembuatan proyek ini, kami menggunakan CVAVR sebagai

software dalam memberikan input instruksi ke mikrokontroler Atmega

8535.

2.2 PS/2 Mouse Optic

Mouse Optik menggunakan Light-Emitting Diode (LED) dan Photodiode untuk mendeteksi pergerakan relatif dengan sebuah permukaan, tidak seperti mouse mekanik yang menggunakan bola untuk memutar shaft yang terhubung dengan encoder untuk mengukur perpindahan.

Mouse Optik paling awal hanya dapat digunakan pada permukaan yang telah diberi pola tertentu, namun kini mouse optik telah dapat bekerja pada hampir semua permukaan datar. Biasanya mouse optik tidak dapat mendeteksi pergerakan pada permukaan mengkilat seperti cermin,

4

Page 5: PS2 Mouse Interfacing dengan pemrograman bahasa C

walaupun beberapa model lebih lanjut dapat berfungsi bahkan pada kaca yang bening.

PS/2 mouse interface menggunakan protocol serial bidirectional (dua arah) untuk mengirimkan pergerakan dan kondisi tombol kepada komputer/kontroler.

Ada kalanya juga, kontroler, mungkin mengirimkan perintah kepada mouse untuk mengatur report rate, resolusi, mereset mouse, menonaktifkan mouse, dsb.

Tegangan yang digunakan untuk mouse optik ini berkisar antara 5V ~ 100 mA.

2.3 LCD 2X16

LCD (Liquid Crystal Display) adalah modul penampil yang banyak digunakan karena tampilannya menarik. LCD merupakan salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic, yang bekerja dengan tidak menghasilkan cahaya tetapi dengan cara memantulkan cahaya yang berada di sekelilingnya. LCD jenis ini dapat menampilkan data berupa angka, huruf, maupun karakter dalam dua baris dan enambelas kolom.

Proyek ini menggunakan LCD sebagai interfacenya, sehingga pengguna bisa mengetahui berapa nilai jarak X dan Y yang terbaca oleh sensor CMOS.

5

Page 6: PS2 Mouse Interfacing dengan pemrograman bahasa C

BAB III

METODE PENGERJAAN

3.1Cara Kerja

Cara kerja mouse optik pada umumnya sebagai berikut: lampu LED menembarkan cahayanya pada permukaan lalu, sensor cahaya yang ada pada bagian bawah mouse akan menangkap pergeseran yang terjadi pada cahaya tersebut. Atau dapat juga dikatakan sebagai berikut. Bila mouse mekanik komputer mencatat pergeseran yang dilakukan oleh mouse, sebaliknya dengan mouse optical, komputer mencatat pergeseran yang terjadi pada landasan mouse.

Sedangkan untuk interface dengan PS/2, hal-hal yang perlu diperhatikan adalah

Konektor PS/2:

Algoritma PS/2:

• PS/2 port menggunakan clock keluar dan masuk untuk mengirimkan data. Data dikirim dan diterima dan disinkronkan dengan clock ini. Mouse mengeluarkan sinyal clock dan Data dibaca pada tepian negatif clock.

• Susunan data adalah sebagai berikut :

1 start bit, 8 data bit, 1 parity bit, 1 stop bit

6

Page 7: PS2 Mouse Interfacing dengan pemrograman bahasa C

Jenis perintah yang dapat dikirimkan ke mouse:

Pesan yang dikirimkan balik oleh mouse:

7

Page 8: PS2 Mouse Interfacing dengan pemrograman bahasa C

Urutan inisialisasi mouse:

Power-on Reset:

Mouse: AA Self-test passed

Mouse: 00 Mouse ID

Host: FF Reset command

Mouse: FA Acknowledge

Mouse: AA Self-test passed

Mouse: 00 Mouse ID

Host: FF Reset command

Mouse: FA Acknowledge

Mouse: AA Self-test passed

Mouse: 00 Mouse ID

Host: FF Reset command

Mouse: FA Acknowledge

Mouse: AA Self-test passed

Mouse: 00 Mouse ID

Host: F3 Set Sample Rate

Mouse: FA Acknowledge

Host: 0A decimal 10

Mouse: FA Acknowledge

Host: F2 Read Device Type

Mouse: FA Acknowledge

Mouse: 00 Mouse ID

Host: E8 Set resolution

Mouse: FA Acknowledge

Host: 03 8 Counts/mm

8

Page 9: PS2 Mouse Interfacing dengan pemrograman bahasa C

Mouse: FA Acknowledge

Host: E6 Set Scaling 1:1

Mouse: FA Acknowledge

Host: F3 Set Sample Rate

Mouse: FA Acknowledge

Host: 28 decimal 40

Mouse: FA Acknowledge

Host: F4 Enable

Mouse: FA Acknowledge

Initialization complete...

Urutan Transmisi data:

1) Bring the Clock line low for at least 100 microseconds.

2) Bring the Data line low.

3) Release the Clock line.

4) Wait for the device to bring the Clock line low.

5) Set/reset the Data line to send the first data bit

6) Wait for the device to bring Clock high.

7) Wait for the device to bring Clock low.

8) Repeat steps 5-7 for the other seven data bits and the parity bit

9) Release the Data line.

10) Wait for the device to bring Data low.

11) Wait for the device to bring Clock low.

12) Wait for the device to release Data and Clock

Setelah itu, mouse akan mengirimkan 3 byte data yang berisikan data tentang pergerakan dan kondisi tombol kepada host, dengan format sebagai berikut:

9

Page 10: PS2 Mouse Interfacing dengan pemrograman bahasa C

3.2 Program

Setting awal LCD pada CVAVR

10

Page 11: PS2 Mouse Interfacing dengan pemrograman bahasa C

/***********************************************************************************

This program was produced by the

CodeWizardAVR V2.05.6

Automatic Program Generator

© Copyright 1998-2012 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : PS/2 Mouse Interface Atmega8535

Version : Alpha

Date : 16/10/2013

Author : richardvsw

Company : TMK#44

Comments: Taken from http://students.iitk.ac.in/eclub/assets/tutorials/PS2MOUSE.pdf

Chip type : ATmega8535

Program type : Application

AVR Core Clock frequency: 12,000000 MHz

Memory model : Small

External RAM size : 0

Data Stack size : 128

************************************************************************************/

#include <mega8535.h>

11

Page 12: PS2 Mouse Interfacing dengan pemrograman bahasa C

#include <delay.h>

#include <stdlib.h>

#include <alcd.h> // Alphanumeric LCD functions

#define x_limit 800 //Set limit X range

#define y_limit 300 //Set limit Y range

#define Clk PORTB.0 //PORTB.0 = Clock generated from Host

#define ClkReg DDRB.0 //DDRB.0 = Host Clock Register

#define Data PORTB.1 //PORTB.1 = Data generated from Host

#define DataReg DDRB.1 //DDRB.1 = Host Data Register

#define ClkDev PINB.0 //PINB.0 = Clock from Device

#define DataDev PINB.1 //PINB.1 = Data from Device

/*********************Byte 1 Configuration**************************

Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0

Y overflow | X overflow | Y sign bit | X sign bit | Always 1 | Middle Btn | Right Btn | Left Btn

Details:

Bit 0 - Bit 2 represents the status of mouse buttons, 1 for pressed and 0 for not pressed.

Bit 4 & Bit 5 represents the movement direction of mouse.

12

Page 13: PS2 Mouse Interfacing dengan pemrograman bahasa C

Bit 6 & Bit 7 set if the counters go past 255.

****************************************************************************************************************************/

char i=0;

char mask[] = //used for comparing the byte with the odd parity

{

0x01,

0x02,

0x04,

0x08,

0x10,

0x20,

0x40,

0x80

};

char oddParity(char byte) //used for error detection

{

char i, count = 0; //Bit paritas akan di set menjadi bernilai 1 bila nilai 1 pada Data adalah genap

for(i=0;i<8;i++) //Bit paritas akan di set menjadi bernilai 0 bila nilai 1 pada Data adalah ganjil

{ //Jumlah 1 pada Data + bit paritas pasti = ganjil -> paritas ganjil

if(mask[i] & byte)

count++;

13

Page 14: PS2 Mouse Interfacing dengan pemrograman bahasa C

}

return ((count+1)%2);

}

char mouseStatus = 0;

//mouse status = 0 : no activity

//mouse status = 1 : falling edge handled

//mouse status = 2 : rising edge handled

//Introduces delay in case of parity error

char mouseData = 0; //received data will be stored here temp

char mouseIndex = 0; //progress

char mouseFlag = 0; //mouseFlag = 1: data is received, mouseFlag = 2: Parity not matched

int mouseX = 0; //Set default X coordinate

int mouseY = 0; //Set default Y coordinate

char klikKiri = 0;

char klikKanan = 0;

char klikTengah = 0;

void readMouse()

{

if(mouseStatus==0 && ClkReg==0 && ClkDev==0 && DataReg==0 && DataDev==0) //if inactive and start bit is there

{

mouseStatus = 1; //start bit received

14

Page 15: PS2 Mouse Interfacing dengan pemrograman bahasa C

mouseIndex = 0; //initialise

mouseData = 0; //initialise

mouseFlag = 0; //initialise

}

//if falling edge handled

//look for rising edge and handle it

else if(mouseStatus==1 && ClkReg==0 && ClkDev==1)

mouseStatus = 2;

//if rising edge handled

//look for falling edge and handle it

//data is scanned at falling edge

else if(mouseStatus==2 && ClkReg==0 && ClkDev==0)

{

if(mouseIndex<8 && DataDev==1)

mouseData += (mask[mouseIndex]);

mouseIndex++;

mouseStatus = 1;

}

// stop bit

if(mouseIndex>9) //all eight bytes have been received AND stop bit gone

{

mouseStatus = 0;

mouseIndex = 0;

15

Page 16: PS2 Mouse Interfacing dengan pemrograman bahasa C

//processMouseData();

mouseFlag=1;

}

}

void releaseClockMouse()

{

ClkReg = 0;

Clk = 1;

}

void releaseDataMouse()

{

DataReg = 0;

Data = 1;

}

void holdClockMouse()

{

Clk = 0;

ClkReg = 1;

}

16

Page 17: PS2 Mouse Interfacing dengan pemrograman bahasa C

void holdDataMouse()

{

Data = 0;

DataReg = 1;

}

void writeMouse(char cmd)

{

releaseDataMouse(); //Release both the lines

releaseClockMouse(); //For enabling Device-to-Host Communication, Host clock and data must set to high to prevent inhibit

holdClockMouse(); //Bring Clock line low for at least 100 uS

delay_us(120);

holdDataMouse(); //Bring the Data line low

releaseClockMouse(); //Release the Clock line

while(ClkDev==0); // wait for the clock high

for(i=0;i<=7;i++) //8 data bits

{

17

Page 18: PS2 Mouse Interfacing dengan pemrograman bahasa C

while(ClkDev==1); //Wait for device to bring the clock low

//Set the data bit

if(cmd & mask[i]) /*== 1)*/

releaseDataMouse(); //Changed

else

holdDataMouse();

while(ClkDev==0); //Wait for devise to bring the clock high

}

while(ClkDev==1); //Wait for devise to bring the clock low

//Set the parity

if(oddParity(cmd)==1) //try reversing the parity, check every byte

{

releaseDataMouse();

}

else

{

holdDataMouse();

}

while(ClkDev==0); //Wait for devise to bring the clock high

while(ClkDev==1); //Wait for device to bring the clock low

releaseDataMouse(); //Release the data line

18

Page 19: PS2 Mouse Interfacing dengan pemrograman bahasa C

while(ClkDev==0); //wait for clock high

while(DataDev==1); //Wait for device to bring data low

while(ClkDev==1); //Wait for device to bring clock low

while(ClkDev==0 || DataDev==0); //Wait for device to release clock and data

}

void mouseInit()

{

while(1)

{

delay_ms(100);

writeMouse(0xFF); //0xFF = Reset Mouse Command - Mouse returns AA (if passed self-test), 0x00 after self-test

//receive 0xFA - acknowledgment

while(!mouseFlag)

readMouse();

if(mouseFlag==1 && mouseData==0xFA) //0xFA = Mouse Acknowledge Command, Sent by Mouse after each command byte

mouseFlag=0;

else continue;

//receive 0xAA - self test passed

while(!mouseFlag)

readMouse();

19

Page 20: PS2 Mouse Interfacing dengan pemrograman bahasa C

if(mouseFlag==1 && mouseData==0xAA) //0xAA = mouse passed self-test

mouseFlag=0;

else continue;

//receive 0x00 - device ID

while(!mouseFlag)

readMouse();

if(mouseFlag==1 && mouseData==0x00)

mouseFlag=0;

else continue;

//Enter remote mode

writeMouse(0xF0);

//receive 0xFA - acknowledgment

while(!mouseFlag)

readMouse();

if(mouseFlag==1 && mouseData==0xFA) //0xFA = Mouse Acknowledge Command, Sent by Mouse after each command byte

mouseFlag=0;

else continue;

break;

}

}

void scanMouse()

{

//stores data from mouse

20

Page 21: PS2 Mouse Interfacing dengan pemrograman bahasa C

char byte1 = 0;

char byte2 = 0;

char byte3 = 0;

writeMouse(0xEB); //EB = Read Remote Data, Mouse sends 1 data packet

while(!mouseFlag)

readMouse();

if(mouseFlag==1 && mouseData==0xFA)

mouseFlag=0;

else return;

while(!mouseFlag)

readMouse();

if(mouseFlag==1)

{

byte1 = mouseData;

mouseFlag=0;

}

else

{

if(mouseFlag==2)

return;

}

while(!mouseFlag)

readMouse();

21

Page 22: PS2 Mouse Interfacing dengan pemrograman bahasa C

if(mouseFlag==1)

{

byte2 = mouseData;

mouseFlag=0;

}

else return;

while(!mouseFlag)

readMouse();

if(mouseFlag==1)

{

byte3 = mouseData;

mouseFlag=0;

}

else return;

//Byte processing

if(byte1 & 0x01) //compare the byte1 with 0x01, if 0x01 exist means left button clicked

klikKiri=1;

else

klikKiri=0;

if(byte1 & 0x02) //compare the byte1 with 0x02, if 0x02 exist means right button clicked

klikKanan=1;

22

Page 23: PS2 Mouse Interfacing dengan pemrograman bahasa C

else

klikKanan=0;

if(byte1 & 0x04) //compare the byte1 with 0x04, if 0x04 exist means middle button clicked

klikTengah=1;

else

klikTengah=0;

if(!(byte1 & 0x10)) //X move on + coordinate

{

if(x_limit-byte2 > mouseX) //X limit - byte2 that contains X movement data

mouseX += byte2;

else

mouseX = x_limit; //mouse reached end of the screen

}

else //X move on - coordinate

{

if(255-byte2+1 < mouseX)

mouseX -= (255-byte2+1);

else

mouseX = 0; //mouse reached begining of the screen

}

if(!(byte1 & 0x20)) //Y move on + coordinate

23

Page 24: PS2 Mouse Interfacing dengan pemrograman bahasa C

{

if(y_limit-byte3 > mouseY) //Y limit - byte3 that contains Y movement data

mouseY += byte3;

else

mouseY = y_limit; //mouse reached end of the screen

}

else //Y move on - coordinate

{

if(255-byte3+1 < mouseY)

mouseY -= (255-byte3+1);

else

mouseY = 0; //mouse reached begining of the screen

}

}

// Declare your global variables here

void main(void)

{

// Declare your local variables here

char c[20];

int loop;

// Input/Output Ports initialization

// Port A initialization

24

Page 25: PS2 Mouse Interfacing dengan pemrograman bahasa C

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization

25

Page 26: PS2 Mouse Interfacing dengan pemrograman bahasa C

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=0xFF

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

26

Page 27: PS2 Mouse Interfacing dengan pemrograman bahasa C

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

27

Page 28: PS2 Mouse Interfacing dengan pemrograman bahasa C

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

// Alphanumeric LCD initialization

// Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:

// RS - PORTA Bit 0

// RD - PORTA Bit 1

28

Page 29: PS2 Mouse Interfacing dengan pemrograman bahasa C

// EN - PORTA Bit 2

// D4 - PORTA Bit 4

// D5 - PORTA Bit 5

// D6 - PORTA Bit 6

// D7 - PORTA Bit 7

// Characters/line: 8

lcd_init(16);

releaseDataMouse(); //releasing both data and clock line to prevent inhibit

releaseClockMouse();

delay_ms(500);

lcd_clear();

mouseInit(); //initialize the mouse by sending a command and receiving back the message

delay_ms(1000);

lcd_clear();

lcd_gotoxy(0,0);

for(loop=0;loop < 16;loop++) //simple loading screen

{

lcd_puts("+");

delay_ms(100);

}

delay_ms(500);

lcd_clear();

while (1)

{

29

Page 30: PS2 Mouse Interfacing dengan pemrograman bahasa C

PORTA.3=1; //activate LCD back lamp

lcd_clear();

lcd_gotoxy(0,0);

scanMouse();

lcd_putsf("X:");

itoa(mouseX,c); //itoa used to convert int to char

lcd_puts(c);

lcd_gotoxy(0,1);

lcd_putsf("Y:");

itoa(mouseY,c); //itoa used to convert int to char

lcd_puts(c);

if(mouseY>150)

{

if(mouseX<50)

lcd_gotoxy(0,0);

if(mouseX<100 && mouseX>50)

lcd_gotoxy(1,0);

if(mouseX<150 && mouseX>100)

lcd_gotoxy(2,0);

if(mouseX<200 && mouseX>150)

lcd_gotoxy(3,0);

if(mouseX<250 && mouseX>200)

lcd_gotoxy(4,0);

if(mouseX<300 && mouseX>250)

lcd_gotoxy(5,0);

if(mouseX<350 && mouseX>300)

30

Page 31: PS2 Mouse Interfacing dengan pemrograman bahasa C

lcd_gotoxy(6,0);

if(mouseX<400 && mouseX>350)

lcd_gotoxy(7,0);

if(mouseX<450 && mouseX>400)

lcd_gotoxy(8,0);

if(mouseX<500 && mouseX>450)

lcd_gotoxy(9,0);

if(mouseX<550 && mouseX>500)

lcd_gotoxy(10,0);

if(mouseX<600 && mouseX>550)

lcd_gotoxy(11,0);

if(mouseX<650 && mouseX>600)

lcd_gotoxy(12,0);

if(mouseX<700 && mouseX>650)

lcd_gotoxy(13,0);

if(mouseX<750 && mouseX>700)

lcd_gotoxy(14,0);

if(mouseX>750)

lcd_gotoxy(15,0);

}

else if(mouseY<150)

{

if(mouseX<50)

lcd_gotoxy(0,1);

if(mouseX<100 && mouseX>50)

lcd_gotoxy(1,1);

31

Page 32: PS2 Mouse Interfacing dengan pemrograman bahasa C

if(mouseX<150 && mouseX>100)

lcd_gotoxy(2,1);

if(mouseX<200 && mouseX>150)

lcd_gotoxy(3,1);

if(mouseX<250 && mouseX>200)

lcd_gotoxy(4,1);

if(mouseX<300 && mouseX>250)

lcd_gotoxy(5,1);

if(mouseX<350 && mouseX>300)

lcd_gotoxy(6,1);

if(mouseX<400 && mouseX>350)

lcd_gotoxy(7,1);

if(mouseX<450 && mouseX>400)

lcd_gotoxy(8,1);

if(mouseX<500 && mouseX>450)

lcd_gotoxy(9,1);

if(mouseX<550 && mouseX>500)

lcd_gotoxy(10,1);

if(mouseX<600 && mouseX>550)

lcd_gotoxy(11,1);

if(mouseX<650 && mouseX>600)

lcd_gotoxy(12,1);

if(mouseX<700 && mouseX>650)

lcd_gotoxy(13,1);

if(mouseX<750 && mouseX>700)

lcd_gotoxy(14,1);

32

Page 33: PS2 Mouse Interfacing dengan pemrograman bahasa C

if(mouseX>750)

lcd_gotoxy(15,1);

}

if(klikKiri)

{

lcd_putsf("<");

}

else if(klikKanan)

{

lcd_putsf(">");

}

else if(klikTengah)

{

lcd_putsf("|");

}

else

{

lcd_putsf("^");

}

delay_ms(40);

};

}

3.3 Hasil Percobaan

33

Page 34: PS2 Mouse Interfacing dengan pemrograman bahasa C

Hasil dari percobaan yang telah dilakukan adalah, LCD akan menampilkan nilai koordinat X dan Y sesuai dengan pergerakan yang dilakukan oleh mouse. Disini kami membatasi koordinat X dan Y antara 0-800. Selain itu LCD juga akan menampilkan pointer sesuai dengan pergerakan mouse.

34

Page 35: PS2 Mouse Interfacing dengan pemrograman bahasa C

BAB IV

PENUTUP

4.1 Kesimpulan

Mouse optik merupakan perangkat yang menghasilkan output berupa data yang dipengaruhi oleh faktor jarak perpindahan. Data dikirimkan dua arah secara serial .

Mouse optik termasuk salah satu sensor pendeteksi jarak yang mudah digunakan dalam berbagai aplikasi.

4.2 Kelebihan

Mouse optik tidak membutuhkan permukaan khusus, karena bisa digunakan pada permukaan yang tidak rata

Sensitifitas mouse optik lebih tinggi dibandingkan mouse manual. Harga mouse dengan konektor PS/2 lebih murah. Apabila dipakai di komputer, konektor dengan PS/2 tidak membebani

procesor.

4.3 Kekurangan

Mouse optik memerlukan permukaan yang memantulkan cahaya. Tidak fleksibel, apabila mencopot dan memasang dengan konektor PS/2

harus merestart host.

35