Atmega 162 bizzart fel i if sats tangentbord
Postat: 21 september 2009, 17:50:46
Har ett 16 knappars tangentbord, för att testa om det funkar, vill jag skriva ut värden till dioderna på ett stk500
Nu kommer det bizzarra.
Det funkar med alla värden, så länge jag kör en if-satsen likt i koden, och inte testar mer än två värden.
Har avkommenterat delar av satsen i koden nedan.
Någon som har koll på varför det inte funkar med en längre if sats (om jag tar bort avkommenteringen på resten av if satsen)
Det som händer är att det hänger sig... eller endast binärvärdet för 'E' skrivs ut på dioderna.
Nu kommer det bizzarra.
Det funkar med alla värden, så länge jag kör en if-satsen likt i koden, och inte testar mer än två värden.
Har avkommenterat delar av satsen i koden nedan.
Någon som har koll på varför det inte funkar med en längre if sats (om jag tar bort avkommenteringen på resten av if satsen)
Det som händer är att det hänger sig... eller endast binärvärdet för 'E' skrivs ut på dioderna.
Kod: Markera allt
#define F_CPU 8000000UL
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#define zero 0b10111110
#define one 0b10001000
#define two 0b01001000
#define three 0b00101000
#define four 0b10000100
#define five 0b01000100
#define six 0b00100100
#define seven 0b10000010
#define eight 0b01000001
#define nine 0b00100001
#define letterA 0b00011000
#define letterB 0b00001100
#define letterC 0b00010010
#define letterD 0b00010001
#define star 0b10000001
#define square 0b00100001
char Test();
int main (void)
{
DDRC=0xff;
while(1)
{
PORTC=Test();
}
return(0);
}
char Test()
{
char KeyBoardValue,CharValue;
/*Läser av fyra ben*/
DDRB=0x0f;
PORTB=0xf0;
KeyBoardValue=PINB;
/*-----------------*/
//_delay_ms (80);
/*Läser av de andra fyra benen och lägger ihop värdet med hjälp av maskning*/
DDRB=0xf0;
PORTB=0x0f;
KeyBoardValue=(KeyBoardValue&0xf0)|(PINB&0x0f); //Maskar ut värdet
/*-------------------------------------------------------------------------*/
if (KeyBoardValue==one) {CharValue='1';}
else if (KeyBoardValue==two) {CharValue='2';}
/* else if (KeyBoardValue==three) {CharValue='3';}
else if (KeyBoardValue==four) {CharValue='4';}
else if (KeyBoardValue==five) {CharValue='5';}
else if (KeyBoardValue==six) {CharValue='6';}
else if (KeyBoardValue==seven) {CharValue='7';}
else if (KeyBoardValue==eight) {CharValue='8';}
else if (KeyBoardValue==nine) {CharValue='9';}
else if (KeyBoardValue==letterA){CharValue='A';}
else if (KeyBoardValue==letterB){CharValue='B';}
else if (KeyBoardValue==letterC){CharValue='C';}
else if (KeyBoardValue==letterD){CharValue='D';}
else if (KeyBoardValue==star) {CharValue=0x31;}
else if (KeyBoardValue==square) {CharValue=0x31;}*/
else {CharValue='E';}
return CharValue;
}