Forum: Mikrocontroller und Digitale Elektronik 3x4 Matrixtastatur-Ansteuerung mit MiniModul 537


von Thomas U. (tobby)


Angehängte Dateien:

Lesenswert?

Hallo Community,

ich bräuchte dringend mal eure Hilfe zur Entwicklung eines Programms mit 
C.

Ich soll für mein Studium eine 3x4 Matrix-Tastaurabfrage programmieren. 
Wir verwenden das miniModul-537.

Leider ist mein Wissen und der Gebrauch von C  schon etwas länger her, 
sodass nur noch wesentliche Grundlagen bekannt sind. Der Prof meinte 
zwar, diese sind ausreichend, jedoch komme ich nicht wirklich weiter.

Bekannt ist, das es 3 Eingabe und 4 Ausgabeports gibt. Die Grundlegende 
Struktur besteht nun darin zuerst jede der 3 Spalten abzufragen, ob sich 
dort eine gedrückte taste befindet, und falls ja, anschließend die 
einzelnen Zeilen abzufragen um die genaue Lage und somit die taste zu 
ermitteln.

Bisher ist es mir nur gelungen die Abfrage jeder einzelnen Taste zu 
bilden.
Die oben genannte Struktur ist klar, jedoch fehlt mir die Kenntnis, 
diese in C umzusetzen.

Es wäre super wenn mir jemand dabei helfen könnte.

Vielen Dank für eure Hilfe im Voraus !



/* FLASH.C - LED Flasher for Phytecs Rapid Development Kits 
*/

#include <reg517.h>                    /* include 80517 header file 
*/
//#include <stdio.h>      /* Standard I/O functions              */
//#include "serinit.h"    /* Automatic baudrate detection        */

// Port4.0 = Spalte 1
// Port4.1 = Spalte 2
// Port4.2 = Spalte 3

// Port4.3 = Zeile 1
// Port4.4 = Zeile 2
// Port4.5 = Zeile 3
// Port4.6 = Zeile 4
 //mainprogram

  sbit Spalte1 = P4^0;
  sbit Spalte2 = P4^1;
  sbit Spalte3 = P4^2;
  sbit Zeile1 = P4^3;
  sbit Zeile2 = P4^4;
  sbit Zeile3 = P4^5;
  sbit Zeile4 = P4^6;

void wait (void)  {                    /* wait function 
*/
  ;                                    /* only to delay for LED flashes 
*/
}

void main (void)  {
  unsigned int i;  /* delay var                           */


  while (1) {                          /* loop forever 
*/

Zeile1=1;
Zeile2=1;
Zeile3=1;
Zeile4=1;
//Spalte1=0;
//Spalte2=0;
//Spalte3=0;

if(Spalte1==0 || Spalte2==0 || Spalte3==0){

if(Spalte1==0 && Zeile1==0)
printf ("Taste1");

if(Spalte2==0 && Zeile1==0)
printf ("Taste2");

if(Spalte3==0 && Zeile1==0)
printf ("Taste3");

if(Spalte1==0 && Zeile2==0)
printf ("Taste4");

if(Spalte2==0 && Zeile2==0)
printf ("Taste5");

if(Spalte3==0 && Zeile2==0)
printf ("Taste6");

if(Spalte1==0 && Zeile3==0)
printf ("Taste7");

if(Spalte2==0 && Zeile3==0)
printf ("Taste8");

if(Spalte3==0 && Zeile3==0)
printf ("Taste9");

if(Spalte1==0 && Zeile4==0)
printf ("Taste*");


if(Spalte2==0 && Zeile4==0)
printf ("Taste0");


if(Spalte3==0 && Zeile4==0)
printf ("Taste#");










  }

von Peter D. (peda)


Lesenswert?

1. Code heißt *.c und nicht *.txt
2. Code einfügen siehe unter "Formatierung".

Man wie die Zeit vergeht.
Beitrag "Re: 3x4 tastenmatrix auslesen ..auf ein neues"

von Thomas U. (tobby)


Lesenswert?

Danke zunächst für die rasche Antwort.

Den Quellcode habe ich nur ebend aus dem Programm in eine .txt kopiert 
damit man ihn sich besser laden kann.

Der unter dem Link aufgeführte Code ist für das MiniModul 537 und dem 
damit verbundenem  8-Bit Controller Infineon SAB 80C537 verwendbar ?

Viele Grüße

von Thomas U. (tobby)


Lesenswert?

Peter D. schrieb:

> 2. Code einfügen siehe unter "Formatierung".
1
/* FLASH.C - LED Flasher for Phytecs Rapid Development Kits                   */
2
3
#include <reg517.h>                    /* include 80517 header file           */
4
//#include <stdio.h>      /* Standard I/O functions              */
5
//#include "serinit.h"    /* Automatic baudrate detection        */
6
7
// Port4.0 = Spalte 1
8
// Port4.1 = Spalte 2
9
// Port4.2 = Spalte 3
10
11
// Port4.3 = Zeile 1
12
// Port4.4 = Zeile 2
13
// Port4.5 = Zeile 3
14
// Port4.6 = Zeile 4
15
 //mainprogram                                                              
16
17
  sbit Spalte1 = P4^0;  
18
  sbit Spalte2 = P4^1;  
19
  sbit Spalte3 = P4^2;  
20
  sbit Zeile1 = P4^3;  
21
  sbit Zeile2 = P4^4;  
22
  sbit Zeile3 = P4^5;  
23
  sbit Zeile4 = P4^6;
24
25
void wait (void)  {                    /* wait function                       */
26
  ;                                    /* only to delay for LED flashes       */
27
}
28
29
void main (void)  {
30
  unsigned int i;  /* delay var                           */
31
32
33
  while (1) {                          /* loop forever                        */
34
    
35
Zeile1=1;
36
Zeile2=1;
37
Zeile3=1;
38
Zeile4=1;
39
//Spalte1=0;
40
//Spalte2=0;
41
//Spalte3=0;
42
43
if(Spalte1==0 || Spalte2==0 || Spalte3==0){
44
45
if(Spalte1==0 && Zeile1==0)
46
printf ("Taste1");
47
48
if(Spalte2==0 && Zeile1==0)
49
printf ("Taste2");
50
51
if(Spalte3==0 && Zeile1==0)
52
printf ("Taste3");
53
54
if(Spalte1==0 && Zeile2==0)
55
printf ("Taste4");
56
57
if(Spalte2==0 && Zeile2==0)
58
printf ("Taste5");
59
60
if(Spalte3==0 && Zeile2==0)
61
printf ("Taste6");
62
63
if(Spalte1==0 && Zeile3==0)
64
printf ("Taste7");
65
66
if(Spalte2==0 && Zeile3==0)
67
printf ("Taste8");
68
69
if(Spalte3==0 && Zeile3==0)
70
printf ("Taste9");
71
72
if(Spalte1==0 && Zeile4==0)
73
printf ("Taste*");
74
75
76
if(Spalte2==0 && Zeile4==0)
77
printf ("Taste0");
78
79
80
if(Spalte3==0 && Zeile4==0)
81
printf ("Taste#");
82
83
84
85
86
87
88
89
90
 
91
92
  }

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.