Hiho! Das is ein vorläufiges Testprogramm welches auf dem PORTD ein Bitmuster (für eine 7segment anzeige) ausgibt und auf dem PORTB ein paar eingänge (PB5 & PB6 sind relevant) hat. Mit PB5 erhöhe ich die zahl die ausgegeben werden soll um eins mit PB6 erniedrige ich sie. Mein Problem ist, dass das genau 1 mal funktioniert und danach nicht mehr, sprich es tut sich nichts mehr wenn ich drauf drücke. Außerdem hab ich festgestellt wenn ich PB0 als als eingang verwende um höher zu schalten (z.b.) dann kann ich auch öfter erhöhen als einmal (also so wie es eigentlich funktionieren sollte). thx for help schon mal mfg mks
1 | #include <90s2313.h> |
2 | #include <delay.h> |
3 | |
4 | #define PB0 (((PINB)&(1<<0)))
|
5 | #define PB1 (((PINB)&(1<<1)))
|
6 | #define PB2 (((PINB)&(1<<2)))
|
7 | #define PB3 (((PINB)&(1<<3)))
|
8 | #define PB4 (((PINB)&(1<<4)))
|
9 | #define PB5 (((PINB)&(1<<5)))
|
10 | #define PB6 (((PINB)&(1<<6)))
|
11 | #define PB7 (((PINB)&(1<<7)))
|
12 | #define tast_sek (((PINB)&(1<<5)))
|
13 | #define tast_sek2 (((PINB)&(1<<6)))
|
14 | |
15 | void main(void) { |
16 | unsigned char count; |
17 | unsigned char hold; |
18 | unsigned char hold2; |
19 | unsigned char numbers[] = { 00111111, //0 |
20 | 01100000, //1 |
21 | 11011010, //2 |
22 | 11110010, //3 |
23 | 01100110, //4 |
24 | 10110110, //5 |
25 | 10111110, //6 |
26 | 11100000, //7 |
27 | 11111110, //8 |
28 | 11110110 //9 |
29 | };
|
30 | unsigned char numbers_h[] = { 0x3f, //0 |
31 | 0x06, //1 |
32 | 0x5b, //2 |
33 | 0x4f, //3 |
34 | 0x66, //4 |
35 | 0x6d, //5 |
36 | 0x7d, //6 |
37 | 0x07, //7 |
38 | 0x7f, //8 |
39 | 0x6f //9 |
40 | };
|
41 | |
42 | DDRB=0b10001111; |
43 | //DDRB=0x00;
|
44 | DDRD=0b11111111; |
45 | PORTB=0b10001111; |
46 | |
47 | |
48 | count = 0; |
49 | hold = 0; |
50 | hold2 = 0; |
51 | while (1) { |
52 | if(count == 10) { |
53 | count = 0; |
54 | }
|
55 | if(count == -1) { |
56 | count = 9; |
57 | }
|
58 | |
59 | PORTD = ~numbers_h[count]; |
60 | |
61 | if(tast_sek == 0 && hold == 0) { |
62 | count = count + 1; |
63 | hold = 1; |
64 | }
|
65 | else if(tast_sek == 1 && hold == 1) { |
66 | hold = 0; |
67 | }
|
68 | if(tast_sek2 == 0 && hold2 == 0) { |
69 | count = count - 1; |
70 | hold2 = 1; |
71 | }
|
72 | else if(tast_sek2 == 1 && hold2 == 1) { |
73 | hold2 = 0; |
74 | }
|
75 | };
|
76 | }
|