/*
mc14489.c
Raspberry Pi driving the MC14489
to compile : cc mc14489.c -o mc14489 -lwiringPi
*/
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringShift.h>
#define DATA 0
#define CLOCK 1
#define ENABLE 2
void displayON() {
digitalWrite(ENABLE,LOW);
shiftOut(DATA,CLOCK,MSBFIRST,0x01); //
HEX DECODE ALL BANK
digitalWrite(ENABLE,HIGH);
delay(10);
}
void displayOFF() {
digitalWrite(ENABLE,LOW);
shiftOut(DATA,CLOCK,MSBFIRST,0xff); //
SPECIAL DECODE ALL BANK
digitalWrite(ENABLE,HIGH);
delay(10);
digitalWrite(ENABLE,LOW);
shiftOut(DATA,CLOCK,MSBFIRST,0x00);
shiftOut(DATA,CLOCK,MSBFIRST,0x00);
shiftOut(DATA,CLOCK,MSBFIRST,0x00);
digitalWrite(ENABLE,HIGH);
delay(10);
}
uint8_t convertDigit(char digit) {
uint8_t d0;
d0 = toupper (digit) ;
if ((d0 >= '0') && (d0 <=
'9')) // Digit
d0 = d0 - '0' ;
else if ((d0 >= 'A') && (d0 <=
'F')) // Hex
d0 = d0 - 'A' + 10 ;
return(d0);
}
void displayDigits(int mode, char* digits) {
int i;
uint8_t data[3];
uint8_t index;
uint8_t d[5];
for(i=0;i<5;i++) {
d[i] = convertDigit (digits[i]) ;
}
data[0]=0x00;
// DIM LED
if(mode == 1) data[0]=0x08; //
BRIGHTEN LED
data[0]=(data[0] << 4) + d[4];
data[1]=(d[3] << 4) + d[2];
data[2]=(d[1] << 4) + d[0];
digitalWrite(ENABLE,LOW);
shiftOut(DATA,CLOCK,MSBFIRST,data[0]);
shiftOut(DATA,CLOCK,MSBFIRST,data[1]);
shiftOut(DATA,CLOCK,MSBFIRST,data[2]);
digitalWrite(ENABLE,HIGH);
delay(10);
}
int main (int argc, char **argv) {
if(wiringPiSetup() == -1) return 1;
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(ENABLE, OUTPUT);
digitalWrite(DATA,LOW);
digitalWrite(CLOCK,LOW);
digitalWrite(ENABLE,LOW);
displayON();
displayDigits(0,"00123");
getchar();
displayDigits(1,"00123");
getchar();
displayDigits(0,"00789");
getchar();
displayDigits(1,"00789");
getchar();
displayDigits(0,"00abc");
getchar();
displayDigits(1,"00abc");
getchar();
displayOFF();
exit;
}
|