/*
sn74ls47.c
Raspberry Pi driving the SN74LS47
to compile : cc sn74ls47.c -o sn74ls47 -lwiringPi
*/
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <string.h>
#include <stdint.h>
#define Pins 4
#define P0 0
#define Digs 3
#define D0 10
DisplayDigits (char* digits)
{
int i;
uint8_t digit, bcd, mask ;
uint8_t index, d ;
for (digit = 0 ; digit < Digs;
++digit) {
d = toupper (digits
[digit]) ;
if ((d >= '0')
&& (d <= '9'))
// Digit
index = d - '0' ;
else
index = 0xf ;
// Blank
mask = 1;
for (bcd = 0 ; bcd < 4 ;
bcd++) {
if (index &
mask)
digitalWrite (P0 + bcd, 1) ;
else
digitalWrite (P0 + bcd, 0) ;
mask = mask
<< 1 ;
}
digitalWrite (D0 + digit,
1) ;
delay(1);
digitalWrite (D0 + digit,
0) ;
}
}
int main (void)
{
int i;
char digits [8] ;
if(wiringPiSetup() == -1) return 1;
for(i=0;i<Pins;i++) {
pinMode(P0+i,
OUTPUT);
digitalWrite(P0+i, 0);
}
for(i=0;i<Digs;i++) {
pinMode(D0+i,
OUTPUT);
digitalWrite(D0+i, 0);
}
strcpy(digits,"123");
for(i=0;i<3000;i++)
DisplayDigits(digits);
strcpy(digits,"789");
for(i=0;i<3000;i++)
DisplayDigits(digits);
for(i=0;i<Pins;i++) {
digitalWrite(P0+i, 0);
}
for(i=0;i<Digs;i++) {
digitalWrite(D0+i, 0);
}
exit;
}
|