mega88 tangentordsavkodnings problem - nybörjare
Postat: 31 oktober 2009, 18:51:14
Mitt problem är att då jag trycker på 1 så visar mina dioder att jag har tryckt på D... det verkar som om tabellen är omvänd men jag förstår inte varför den skulle bli det...
Den kod som strular:
Hela programmet:
Den kod som strular:
Kod: Markera allt
const unsigned char knapp[16] = {0x77,0x7B,0x7D,0x7E,0xB7,0xBB,0xBD,0xBE,0xD7,0xDB,0xDD,0xDE,0xE7,0xEB,0xED,0xEE};
const unsigned char ascii[16] = {'1','2','3','A','4','5','6','B','5','6','7','C',0x08,'0',0x0D,'D'}; //declareras globalt
unsigned char get_key()
{
unsigned char tecken, knapp1, knapp2, pos;
for(pos=0; pos<16; pos++)
{
knapp1 = knapp[pos];
PORTB = knapp1|PULL_UP;
knapp2 = PINB;
knapp2 = PINB;
if(knapp2 == knapp1)
{
tecken = ascii[pos]; //hämtar samma pos i ascii tabellen men den verkar inte funka...
return tecken;
}
}
return 0;
}
Kod: Markera allt
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000
#include <util/delay.h>
#define PULL_UP 0x0F
const unsigned char knapp[16] = {0x77,0x7B,0x7D,0x7E,0xB7,0xBB,0xBD,0xBE,0xD7,0xDB,0xDD,0xDE,0xE7,0xEB,0xED,0xEE};
const unsigned char ascii[16] = {'1','2','3','A','4','5','6','B','5','6','7','C',0x08,'0',0x0D,'D'};
unsigned char value, value1;
void init();
unsigned char get_key();
ISR(PCINT0_vect) //interrupt för portB
{
cli();
value = get_key(); //stutsavkodning
_delay_ms(5);
value1 = get_key();
if(value == value1)
PORTD = value;
sei();
return;
}
int main()
{
cli(); //disable interrupt
init();
sei(); //enable interrupts
while(1) {;}
}
void init()
{
DDRD = 0xFF; //alla portar utgångar
PORTD = 0x00; //sätter portarna till 0V
DDRB = 0xF0; //Ut 4-7 in 0-3
PORTB = 0x0F; //pullup aktiverat
PCICR = 0x01; //enable pinchange interrupt
PCMSK0 = 0x0F; //på portB pin 0-3
}
unsigned char get_key()
{
unsigned char tecken, knapp1, knapp2, pos;
for(pos=0; pos<16; pos++)
{
knapp1 = knapp[pos];
PORTB = knapp1|PULL_UP;
knapp2 = PINB;
knapp2 = PINB;
if(knapp2 == knapp1)
{
tecken = ascii[pos];
return tecken;
}
}
return 0;
}