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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.