📄 main.c
字号:
/*! \file main.c \brief Optical Mouse Test Program 1 */
//###########################################################
/// \par Uebersicht
//###################################################################################
//
// Liest die Bilddaten aus einem Optical Mouse Sensor ADNS-2610
// und zeigt ein 18x18 Pixel Bild auf einem KS108 GLCD
//
//#########################################################################
// 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"
#include "ks108.h"
//###################################################################################
// Berechnet einen Threshold Wert zwischen Min und Max Value aller Pixel
// und gibt dann einen Wert 0=drunter, 1=dr黚er aus.
//###################################################################################
unsigned char GetPixelValue(unsigned char grey, unsigned char minpix, unsigned char maxpix)
{
unsigned char threshold;
threshold = (maxpix-minpix)/2 + minpix;
if(grey>threshold) return 1;
else return 0;
}
//###################################################################################
/* Hauptprogramm */
int main(void)
//###################################################################################
{
unsigned char temp,squal,minpix,maxpix,xpos,ypos,grey;
unsigned int framecounter;
ser_init();
soft_spi_init();
DisplayOn();
ClearScreen();
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))
{
temp &= ~0xC0; // Del upper 2 Bits
framecounter = 0;
xpos=0; ypos=0;
grey=GetPixelValue(temp,minpix,maxpix);
SetPixel(xpos,ypos,grey);
xpos++;
framecounter++;
do
{
temp = ADNSRead(ADNS_PIXEL_DATA);
if(((temp & START_OF_FRAME) == 0) && (temp & VALID_DATA))
{
grey = temp & ~0xC0; // Del upper 2 Bits
grey=GetPixelValue(grey,minpix,maxpix);
SetPixel(xpos,ypos,grey);
xpos++;
framecounter++;
if(xpos==18)
{
xpos=0;
ypos++;
}
}
}while(framecounter<324);
}
}// Ende Endlosschleife
}
//@}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -