changement 4 bits à 8 bits code lcd

E

evaang2003

Guest
salut,
j'ai problème dans le changement 4 bits lcd module de 8 bits lcd module.
j'ai le code source de l'aide du capteur de température DS1820 qui affiche la température sur 4 bits lcd module.

Cependant, mon lcd il ne peut fonctionner que sur 8 bits module.
quelqu'un peut-il me montrer comment la changer?
i am using ccs c compilateur.
Je joins ici avec 4bit lcd capteur de température et de code à 8 bits lcd conducteur.
ici est le résultat après i combiner entre eux, mais il din travail.

il me le dire à la LineOfCharacters ne correspond pas à la réalité en compte.
pourquoi?

void main (void)
(
char LineOfCharacters;
InitLCD ();
GoToLine (1);
printf (WriteChar, "la température est", 1);

while (TRUE)
(
ResetDS1820 ();
cDataOut = DS1820_SKIP_ROM;
WriteDS1820 ();
cDataOut = DS1820_CONVERT_T;
WriteDS1820 ();
WaitForConversion ();

ResetDS1820 ();
cDataOut = DS1820_SKIP_ROM;
WriteDS1820 ();
cDataOut = DS1820_READ_SCRATCHPAD;
WriteDS1820 ();
ReadDS1820 ();
iTemperature = iDataIn / 2;
GoToLine (2);
printf (WriteChar, "% lu% lu% cC% cF", iTemperature, DEGREE_SYM, ((9 * iTemperature) / 5) 32, DEGREE_SYM);
)
)
Désolé, mais vous avez besoin de login pour afficher cette pièce jointe

 
d'interface entre micro-capteur de température lm35 ou de tout autre regard sur ces pages, LCD de routine et des exemples de projets, VB loging données des projets,
cliquez ici
http://picinf.blogspot.com/

et si vous souhaitez utiliser un mocrocontroller famille de 8051 et que vous voulez avec l'interface PC par port série ou en parallèle avec les données de température loging, ici vous trouverez l'exemple et de référence des projets de micro-contrôleurs.
http://microcontroller51.blogspot.com/

 
bien,
j'ai trouvé les 8 bits du pilote LCD.
Toutefois, le programme i écrire ne sont pas afficher le texte.
peut me dire ce qui ne va pas?
le principal () est le programme que
j'ai écrit alors que le reste de la FONCTION est de 8 bits.# INCLUDE <16F877a.H>
#
include <string.h>
#
use delay (clock = 40000000)
#
include <stdio.h>

# define IR 0
# define DR 1
# define READ 1
# define WRITE 0
# define lcd_2X16/ * Définit les bits pour le port C * /
struct (
int inutilisés: 5 / / Les 5 premiers bits ne sont pas utilisés par l'écran LCD
int en: 1; / / EN est le 6ème peu de Port C RC5
int rs: 1; / / RS est le 7ème bit du port C RC6
int rw: 1 / / RW est le 8ème bit de Port C RC7
LCDControl);
# byte LCDData = 0x08 / / Définit l'adresse de la variable LCDData
/ / comme celui de Port D
# byte LCDControl = 0x07 / / Définit l'adresse de la structure
/ / LCDControl que celle de Port-C
# byte LCDDataDir = 0x88 / / Définit l'adresse de la variable
/ / LCDDataDir que celui de TrisD
# byte LCDConDir = 0x87 / / Définit l'adresse de la variable
/ / LCDConDir que celui de TrisC
# define LCD_DATA_IN LCDDataDir | = 0xFF / / pour mettre les lignes de données en entrée
# define LCD_DATA_OUT LCDDataDir & = 0x00 / / pour mettre les lignes de données en sortie
# define LCD_CON_OUT LCDConDir & = 0x1F / / pour définir la ligne de commande de sortie/************************ Le WriteByte fonction *******************/
/ *
Cette fonction écrit un octet à l'écran avec un module de 8-bit
interface
Paramètres d'entrée:
int rs Cette variable sélectionne le répertoire en écriture.
DR choisit le registre de données
IR sélectionne le registre d'instructions
int data_to_lcd Cette variable stocke les données qui seront écrites sur
l'enregistrer, sélectionnez
* /
void WriteByte (short int rs, int data_to_lcd)
(
LCD_DATA_OUT / / LCD est un bus de données de sortie
LCDControl.rw = WRITE; / / L'opération est une opération d'écriture
LCDControl.rs = rs / / Sélectionne le registre (DR ou IR)
delay_us (1) / / Attendre un minimum de 60ns
LCDControl.en = 1; / / Raise FR
LCDData = data_to_lcd; / /
Définit le bus de données à la valeur désirée
delay_us (1) / / Attendre un minimum de 195ns
LCDControl.en = 0; / / Clear FR
delay_us (1); / / Tenir RS RW et à leurs Etats pour une
/ / minimum de 20ns
/ / De plus,
gardez la valeur actuelle à la Data Bus
/ / pour un minimum de 10ns
)/************************ Le ReadByte fonction *******************/
/ *
Cette fonction lit un octet à partir de l'écran LCD avec un module de 8-bit
interface
Paramètres d'entrée:
int rs Cette variable sélectionne le registre en cours de lecture.
DR choisit le registre de données
IR sélectionne le registre d'instructions
Valeur de sortie: La fonction retourne la valeur de l'octet lu
* /
int ReadByte (short int rs)
(
int data_from_lcd / / Cette variable est utilisée pour stocker l'octet
/ / lire sur le bus de données
LCD_DATA_IN / / D Port est un port d'entrée
LCDControl.rw = READ / / L'opération est une opération de lecture
LCDControl.rs = rs / / Sélectionne le registre (DR ou IR)
delay_us (1) / / Attendre un minimum de 60ns
LCDControl.en = 1; / / Raise FR
delay_us (1) / / Attendre un minimum de 360ns
data_from_lcd = LCDData / / Lire la valeur à travers le bus de données
LCDControl.en = 0; / / Clear FR
delay_us (1); / / Tenir RS RW et à leurs états
/ / pour un minimum de 20ns
retour data_from_lcd;
)/ / Cette fonction lit le registre IR, revenant à 1 si le module LCD est occupé ou 0 si elle
n'est pas
/************************ Le CheckBusyFlag fonction ******************/
/ * Cette fonction lit un octet de l'instruction et de registre
tests de la 8ème bit, qui est occupé Flag
Valeur de sortie: La fonction retourne
1 si le drapeau est réglé Busy (LCD module occupé)
0 si le drapeau est clair Busy (LCD module
n'est pas
occupé)
* /
short int CheckBusyFlag (void)
(
int data_from_lcd / / Cette variable est utilisée pour stocker l'octet
/ / lire sur l'écran LCD
data_from_lcd = ReadByte (IR) / / Lire l'IR (rs = 0)
return (bit_test (data_from_lcd, 7)) / / Test de la BF
/ /
Retourne 1 si l'ensemble
/ /
Retourne 0 si claire
)
/************************ Le InitLCD fonction *******************/
/ * Cette fonction initialise le module LCD (Initialisation de
l'enseignement).
Initialisation des paramètres:
Interface 8-bit
Nombre de lignes d'affichage 2-line ou 4-ligne
Curseur changer de direction Incrément
Taille de la police 5x8dots
Le Display
Curseur Off
Cursor Cursor blink blink
* /void InitLCD (void)
(
delay_ms (15) / / Délai d'un minimum de 15 ms
WriteByte (IR, 0b00111000); / /
Define fonction prévue
/ / 8-bit interface, 2-line ou de 4-lignes d'affichage, 5x8 font

delay_ms (5) / / Délai d'un minimum de 4.1ms
WriteByte (IR, 0b00111000); / / Redéfinir le jeu de fonctions

delay_us (100) / / Délai d'un minimum de 100us
WriteByte (IR, 0b00111000); / / Redéfinir le jeu de fonctions

while (CheckBusyFlag ()); / / Attendre
jusqu'à ce que BF = 0
WriteByte (IR, 0b00001100); / /
Définit l'affichage ON /
OFF/ / affichage, le curseur off, blink off curseur

while (CheckBusyFlag ()); / / Attendre
jusqu'à ce que BF = 0
WriteByte (IR, 0b00000001); / / Clear Display

while (CheckBusyFlag ()); / / Attendre
jusqu'à ce que BF = 0
WriteByte (IR, 0b00000110); / / Entrée en mode série
/ / curseur de direction accroissement, ne changent pas d'affichage
)/ / ÉCRITURE DE NATURE A LCD
/************************ Le WriteChar fonction *******************/
/ * Cette fonction affiche un caractère sur l'écran LCD.
Paramètres d'entrée:
Cette variable char caractère magasins le caractère à être affichées sur
l'écran LCD.
* /
void WriteChar (char caractère)
(
while (CheckBusyFlag ()); / / Attendez
jusqu'à ce que le module LCD est pas occupé
WriteByte (DR, caractère); / /
Ecriture du caractère à DR
)/ / Envoyer un ordre à LCD
/************************ Le PutCommand fonction *******************/
/ * Cette fonction écrit un octet pour le registre d'instructions.
Paramètres d'entrée:
Cette variable int commande stocke l'octet à écrire à la
registre d'instructions.
* /
void PutCommand (int command)
(
while (CheckBusyFlag ()); / / Attendez
jusqu'à ce que le module LCD est pas occupé
WriteByte (IR, commande); / /
Ecriture de commande à IR
)
/************************ Le GoToLine fonction *******************/
/ * Cette fonction règle le curseur à la première position d'un
ligne de l'écran.
Paramètres d'entrée:
Cette variable int ligne sélectionne l'écran LCD de la ligne sur laquelle
curseur est à fixer.
* /
void GoToLine (int ligne)
(
int adresse / / Cette variable est utilisée pour déterminer la
/ / adresse à laquelle le curseur doit être mis en
switch (line) / /
Définit l'adresse de la première adresse de la DDRAM
/ / ligne
(
case 1:
address = 0x00;
break;
case 2:
address = 0x40;
break;
case 3:
address = 0x14;
break;
case 4:
address = 0x54;
break;
default: / / Une ligne indéfini le curseur d'accueil
address = 0x00;
break;
)
bit_set (adresse, 7) / / Bit 7 indique que l'instruction Set
/ / DDRAM adresse
PutCommand (adresse) / /
Définit l'adresse DDRAM
)/ / ECRITURE une chaîne de caractères à LCD
# define TOTAL_CHARACTERS_OF_LCD 32
void WriteString (char LineOfCharacters [TOTAL_CHARACTERS_OF_LCD])
(
printf (WriteChar, "% c", LineOfCharacters);
)void main ()
(
char LineOfCharacters [4] = ( "abc");
InitLCD ();
GoToLine (2);
printf (WriteChar, "% c", LineOfCharacters);

)

 

Welcome to EDABoard.com

Sponsor

Back
Top