3x4 Matrixtastatur-Ansteuerung mit MiniModul 537

OP #4378353
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#");










  }
Angehängte Dateien:
OP #4378462
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
OP #4380912
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
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren