📄 main.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 + -