Multiplexage 7 Segment affiche avec Arduino et enregistre la MAJ (3 / 5 étapes)

Étape 3: Le temps de Code !

Maintenant, vous avez probablement une idée de comment vous coderez votre programme basé sur votre schéma.

Pour commencer, voici un simple croquis qui affiche 456 avec décimale d’une manière temporisé pour démontrer le multiplexage. Je l’ai fait aussi flexible pour s’adapter à diverses configurations, que vous pourriez avoir. La source est également disponible en bas pour télécharger. Assurez-vous de comprendre le code tout d’abord, puis copier et coller dans une nouvelle esquisse. Ensuite, faites les ajustements nécessaires aux variables et affectation des broches car ils peuvent être différents dans votre situation. Une fois fait, télécharger sur l’Arduino.

Une chose à noter est la direction du flux de données. Si vous vous souvenez de mon schéma, la gauche plus Registre à décalage va recevoir le premier octet, mais va vider ces données hors du SER OUT si un autre octet est reçu. Donc, si vous voulez envoyer 11111111 au chiffre plus à droite, vous devez passer à 11111111 puis 00000000 et enfin 00000000. Ne vous inquiétez pas, ceci est géré automatiquement par le code.

BEGIN CODE

/*
Code pour l’interfaçage avec affichage à 7 segments
à l’aide de la méthode de multiplexage
et le registre à décalage TPIC6B595 (1 par chiffre)
Par K.O.
*/

Affectation des broches (vous devriez changer ces)
const int CLK = 9 ;           Connecté à la broche 13 de TPIC : SRCLK (aka horloge)
const int loquet = 10 ;          Connecté à la broche 12 de TPIC : RCLK (aka loquet/charge/CS/SS...)
const int OE = 11 ;          Connecté à la broche 9 de TPIC: OE (sortie active)
const int DOUT = 12 ;          Connecté à la broche 3 de TPIC : SER (aka MOSI)

Séries numériques (0-9)
Drains de 0-7 il faut relier respectivement aux segments A-DP ***
const byte [numTable] =
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};

Variables globales
int numDevices = 1 ;                       Le nombre de chiffres x afficher les modules vous envisagez d’utiliser
int maxDisplays = 3 ;                      Les affichages maximales qui pouvaient être satisfaits (voir note 1)
int maxDigits = 3 ;                        Le nombre maximal de chiffres par que vous prévoyez d’afficher affiche le module (chaque SR peut gérer un maximum de 8 chiffres)
int SRData [3] [3] ;                         L’emplacement de stockage pour les informations de chiffres. Nous devons spécifier un tableau fixe au moment de la compilation (voir note 2)
booléenne debug = true ;                     Changer à true pour afficher des messages
int delayTime = 1000 ;                     En option (juste pour avoir fait preuve de multiplexage)

/*
Notes
1. il est recommandé d’utiliser une alimentation externe pour éviter oversource/naufrage du microcontrôleur
ou si vous avez besoin à haute tension, un courant élevé s’affiche. Ce code va activer/désactiver tous les segments dans un chiffre pour *** chaque *** afficher.
Donc, si à l’aide de 2 x 3 chiffres affiche tous affichant un 8 + DP, la consommation max sera :
20mA (désiré courant) * 8 (les segments qui sont sur) * 2 (écrans à affichage d’informations identiques) = le 320mA
2. la première dimension doit être égal à maxDisplays. La deuxième dimension doit être égal au nombre de chiffres
*/

void setup()
{
Serial.Begin(9600) ;

Modes de mettre broche
pinMode(CLK,OUTPUT) ;
pinMode(LATCH,OUTPUT) ;
pinMode (DOUT, sortie) ;
pinMode (OE, sortie) ;

Afficheur 7 segments Init
digitalWrite(OE,LOW) ;        Permet un fonctionnement de SR
initializeSRData() ;          Prépare les SR et efface les données sur la ligne série

Test
setDigit(0,0,4,true) ;
setDigit(0,1,5,true) ;
setDigit(0,2,6,true) ;
}

void loop()
{
refreshDisplay() ;            Parcourt tous les affichages et les chiffres
}

=== Fonctions de SR BEGIN ===
Sub initializeSRData()
{
Afficher Scanner (boucle par le biais de chaque module d’affichage)
digitalWrite(LATCH,LOW) ;      Indique tous les SRs qu’uController envoie des données

pour (dispID int = 0; dispID < maxDisplays ; dispID ++)
{
Scanner de chiffre (boucle à travers chaque SR (chiffre) dans un module d’affichage)
pour (chiffre int = 0; chiffres < maxDigits ; chiffres ++)
{
Efface des ordures sur la ligne série
shiftOut(DOUT,CLK,LSBFIRST,0) ;          Passer à 0 s à tous les écrans
SRData [dispID] [chiffre] = 0 ;              Stocke un 0 pour chaque chiffre alors son complètement éteint
}
}
digitalWrite(LATCH,HIGH) ;      Indique tous les SRs qu’uController se fait envoie des données
}

Sub printSRData()
{
if(!Debug)
retour ;

Serial.println ("impression de SR Data...") ;

Scanner de l’affichage
pour (dispID int = 0; dispID < maxDisplays ; dispID ++)
{
Serial.Print ("# afficher") ;
Serial.println(DISPID) ;

Scanner à chiffres
pour (chiffre int = 0; chiffres < maxDigits ; chiffres ++)
{
Serial.Print ("Digit") ;
Serial.Print(digit) ;
Serial.Print(":") ;
Serial.println(SRData[DISPID][digit],bin) ;
}
Serial.println() ;
}
}

void setDigit (int dispID, int digit, valeur int, boolean dp)
{
Vérificateur de paramètre
Si (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!") ;         OoB = hors des limites
retour ;
}

Si (chiffre < 0 || chiffres > maxDigits)
{
Serial.println ("chiffre OoB!") ;
retour ;
}

Si (valeur < 0 || valeur > 9)
{
Serial.println ("Invalid value!") ;
retour ;
}

valeur = numTable [valeur] ;

Activer/désactiver dp si nécessaire
if(DP)
valeur | = B00000001 ;          Se met en marche le premier chiffre binaire (segment) à l’aide d’un masque de bits OR

Stocker le chiffre
SRData [dispID] [chiffre] = value ;

if(Debug)
printSRData() ;
}

void setSegments (int dispID, int digit, valeur d’octet)
{
Vérificateur de paramètre
Si (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!") ;
retour ;
}

Si (chiffre < 0 || chiffres > maxDigits)
{
Serial.println ("chiffre OoB!") ;
retour ;
}

Si (valeur < 0 || valeur > 255)
{
Serial.println ("Invalid byte!") ;
retour ;
}

Stocker le chiffre
SRData [dispID] [chiffre] = value ;

if(Debug)
printSRData() ;
}

Sub clearDisplay(int dispID)
{
initializeSRData() ;
refreshDisplay() ;
}

Sub refreshDisplay()
{
Scanner à chiffres
pour (chiffre int = 0; chiffres < maxDigits ; chiffres ++)
{
Scanner de l’affichage
digitalWrite(LATCH,LOW) ;
pour (int dispID = numDevices - 1; dispID > = 0; dispID--)
{
Chiffres avant blanker (déplacements sur 0 pour corriger les chiffres avant d’envoyer des données de segment au nombre souhaité)
pour (flans int = (maxDigits - 1 - digit); flans > 0; flans--)
shiftOut(DOUT,CLK,LSBFIRST,0) ;

shiftOut(DOUT,CLK,LSBFIRST,SRData[dispID][digit]) ;

Après chiffre blanker (déplacements sur 0 s à chiffres restants)
pour (int blancs = chiffre ; flans > 0; flans--)
shiftOut(DOUT,CLK,LSBFIRST,0) ;
}
digitalWrite(LATCH,HIGH) ;

Illustre le fonctionnement de multiplexage
Delay(delayTime) ;
delayTime-= 10 ;
Si (delayTime < = 0)
delayTime = 0 ;
}
}

=== FIN SR fonctions ===

FIN DU CODE

Articles Liés

Différentes méthodes de conduite 7 Segment LED affiche avec Arduino

Différentes méthodes de conduite 7 Segment LED affiche avec Arduino

je voudrais juste montrer quelques différentes méthodes de connexion des affichages à 7 segments LED à un Arduino ou Atmega 328 IC. Ils ne sont que de simples codes soit automatiquement comptage via le code ou incrémentées / décrémentées grâce à une
Signal Flow affiche (avec Chibitronics et Arduino)

Signal Flow affiche (avec Chibitronics et Arduino)

Ce projet combine des autocollants de circuit Chibitronics avec Arduino simple de programmation pour créer une affiche avec voyants clignotants qui illustre le sens du signal studio enregistrement base !Étape 1: Outils et matériauxPour rendre cette a
Comment faire un affichage LED à 7 segments avec Arduino

Comment faire un affichage LED à 7 segments avec Arduino

Je vais vous montrer comment faire un segment 7 Ecran à LEDS. Combiner avec Arduino pour créer le compte à rebours, texte simple et plus encore. J'aime faire des projets originaux. J'ai cherché l'ensemble d'instructables et n'a pas trouvé un comme ça
Fait maison jouet caisse enregistreuse avec Arduino

Fait maison jouet caisse enregistreuse avec Arduino

Salut, je suis un fabricant âgé de 14 an. J'utilise principalement l'Arduino UNO et des choses que je peux acheter à la boutique de la RFY, de que j'habite à côté ou des choses d'autour de la maison. Mes sœurs cadettes dessiniez claviers sur papier e
Contrôle de graphique à barres simple LED avec Arduino

Contrôle de graphique à barres simple LED avec Arduino

dans ce tutoriel je vais vous montrer comment contrôler tableau simple de graphique à barres LED 10 w / Arduino ou Arduino clone MCU et MAX7219 (fonctionne également avec MAX7221) puce contrôleur LED.Voici la vidéo du produit fini en actionSur les ta
Une horloge de RVB LED 15 avec Arduino core

Une horloge de RVB LED 15 avec Arduino core

L'horloge de RVB utilise le modèle de composition de couleur RVB utilisé dans tous les écrans de couleur. Ce modèle utilise trois couleurs « de base », à savoir rouges, verts et bleus, pour construire n'importe quelle autre couleur « composite » du s
Smart personnel thermomètre avec Arduino

Smart personnel thermomètre avec Arduino

Cette instructable est préparée dans le cadre de notre mission pour TfCD (technique au service du Concept Design) cours de TU Delft. Ce instructable qui suit est préparé par :Bo Koperdraat : 4209567Karthik mandon : 4501578Dans ce instructable vous ap
IoT murale avec Arduino et ESP8266

IoT murale avec Arduino et ESP8266

Dans ce instructable, je vous montrer comment ajouter accessibilité améliorée, intelligence et une connectivité à une prise murale ordinaire. Cela se fait avec une combinaison de microcontrôleurs, Arduino, divers capteurs, ESP8266 et un mélange de pr
Contrôle des appareils ménagers avec Arduino

Contrôle des appareils ménagers avec Arduino

Bonjour Instructables... Voici le projet simple par lequel nous pouvons allumer et éteindre appareils par n'importe quel IR ordinaire distants comme TV, télécommandes DVD etc...,Étape 1: Composants requis Composants nécessitentCarte relais pilote - 1
Système de sécurité et contrôle d’accès avec Arduino et RFID

Système de sécurité et contrôle d’accès avec Arduino et RFID

système de sécurité et contrôle d'accès avec Arduino et RFIDCe projet est un evolotuin de mon premier projet appelé « Arduino – sécurité et contrôle d'accès système »Comme vous pouvez voir à l'http://arduinobymyself.blogspot.com.br/2012/03/arduino-si
Ligne de base suivant Robot avec Arduino

Ligne de base suivant Robot avec Arduino

07/09/2015Il a été quelques années puisque nous avons affiché initialement ce Robot suivant ligne de base avec tutorial Arduino, et il semble tellement de gens a jugé utile que nous devrions poster une mise à jour qui se déroule courant Arduino bibli
Programmation des AVR avec Arduino comme ISP sans Bootloader et Crystal externe

Programmation des AVR avec Arduino comme ISP sans Bootloader et Crystal externe

Salut!!. Je suis Avra et c'est mon premier instructable. Ici je vais vous expliquer comment graver les codes sur autonome AVR ICs sans utiliser n'importe quel USBASP, tout cristal externe et un chargeur de démarrage. Vous avez seulement besoin d'une
Calculatrice de Code de couleur de résistance avec Arduino

Calculatrice de Code de couleur de résistance avec Arduino

Il s'agit d'une bande de 4 résistance mécanique du Code couleur calculatrice, mГЄlГ l'idée de faire que cette résistance mécanique est venue quand j'ai accidentellement laissé tomber ma boîte de résistances et de toutes les résistances (1300 d'entre
Enfants de l’écran minuterie avec Arduino

Enfants de l’écran minuterie avec Arduino

Ce dispositif donne un parent vraiment robuste moyen de contrôler la quantité de temps d'écran (TV / DVD / console) leurs enfants ont chaque jour. Il fonctionne en ayant un temps-switch intelligent qui contrôle le signal HDMI en passant entre un appa