begin process at 2012 05 27 19:54:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > HEURE SUR AFFICHEUR 7 SEGMENTS [GCC]

HEURE SUR AFFICHEUR 7 SEGMENTS [GCC]


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Niveau :Initié Date de création :26/02/2004 Vu :14 784

Auteur : Funcky

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Ce programme permet de faire afficher l'heure courante caractère par caractère sur un afficheur 7 segments connecté au port // de votre ordinateur.

Ce programme est fait pour Linux, mais il est facilement portable sur windows en remplacant quelques fonctions comme outb par outp (ne pas oublier d'inverser les paramètres ... )

Source

  • /*
  • Code par Funcky
  • Dernière modification : 26/02/04
  • */
  • /*
  • Principe de fonctionnement du port // :
  • Lorsque l'on envoie une donnée sur le port, une tensie de 5V (théorique)
  • est appliqué entre les bornes activés et la masse ( broche 25 )
  • Le bus est un bus de 8 bit, les broches correspondant à ce bus sont
  • les broches 2 (poid faible) à 9 (poid fort)
  • Pour envoyer une donnée, il faut envoyer un séquence sur le bus de
  • controle spécifant que l'on veut le paramétrer en sortie. Et ensuite
  • envoyer l'octet sur le bus de données.
  • */
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <unistd.h>
  • #include <asm/io.h>
  • #include <time.h>
  • #define DATA 0x378 // Adresse du bus de données
  • #define CONTROL 0x37A // Adresse du bus de controle
  • void affiche (char heure[5]);
  • void date ();
  • int convertir (char source);
  • void date ()
  • {
  • struct tm * gm_date;
  • time_t secondes;
  • char heure[5];
  • time (&secondes); //recuperation du l'heure en sec
  • gm_date = localtime (&secondes); // Conversion dans la structure
  • sprintf (heure, "%02dH%02d", gm_date->tm_hour, gm_date->tm_min ); // conversion en chaine de car
  • affiche (heure);
  • }
  • int convertir (char source)
  • {
  • switch (source) // Cette fonction permet de convertir un char en son code binaire correspondant
  • { // a envoyer sur le port // pour allumer les leds de l'afficheur
  • case '0' : return 63;
  • case '1' : return 6;
  • case '2' : return 91;
  • case '3' : return 79;
  • case '4' : return 102;
  • case '5' : return 109;
  • case '6' : return 125;
  • case '7' : return 7;
  • case '8' : return 127;
  • case '9' : return 111;
  • case 'H' : return 118;
  • default : return 248;
  • }
  • }
  • void affiche (char heure[5])
  • {
  • int i;
  • unsigned char bin;
  • if (ioperm(DATA, 3, 1)) {perror("ioperm"); exit(1);} // Ouverture des autorisation sur les
  • if (ioperm(CONTROL, 3, 1)) {perror("ioperm"); exit(1);} // ports qui nous interesse
  • // Doit se faire en ROOT
  • bin = 0;
  • outb(0x00, CONTROL); //On place le bus de données en sortie
  • outb (bin,DATA); //On envoie le code binaire.
  • for (i = 0; i < 5; i++) // Boucle sur la chaie pour afficher tout les char
  • {
  • bin = convertir (heure[i]);
  • outb(0x00, CONTROL);
  • outb (bin,DATA);
  • sleep (1);
  • if (heure[i] != 'H')
  • {
  • bin += 128;
  • outb(0x00, CONTROL);
  • outb (bin,DATA);
  • sleep (1);
  • }
  • }
  • for (i = 0; i < 5; i++) // Une petite boucle pour faire clignoter
  • { // la barre centrale.
  • bin = 0;
  • outb(0x00, CONTROL);
  • outb (bin,DATA);
  • sleep (1);
  • bin = 64;
  • outb(0x00, CONTROL);
  • outb (bin,DATA);
  • sleep (1);
  • }
  • bin = 0; // Extinction de toutes les LEDS
  • outb(0x00, CONTROL);
  • outb (bin,DATA);
  • }
  • main (void)
  • {
  • int pid; //le numéro de processus
  • if (pid=fork()) // Création du process, dans le else, le processus lancé.
  • {
  • printf("Démon créé, taper \"kill %d\" pour le détruire\n",pid);
  • }
  • else
  • {
  • while (1)
  • {
  • date();
  • }
  • }
  • }
/*
	Code par Funcky
	Dernière modification : 26/02/04
*/

/*
	Principe de fonctionnement du port // :

	Lorsque l'on envoie une donnée sur le port, une tensie de 5V (théorique)
	est appliqué entre les bornes activés et la masse ( broche 25 )

	Le bus est un bus de 8 bit, les broches correspondant à ce bus sont
	les broches 2 (poid faible) à 9 (poid fort)

	Pour envoyer une donnée, il faut envoyer un séquence sur le bus de
	controle spécifant que l'on veut le paramétrer en sortie. Et ensuite
	envoyer l'octet sur le bus de données.
*/


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#include <time.h>

#define DATA 0x378   // Adresse du bus de données
#define CONTROL 0x37A  // Adresse du bus de controle

void affiche (char heure[5]);
void date ();
int convertir (char source);

void date ()
{
	struct tm * gm_date;
	time_t secondes;
	char heure[5];

	time (&secondes); //recuperation du l'heure en sec
	gm_date = localtime (&secondes); // Conversion dans la structure

	sprintf (heure, "%02dH%02d", gm_date->tm_hour, gm_date->tm_min ); // conversion en chaine de car

	affiche (heure);
}

int convertir (char source)
{
	switch (source) // Cette fonction permet de convertir un char en son code binaire correspondant
	{		// a envoyer sur le port // pour allumer les leds de l'afficheur
		case '0' : return 63;
		case '1' : return 6;
		case '2' : return 91;
		case '3' : return 79;
		case '4' : return 102;
		case '5' : return 109;
		case '6' : return 125;
		case '7' : return 7;
		case '8' : return 127;
		case '9' : return 111;
		case 'H' : return 118;
		default : return 248;
	}
}

void affiche (char heure[5])
{
	int i;
	unsigned char bin;

	if (ioperm(DATA, 3, 1)) {perror("ioperm"); exit(1);}     // Ouverture des autorisation sur les
    	if (ioperm(CONTROL, 3, 1)) {perror("ioperm"); exit(1);}	 // ports qui nous interesse
								 // Doit se faire en ROOT
	bin = 0;
	outb(0x00, CONTROL); //On place le bus de données en sortie
  	outb (bin,DATA);     //On envoie le code binaire.

	for (i = 0; i < 5; i++) // Boucle sur la chaie pour afficher tout les char
	{
		bin = convertir (heure[i]);
		outb(0x00, CONTROL);
  		outb (bin,DATA);
		sleep (1);
		if (heure[i] != 'H')
		{
			bin += 128;
			outb(0x00, CONTROL);
  			outb (bin,DATA);
			sleep (1);
		}
	}

	for (i = 0; i < 5; i++) // Une petite boucle pour faire clignoter
	{			// la barre centrale.
		bin = 0;
		outb(0x00, CONTROL);
  		outb (bin,DATA);
		sleep (1);

		bin = 64;
		outb(0x00, CONTROL);
  		outb (bin,DATA);
		sleep (1);
	}

	bin = 0;   // Extinction de toutes les LEDS
	outb(0x00, CONTROL);
  	outb (bin,DATA);
}

main (void)
{
      int pid; //le numéro de processus
      if (pid=fork())  // Création du process, dans le else, le processus lancé.
      {
            printf("Démon créé, taper \"kill %d\" pour le détruire\n",pid);
      }
      else
      {
            while (1)
	    {
            	date();
            }
      }
}

 Conclusion

Pour la connection matérielle, rien de plus simple, il vous suffit d'un connecteur male de 25 broches, de 8 résistance de 220 Ohms, 1/4 W et d'un afficheur 7 segments cathode commune.

Connectez la borne 25 sur la cathode, les bornes des segments :

2 => a
3 => b
...
9 => h

    A
F       B
    G
E       C
     D

Et H pour le point.

Dans le cas d'un afficheur standard les broches pattes sont :

en haut : G F cath A B

en bas : E D rien C H


 Sources du même auteur

LECTURE DE L'ENTÊTE D'UN FICHIER BMP [GCC]
CONVERTIR UN NOMBRE BINAIRE EN DÉCIMAL ET INVERSEMENT
Source avec Zip GESTION DE PACK
Source avec une capture CALCULATRICE
Source avec une capture PAC-MANIAK

 Sources de la même categorie

Source avec Zip Source avec une capture RS232 ET PORT // par morphixx
Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip Source avec une capture FAIRE GLISSER LA SOURIS par shorzy
Source avec Zip COMMUNICATION RS232 VIA PORT COM par MadMax1024
Source avec Zip Source avec une capture EXTINCTION ET REDEMARRAGE DE VOTRE MONITEUR À UNE HEURE PRÉC... par Yost

Commentaires et avis

Commentaire de bouchakourelectronique le 05/03/2008 09:27:36

bonjour
comment allez vous
j'ai bosion un programme en c d'un conversion analogique numerique a travers le port parallele d'pc
merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales