|
begin process at 2008 07 05 07:20:49
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CONTROLE D'UN ECRAN LCD VIA LE PORT PARALLELE
Information sur la source
Description
Controle d'un ecran LCD via le port parallele d'un PC. Vous choisissiez un message, et celui-ci defile sur l'ecran LCD. Le schema pour relier l'ecran au port est fourni dans le zip.
Source
- /*----------------------------------*\
- * Auteur: Halim ABOUZEID *
- | Date: 11/08/2004 |
- | e-mail: halim.abouzeid@gmail.com |
- +------------------------------------+
- | Ce programme fait defiler un texte |
- | sur un ecran LCD. |
- | Ce programme devrait fonctionner |
- | avec n'importe quel ecran LCD |
- * pilote par le HD44780. *
- \*----------------------------------*/
-
-
-
-
-
- #include <windows.h>
- #include <stdio.h>
-
-
- #define PORT 0x378 //adresse du port parallele
- #define DATA PORT+0
- #define STATUS PORT+1
- #define CONTROL PORT+2
-
-
-
-
- BYTE inportb(UINT portid)
- {
- unsigned char value;
- __asm mov edx,portid
- __asm in al,dx
- __asm mov value,al
- return value;
- }
-
-
- void outportb(UINT portid,BYTE value)
- {
- __asm mov edx,portid
- __asm mov al,value
- __asm out dx,al
- }
-
-
-
- //Envoie une commande a l'ecran
- void PUTCMD(int cmd)
- {
- outportb(DATA, cmd);
-
- outportb(CONTROL,inportb(CONTROL) | 0x01); //Enable niveau haut
- Sleep(20);
- outportb(CONTROL,inportb(CONTROL) & 0xFE); //Enable niveau bas
- Sleep(20);
-
- return;
- }
-
-
- //Efface l'ecran
- void CLEAR()
- {
- outportb(CONTROL, inportb(CONTROL) | 0x08);
- PUTCMD(0x01);
- outportb(CONTROL, inportb(CONTROL) & 0xF7);
- return;
- }
-
-
- void EMODE(int cmd)
- {
- cmd=(cmd & 0x03);
- cmd=(cmd | 0x04);
- PUTCMD(cmd);
- return;
- }
-
-
- void DMODE(int cmd)
- {
- cmd=(cmd & 0x07);
- cmd=(cmd | 0x08);
- PUTCMD(cmd);
- return;
- }
-
-
- void SDDMODE(int cmd)
- {
- cmd=(cmd | 0x80);
- PUTCMD(cmd);
- return;
- }
-
-
- //Affiche un caractere
- void PUTCHAR(char cmd)
- {
- outportb(DATA, cmd);
-
- outportb(CONTROL,inportb(CONTROL) | 0x01); //Enable niveau haut
- Sleep(2);
- outportb(CONTROL,inportb(CONTROL) & 0xFE); //Enable niveau bas
- //Sleep(2);
-
- return;
- }
-
-
- //Choix de la ligne sur laquelle afficher
- void LINE(int cmd)
- {
- cmd=(cmd | 0x80);
- outportb(CONTROL, inportb(CONTROL) | 0x08); //RS niveau haut
- PUTCMD(cmd);
- outportb(CONTROL, inportb(CONTROL) & 0xF7); //RS niveau bas
- return;
- }
-
-
-
- //Initialisation de l'ecran LCD
- void INIT()
- {
- int cmd;
-
- outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Reset Control Port - Make sure Forward Direction */
- outportb(CONTROL, inportb(CONTROL) | 0x08); //RS niveau haut
-
-
- cmd=0x38; //2 lignes 8 colonnes
- PUTCMD(cmd);
-
- cmd=0x00; //disp. off, curs. off, blink off
- DMODE(cmd);
-
- cmd=0x04; //disp. on, curs. off
- DMODE(cmd);
-
- cmd=0x02; //auto-inc a droite
- EMODE(cmd);
-
- outportb(CONTROL, inportb(CONTROL) & 0xF7); //RS niveau bas
-
- return;
- }
-
-
-
- //Fait derouler le message
- void AFFICHE(char message[100],int count)
- {
-
- int i;
- char mess[100];
-
- if(count<16) //si le message fait moin de 16 caracteres
- count=16; //forcer a prendre les 16 1ers caracteres
-
- if (count>16) //si le message fait plus de 16 caracters
- if (100-count>5) //on ajoute un espacement entre 2 defilements successif
- count=count+5;
- else
- count=100;
-
-
- while(1)
- {
- mess[count-1]=message[0]; //
- for (i=0;i<count-1;i++) //
- mess[i]=message[i+1]; //Modification de l'ordre des x caracteres
- for (i=0;i<100;i++) //du message pour donner l'effet de defillement
- message[i]=mess[i]; //(x=count)
-
-
- Sleep(200);
- LINE(0x00); //Ramene le curseur au debut de la ligne
-
- for (i=0;i<16;i++) //Affiche les 16 premiers caracteres
- PUTCHAR(message[i]);
- }
-
- return;
-
- }
-
-
-
-
- void main()
- {
- char message[100];
- int i,count;
-
- INIT(); //initialisation de l'ecran LCD
- CLEAR(); //efface l'ecran LCD
-
- for(i=0;i<100;i++) //message=que des espaces vides
- message[i]=' ';
-
-
- printf("Enter message (100 car. max): ");
-
- //Saisie du message a faire defiler
- for(i=0;i<100;i++)
- {
- message[i]=getchar();
- if (message[i]=='\n')
- {
- message[i]=' '; //suppression du caractere de retours a la ligne
- count=i; //count=nombre de caracteres dans le message
- break;
- }
- }
-
-
- AFFICHE(message,count); //affiche le message
- }
/*----------------------------------*\
* Auteur: Halim ABOUZEID *
| Date: 11/08/2004 |
| e-mail: halim.abouzeid@gmail.com |
+------------------------------------+
| Ce programme fait defiler un texte |
| sur un ecran LCD. |
| Ce programme devrait fonctionner |
| avec n'importe quel ecran LCD |
* pilote par le HD44780. *
\*----------------------------------*/
#include <windows.h>
#include <stdio.h>
#define PORT 0x378 //adresse du port parallele
#define DATA PORT+0
#define STATUS PORT+1
#define CONTROL PORT+2
BYTE inportb(UINT portid)
{
unsigned char value;
__asm mov edx,portid
__asm in al,dx
__asm mov value,al
return value;
}
void outportb(UINT portid,BYTE value)
{
__asm mov edx,portid
__asm mov al,value
__asm out dx,al
}
//Envoie une commande a l'ecran
void PUTCMD(int cmd)
{
outportb(DATA, cmd);
outportb(CONTROL,inportb(CONTROL) | 0x01); //Enable niveau haut
Sleep(20);
outportb(CONTROL,inportb(CONTROL) & 0xFE); //Enable niveau bas
Sleep(20);
return;
}
//Efface l'ecran
void CLEAR()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
PUTCMD(0x01);
outportb(CONTROL, inportb(CONTROL) & 0xF7);
return;
}
void EMODE(int cmd)
{
cmd=(cmd & 0x03);
cmd=(cmd | 0x04);
PUTCMD(cmd);
return;
}
void DMODE(int cmd)
{
cmd=(cmd & 0x07);
cmd=(cmd | 0x08);
PUTCMD(cmd);
return;
}
void SDDMODE(int cmd)
{
cmd=(cmd | 0x80);
PUTCMD(cmd);
return;
}
//Affiche un caractere
void PUTCHAR(char cmd)
{
outportb(DATA, cmd);
outportb(CONTROL,inportb(CONTROL) | 0x01); //Enable niveau haut
Sleep(2);
outportb(CONTROL,inportb(CONTROL) & 0xFE); //Enable niveau bas
//Sleep(2);
return;
}
//Choix de la ligne sur laquelle afficher
void LINE(int cmd)
{
cmd=(cmd | 0x80);
outportb(CONTROL, inportb(CONTROL) | 0x08); //RS niveau haut
PUTCMD(cmd);
outportb(CONTROL, inportb(CONTROL) & 0xF7); //RS niveau bas
return;
}
//Initialisation de l'ecran LCD
void INIT()
{
int cmd;
outportb(CONTROL, inportb(CONTROL) & 0xDF); /* Reset Control Port - Make sure Forward Direction */
outportb(CONTROL, inportb(CONTROL) | 0x08); //RS niveau haut
cmd=0x38; //2 lignes 8 colonnes
PUTCMD(cmd);
cmd=0x00; //disp. off, curs. off, blink off
DMODE(cmd);
cmd=0x04; //disp. on, curs. off
DMODE(cmd);
cmd=0x02; //auto-inc a droite
EMODE(cmd);
outportb(CONTROL, inportb(CONTROL) & 0xF7); //RS niveau bas
return;
}
//Fait derouler le message
void AFFICHE(char message[100],int count)
{
int i;
char mess[100];
if(count<16) //si le message fait moin de 16 caracteres
count=16; //forcer a prendre les 16 1ers caracteres
if (count>16) //si le message fait plus de 16 caracters
if (100-count>5) //on ajoute un espacement entre 2 defilements successif
count=count+5;
else
count=100;
while(1)
{
mess[count-1]=message[0]; //
for (i=0;i<count-1;i++) //
mess[i]=message[i+1]; //Modification de l'ordre des x caracteres
for (i=0;i<100;i++) //du message pour donner l'effet de defillement
message[i]=mess[i]; //(x=count)
Sleep(200);
LINE(0x00); //Ramene le curseur au debut de la ligne
for (i=0;i<16;i++) //Affiche les 16 premiers caracteres
PUTCHAR(message[i]);
}
return;
}
void main()
{
char message[100];
int i,count;
INIT(); //initialisation de l'ecran LCD
CLEAR(); //efface l'ecran LCD
for(i=0;i<100;i++) //message=que des espaces vides
message[i]=' ';
printf("Enter message (100 car. max): ");
//Saisie du message a faire defiler
for(i=0;i<100;i++)
{
message[i]=getchar();
if (message[i]=='\n')
{
message[i]=' '; //suppression du caractere de retours a la ligne
count=i; //count=nombre de caracteres dans le message
break;
}
}
AFFICHE(message,count); //affiche le message
}
Sources de la même categorie
Commentaires
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | | | |
|
|
|