/*
dm13a.c
Raspberry Pi driving the DM13A
to compile : cc dm13a.c -o dm13a -lwiringPi
*/
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
// define our pins :
#define DAI 0 //
GPIO 17 header pin 11
#define DCK 1 // GPIO
18 header pin 12
#define LAT 2 // GPIO
27 header pin 13
#define EN
3 // GPIO 22 header pin 15
#define Digs 3
#define D0 10
static const uint8_t segmentDigits [] =
{
// a b c d e f g
p Segments
// 0 1 2 3 4 5 6
7 wiringPi pin No.
1, 1, 1, 1, 1, 1, 0,
0, // 0
0, 1, 1, 0, 0, 0, 0,
0, // 1
1, 1, 0, 1, 1, 0, 1,
0, // 2
1, 1, 1, 1, 0, 0, 1,
0, // 3
0, 1, 1, 0, 0, 1, 1,
0, // 4
1, 0, 1, 1, 0, 1, 1,
0, // 5
1, 0, 1, 1, 1, 1, 1,
0, // 6
1, 1, 1, 0, 0, 0, 0,
0, // 7
1, 1, 1, 1, 1, 1, 1,
0, // 8
1, 1, 1, 1, 0, 1, 1,
0, // 9
1, 1, 1, 0, 1, 1, 1,
0, // A
0, 0, 1, 1, 1, 1, 1,
0, // b
1, 0, 0, 1, 1, 1, 0,
0, // C
0, 1, 1, 1, 1, 0, 1,
0, // d
1, 0, 0, 1, 1, 1, 1,
0, // E
1, 0, 0, 0, 1, 1, 1,
0, // F
0, 0, 0, 0, 0, 0, 0,
0, // blank
} ;
static void DM13ASend (uint8_t * output)
{
int i;
digitalWrite(EN,1);
digitalWrite(LAT,0);
for (i=16; i>0; i--)
{
if (output[i-1])
digitalWrite(DAI,1);
else
digitalWrite(DAI,0);
digitalWrite(DCK,1);
digitalWrite(DCK,0);
}
digitalWrite(LAT,1);
digitalWrite(LAT,0);
digitalWrite(EN,0);
}
DisplayDigits (char* digits)
{
int i;
uint8_t digit, segment ;
uint8_t index, d, segVal ;
uint8_t output[16];
memset(output,0,sizeof(output));
for (digit = 0 ; digit < Digs; ++digit) {
digitalWrite (D0 + digit, 1) ;
d = toupper (digits [digit]) ;
if ((d >= '0') && (d <=
'9'))
// Digit
index = d - '0' ;
else if ((d >= 'A') && (d
<= 'F')) //
Hex
index = d - 'A' + 10 ;
else
index = 16
;
// Blank
for (segment = 0 ; segment < 8 ;
++segment) {
output[segment] =
segmentDigits [index * 8 + segment] ;
}
DM13ASend (output);
delayMicroseconds (100) ;
digitalWrite (D0 + digit, 0) ;
}
}
int main (void)
{
int i;
char digits [8] ;
printf ("\n\nRaspberry Pi DM13A Test using
WiringPi\n\n");
if (wiringPiSetup () == -1) exit (1) ;
pinMode(DAI,OUTPUT);
pinMode(DCK,OUTPUT);
pinMode(LAT,OUTPUT);
pinMode(EN, OUTPUT);
for(i=0;i<Digs;i++) {
pinMode(D0+i, OUTPUT);
digitalWrite(D0+i, 0);
}
digitalWrite(DCK,0);
digitalWrite(LAT,0);
digitalWrite(EN,0);
strcpy(digits,"123");
for(i=0;i<3000;i++) DisplayDigits(digits);
strcpy(digits,"ABC");
for(i=0;i<3000;i++) DisplayDigits(digits);
for(i=0;i<Digs;i++) {
digitalWrite(D0+i, 0);
}
return 0;
}
|