#include "main.h" int cnt=0; int32 read1=0,read2=0,read3=0; signed char x; int32 check=0,posx=0,posy=0,inputx=0,inputy=0; void main() { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_OFF); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard //Setup_Oscillator parameter not selected from Intr Oscillator Config tab //GRUEN=DATA Pin 14 links unten //BLAU=CLOCK initmouse(); dispInit(); while(1){ check=read(); //einlesen der Mausdaten inputx=make8(check,1)-1; inputx^=0xFF; //Umwandeln des 2er Komplements der delta X-Daten in Dezimalzahlen inputy=make8(check,0)-1; inputy^=0xFF; //Umwandeln des 2er Komplements der delta X-Daten in Dezimalzahlen posx+=inputx; //Addition des Delta-X Wertes zur Position X posy+=inputy; //Addition des Delta-X Wertes zur Position Y cnt=make8(check,2); //Einlesen des ersten Bytes in CNT dispSetAdr(0x01); dispWriteTo(0x58); dispWriteTo(0x3A); if (bit_test(cnt,6)){ if (bit_test(cnt,4))posx+=128; else posx-=128; } //Testen des Überlaufflags der X-Richtung wenn gesetzt dann addiere bzw subdrahiere 128 if (bit_test(cnt,7)){ if (bit_test(cnt,5))posx+=128; else posx-=128; } //Testen des Überlaufflags der Y-Richtung wenn gesetzt dann addiere bzw subdrahiere 128 selektion(posx); dispSetAdr(0x41); dispWriteTo(0x59); dispWriteTo(0x3A); selektion(posy); if(bit_test (cnt, 0)) //Wenn linke Maustaste gedrückt Position Nullen { posx=0; posy=0; } } } ///////////////////////////////////////////////// //////MOUSE FUNKTIONEN////////////////////////// /////////////////////////////////////////////// void initmouse(void){ //Funktion zur Initialisierung der Maus sendbyte(0xff); read1=readbyte(); sendbyte(0xf5); read2=readbyte(); sendbyte(0xf4); read3=readbyte(); sendbyte(0xE6); read1=readbyte(); } //////////////////////////////////////////////////////////////////////////////// int32 read( ){ //Empfängt die 3 Datenbytes der Maus und speichert sie in mousedata ab unsigned char i=0; int32 mousedata=0; for (i=0;i<3;i++){ mousedata|=readbyte(); //die ersten 8 bit empfangen und in mousedataspeichern if (i<2){ mousedata=(mousedata<<8); } //8 bit verschieben und die nächsten 8 bit in mousedata speichern } return mousedata; } ///////////////////////////////////////////////////////////////////////////// void sendbyte(unsigned char kommando) //Funktion zum schreiben eines Bytes { unsigned char i, parity; parity=0; OUTPUT_LOW(clk); // Clock auf Low und kurz warten -> Bus übernehmen delay_us(250); OUTPUT_LOW(data); // Datenleitung auf Low OUTPUT_HIGH(clk); // Clock auf high -> Takt wieder freigeben while(INPUT(clk)==0){}; // Warten bis Maus den Takt ausgibt for(i=0; i<8; i++) // 8 Bit Daten senden { while (INPUT(clk)==1){} // Warten bis schreiben erlaubt if(kommando & (1<