Problème avec le programme de LCD

M

mobile-it

Guest
Est ce que
quelqu'un peut trouver le problème dans mon code d'un programme LCD?

Code:/ / Avec l'aide du site Web suivant:

/ / Http://www.8052.com/tutlcd.phtml

/ / DéfinitionsDEF DB4 0

DB5 DEF 1

DEF DB6 2

DEF DB7 3

DEF FR 4

DEF RS 5

DEF AD 6/ / Charge de 0 à accumulateurCHARGE 0

Main $

CALL $ INIT_LCD

CALL $ CLEAR_LCD

3 DAT RAMWRT 'H'

CALL $ WRITE_TEXT

3 DAT RAMWRT 'E'

CALL $ WRITE_TEXT

3 DAT RAMWRT 'L'

CALL $ WRITE_TEXT

3 DAT RAMWRT 'L'

CALL $ WRITE_TEXT

3 DAT RAMWRT 'O'

CALL $ WRITE_TEXT

DAT RAMWRT 3 '

CALL $ WRITE_TEXT

3 DAT RAMWRT 'W'

CALL $ WRITE_TEXT

3 DAT RAMWRT 'O'

CALL $ WRITE_TEXT

DAT RAMWRT 3 "R"

CALL $ WRITE_TEXT

3 DAT RAMWRT 'L'

CALL $ WRITE_TEXT

DAT RAMWRT 3 "D"

CALL $ WRITE_TEXT$ READ_2_NIBBLES

BITSET FR

IOWRT ACC

IOREAD

RAMWRT 4

BITCLR FR

IOWRT ACC

BITSET FR

IOWRT ACC

IOREAD

BITCLR 7

BITCLR 6

BITCLR 5

BITCLR 4

RAMWRT 5

BITCLR FR

IOWRT ACC

RAMREAD 4

SHLE

SHLE

SHLE

SHLE

RAMWRT 4

RAMREAD 4

Ajouter RAM 5

RAMWRT 2

RETOUR$ WRITE_2_NIBBLES

RAMREAD 3

BITSET FR

IOWRT ACC

BITCLR FR

IOWRT ACC

RAMREAD 3

ROL

ROL

ROL

ROL

BITSET FR

IOWRT ACCBITCLR FR

IOWRT ACC

RETOUR$ WAIT_LCD

BITCLR RS

IOWRT ACC

BITSET RW

CALL $ READ_2_NIBBLES

RAMREAD 2

BITTST 7

JUMP sinon ZZERO $ WAIT_LCD

BITCLR RW

IOWRT ACC

RETOUR$ INIT_LCD

BITCLR RS

IOWRT ACC

BITCLR RW

IOWRT ACC

BITCLR FR

IOWRT ACC

BITSET FR

IOWRT ACC

OU 0x20

IOWRT ACC

/ / MOV DATA, # 28h

BITCLR FR

IOWRT ACC

CALL $ WAIT_LCD

RAMWRT 3 DAT 0x20

/ / MOV A, # 28h

/ / Ici, l'écriture en mémoire vive est nécessaire!

CALL $ WRITE_2_NIBBLES

CALL $ WAIT_LCD

/ / MOV A, # 0EH

RAMWRT 3 DAT 0x0E

CALL $ WRITE_2_NIBBLES

CALL $ WAIT_LCD

/ / MOV A, # 06h

RAMWRT 3 DAT 0x06

CALL $ WRITE_2_NIBBLES

CALL $ WAIT_LCD

RETOUR$ CLEAR_LCD

BITCLR RS

IOWRT ACC

/ / MOV A, # 01h

CALL $ WRITE_2_NIBBLES

CALL $ WAIT_LCD

RETOUR$ WRITE_TEXT

BITSET RS

IOWRT ACC

CALL $ WRITE_2_NIBBLES

CALL $ WAIT_LCD

RETOUR

 
Pour envoyer des données ou de commande à écran LCD
poing, vous devez définir bit FR = 1, alors quand vous avez fini votre demande, vous devez clr EN = 0.

 
ici est un exemple de code que
j'écris par Keil C de contrôle LCD

Code:

# include "REG52.H"

/ / Définir un besoin de la variante

sbit RS = P1 ^ 0;

sbit RW P1 = ^ 1;

sbit FR = P1 ^ 2;

sbit BUSY = P3 ^ 7;

/ / Caractère dislay

# define CHU_A 0x41

# define CHU_B 0x42

# define CHU_C 0x43

# define CHU_D 0x44

# define CHU_E 0x45

# define CHU_F 0x46

# define CHU_G 0x47

# define CHU_H 0x48

# define CHU_I 0x49

# define CHU_J 0x4A

# define CHU_K 0x4B

# define CHU_L 0x4C

# define CHU_M 0x4D

# define CHU_N 0x4E

# define CHU_O 0x4F

# define CHU_P 0x50

# define CHU_Q 0x51

# define CHU_R 0x52

# define CHU_S 0x53

# define CHU_T 0x54

# define CHU_U 0x55

# define CHU_V 0x56

# define CHU_W 0x57

# define CHU_X 0x58

# define CHU_Y 0x59

# define CHU_Z 0x5A

# define KT 0x20

/ /

# define DATA P3

/ / déclarer mon fundtion

void WAIT_LCD (void);

void INT_LCD (void);

void WR_LCD (unsigned char TXT);

void CLR_LCD (void);

void HOME_LCD (void);

/ / programme principalvoid main (void)

(

INT_LCD ();

CLR_LCD ();

HOME_LCD ();

WR_LCD (CHU_B);

WR_LCD (CHU_A);

WR_LCD (CHU_O);

tout (1);

)//================================================ ==

void WAIT_LCD (void)

(

DATA = 0xFF;

EN = 1;

RW = 1;

RS = 0; / / commande

while (BUSY)

;

EN = 0;

RW = 0;

)

//================================================ ==

void INT_LCD (void)

(

/ / fonction prévue 8 col ligne 2, format 5x7 points

EN = 1;

RS = 0;

DATA = 0x38;

EN = 0;

WAIT_LCD ();

/ / Dislay ON / OFF CURSOR Shift

/ / Dislay ON, Underline le curseur, le curseur clignotera off

EN = 1;

RS = 0;

DATA = 0x0E;

EN = 0;

WAIT_LCD ();

/ / Set Charracter Mode

/ / Increment (dich fai), Dislay Shift Off

EN = 1;

RS = 0;

DATA = 0x06;

EN = 0;

WAIT_LCD ();

)

//================================================ =======void WR_LCD (unsigned char TXT)

(

RS = 1;

EN = 1;

DATA = TXT;

EN = 0;

WAIT_LCD ();

)

void CLR_LCD (void)

(

EN = 1;

RS = 0;

DATA = 0x01;

EN = 0;

WAIT_LCD ();

)

void HOME_LCD (void)

(EN = 1;

RS = 0;

DATA = 0x02;

EN = 1;

WAIT_LCD ();

)

 
;;;;;;;;;;;;;;; broches cession ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
db0 equ p1.0
db1 equ p1.1
db2 equ P1.2
BD3 equ p1.3
DB4 equ p1.4
db5 equ p1.5
DB6 equ P1.6
DB7 equ p1.7
permettre equ p2.2
rs equ p2.0
rw equ p2.1
dat equ p1

;;;;;;;;;;;;;;;;;; Séquence de commande LCD ;;;;;;;;;;;;;;;;;;;
com: mov dat, un
clr rs
clr rw
setb permettre
clr permettre
appel d'attente
ret
;;;;;;;;;;;;;;;;;;; LCD WRITE SEQUENCE ;;;;;;;;;;;;;;;;;;;;
lcd_write: mov dat, un
setb rs
clr rw
setb permettre
clr permettre
appel d'attente
ret
;;;;;;;;;;;;;;;;;;;; Écran LCD clair ;;;;;;;;;;;;;;; SEQUENCE
lcd_clr: mov a, # 01h
com appel
retest ici le code de 8051 en langage d'assemblage juste écrire la séquence d'appel, après passage de la lettre u
u à afficher avec un retardAjouté après 57 secondes:if u besoin de plus de détails, je peux écrire un exemple de code dans l'assemblage et l'envoyer

 
vijaya_narayana a écrit:

;;;;;;;;;;;;;;; broches cession ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;

db0 equ p1.0

db1 equ p1.1

db2 equ P1.2

BD3 equ p1.3

DB4 equ p1.4

db5 equ p1.5

DB6 equ P1.6

DB7 equ p1.7

permettre equ p2.2

rs equ p2.0

rw equ p2.1

dat equ p1;;;;;;;;;;;;;;;;;; Séquence de commande LCD ;;;;;;;;;;;;;;;;;;;

com: mov dat, un

clr rs

clr rw

setb permettre

clr permettre

appel d'attente

ret

;;;;;;;;;;;;;;;;;;; LCD WRITE SEQUENCE ;;;;;;;;;;;;;;;;;;;;

lcd_write: mov dat, un

setb rs

clr rw

setb permettre

clr permettre

appel d'attente

ret

;;;;;;;;;;;;;;;;;;;; Écran LCD clair ;;;;;;;;;;;;;;; SEQUENCE

lcd_clr: mov a, # 01h

com appel

retest ici le code de 8051 en langage d'assemblage juste écrire la séquence d'appel, après passage de la lettre u

u à afficher avec un retard
Ajouté après 57 secondes:
if u besoin de plus de détails, je peux écrire un exemple de code dans l'assemblage et l'envoyer
 
Voici mon programme ..peut être utilisé avec
n'importe quel compilateur i think

<img src="http://www.edaboard.com/images/smiles/icon_razz.gif" alt="Razz" border="0" />celui-ci est pour Keil ...lcd.h

Code:

# include <REG2051.H>

# define lcd_port P3/ / LCD registres des adresses

# define LCD_EN 0x80

# define LCD_RS 0x20/ / LCD Commandes

# define LCD_CLS 0x01

# define LCD_HOME 0x02

# define LCD_SETMODE 0x04

# define LCD_SETVISIBLE 0x08

# define LCD_SHIFT 0x10

# define LCD_SETFUNCTION 0x28

# define LCD_SETCGADDR 0x40

# define LCD_SETDDADDR 0x80# define FAUX 0

# define TRUE 1/******************************

FUNCTION PROTOTYPES ***** *****

******************************/

void lcd_init ();

void lcd_reset ();

void lcd_cmd (char);

void lcd_data (unsigned char);

void lcd_str (unsigned char *);

 
le code ci-dessus est de communiquer avec l'écran LCD pour le mode 4, il suffit de se rendre ar l'écran des données sheet.U à patcher certaines routines de inlitise le lcd pour ce tout simplement par le biais de l'écran LCD la fiche et la transmettre à l'écran LCD

par exemple

mov a, # 0CH
séquence d'appel COMAND

et ainsi de passer seulement sur les valeurs de la séquence donnée dans la datasheet LCD

 

Welcome to EDABoard.com

Sponsor

Back
Top