⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Use optical mouse sensor from Logitech Mouse with an Atmel AVR controller Documentation in german
💻 C
字号:
/*! \file main.c \brief Optical Mouse Test Program 1 */
//###########################################################
///	\par Uebersicht
//###################################################################################
//
// Liest die Bilddaten aus einem Optical Mouse Sensor ADNS-2610
// und speichert sie als PPM Bilddatei.
//
//#########################################################################
// Last change: 14.02.2008
//#########################################################################
// hk@holger-klabunde.de
// http://www.holger-klabunde.de/index.html
//#########################################################################
// Compiler: AVR-GCC 4.1.1
//#########################################################################
//@{
#include <avr/io.h>
#include <avr/interrupt.h>

#include "printf.h"
#include "serial.h"
#include "softspi.h"

//###################################################################################
/* Hauptprogramm */
int main(void)
//###################################################################################
{
 unsigned char temp,grey,squal,minpix,maxpix;
 unsigned int framecounter;

 ser_init();
 soft_spi_init();
 
 sei();              //enable interrupts
 
// puts("Optical Mouse\n");

 ADNSWrite(ADNS_CONFIG, 0x80); // soft reset
 Delay1ms(200);

 ADNSWrite(ADNS_CONFIG, 0x01); // always awake, sch鰊 nacheinander senden !
 Delay1ms(200);

 temp = ADNSRead(ADNS_STATUS);
 Delay1ms(200);
 
// printf("Status: 0x%02X\n",(unsigned int)temp);

 for(;;) // loop forever
  {

/*
   temp = ADNSRead(ADNS_DELTA_Y);
   printf("DY: 0x%02X ",(unsigned int)temp);

   temp = ADNSRead(ADNS_DELTA_X);
   printf("DX: 0x%02X\n",(unsigned int)temp);
*/


/*
   squal = ADNSRead(ADNS_SQUAL);
   printf("SQUAL: % 3d ",(unsigned int)squal);

   maxpix = ADNSRead(ADNS_MAX_PIXEL);
   printf("MAXPIX: % 3d ",(unsigned int)maxpix);

   minpix = ADNSRead(ADNS_MIN_PIXEL);
   printf("MINPIX: % 3d\n",(unsigned int)minpix);
*/

   temp = ADNSRead(ADNS_PIXEL_DATA);
   if((temp & START_OF_FRAME) && (temp & VALID_DATA))
    {
     printf("P3\n"); // PPM Format
     printf("18 18\n"); // Width 18 pixel and height 18 pixel
     printf("63\n"); // 6Bit Grayscale 2^6 - 1
     
     grey = temp & ~0xC0; // Del upper 2 Bits
     
     printf("%d %d %d\n",(unsigned int)grey,(unsigned int)grey,(unsigned int)grey);
     framecounter = 1;
     
     do
      {
       temp = ADNSRead(ADNS_PIXEL_DATA);
       if(((temp & START_OF_FRAME) == 0) && (temp & VALID_DATA))
        {
         grey = temp & ~0xC0; // Del upper 2 Bits
     
         printf("%d %d %d\n",(unsigned int)grey,(unsigned int)grey,(unsigned int)grey);
         framecounter++;
        } 

      }while(framecounter<324);

     while(1); // Bild ist gespeichert. F黵 neues Bild Reset dr點ken !
               // Programm bleibt hier stehen
    }

  }// Ende Endlosschleife
}

//@}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -