Souhaitez-vous participer à la création d'un jeu vidéo inspiré de Stardew Valley, ou le tester lorsque la version bêta sera disponible ? Remplissez notre sondage ou inscrivez-vous à notre lettre d'information (en bas de page)
1

Challenge un affichage 4 digits 7segments minimaliste

le 30-09-2016 à 00:12 #
Salut à tous,

Pensez vous que l'on peut faire plus court hard et soft
A partir de 4 afficheurs je prendrai un ulm20003 mais il n'y en a pas dans mon simulateur j'ai donc utilisé des transistors
simulateur https://circuits.io/circuits/2818788/edit#breadboard


programme

//Rokag3 demonstration of simple routine to drive 4 x 7 digits multiplexed with only 3 IO
//If you can make it cheaper
//last modification 29/9/2016
//

int latchPin = 8;//Pin connected to ST_CP of 74HC595
int clockPin = 12;//Pin connected to SH_CP of 74HC595
int dataPin = 11;////Pin connected to DS of 74HC595
int VarDelay_S_Bit = 0; // Var delay
int VarDelay_S_Byte = 2; // Var delay
int Compteur=0;
uint8_t q,x,z = 0;
int Unit =1; //position of the bit that activate the 7digit unit
int Deca =2; //position of the bit that activate the 7digit 10
int Hecto =4; //position of the bit that activate the 7digit 100
int Kilo =8; //position of the bit that activate the 7digit 1000

void setup() //Enters the setup phase
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
delayrefresh(20,8888); //load the capacitor
}

void shiftOut_controled(uint8_t val)
{
uint8_t i;
digitalWrite(latchPin, LOW);//ground latchPin and hold low for as long as you are transmitting
for (i = 0; i < 8; i++) {
q=!!(val & (1 << (7 - i)));
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
//delay(VarDelay_S_Bit); //eventually to be trimmed here for the real world watch your scope
digitalWrite(clockPin, LOW);
//delay(VarDelay_S_Bit);//http://pdf.datasheetcatalog.com/datasheet/philips/74AHC_AHCT595_1.pdf
}
digitalWrite(latchPin, HIGH);//return the latch pin high to signal chip no longer needs to listen for information
delay(VarDelay_S_Byte); //to be trimmed here for the real world
}

void loop()
{ //your routine here
Compteur++;
delayrefresh(20,Compteur);//if you have nothing to do you must go to writeCountTo7Digit(int)
}

void delayrefresh(uint8_t TimeToWait,unsigned int N ){ for (uint8_t zzz=1; zzz<=TimeToWait; zzz++) writeCountTo7Digit(N); }

void writeCountTo7Digit(unsigned int z)
{
shiftOut_controled((z % 10U)+ (Unit*16));//EXTRACT THE FIRST DIGIT OF Z
shiftOut_controled(((z / 10U)%10)+ (Deca*16));//EXTRACT THE second DIGIT OF Z
shiftOut_controled(((z / 100U)%10)+ (Hecto*16));//EXTRACT THE third DIGIT OF Z
shiftOut_controled(((z / 1000U)%10)+ (Kilo*16));//EXTRACT THE Fourth DIGIT OF Z

}


//to extract a digit in a number unsigned n = 12345; unsigned x = (n / 10U) % 10; unsigned y = (n / 1000U) % 10;After running that, x will be equal to 4 and y will be equal to 2.



(Modifié par rokag3 le 30-09-2016 à 00:22)




Ces discussions pourraient vous intéresser également:


Affichage du UC
affichage sur MSN
affichage agaçant
affichage jeux
msn affichage contact