avez un problème à le faire tout simplement un téléphone mobile

U

uXing

Guest
Je vais faire un simple téléphone portable qui utilise tout simplement
1.AT89C52
2.Keypad
3.LCD display (SC162D, 16 caractères x 2 lignes)
4.GM862 avec EVK V3 RS232

Voici le lien betwee MCU, clavier et écran LCD<img src="http://ihome.cuhk.edu.hk/~s057611/Design.JPG" border="0" alt="Have some problem on doing a simply mobile phone" title="Ont quelques problèmes à le faire tout simplement un téléphone mobile"/>Cela fonctionne très bien dans Proteus (genre de logiciels de simulation)

Le type de GM862 EVK V3 est comme ça<img src="http://ihome.cuhk.edu.hk/~s057611/GM862.JPG" border="0" alt="Have some problem on doing a simply mobile phone" title="Ont quelques problèmes à le faire tout simplement un téléphone mobile"/>Il ya quelques questions que je voudrais demander à

Question 1
Voici l'alimentation que j'ai prévu d'utiliser<img src="http://ihome.cuhk.edu.hk/~s057611/Power.JPG" border="0" alt="Have some problem on doing a simply mobile phone" title="Ont quelques problèmes à le faire tout simplement un téléphone mobile"/>Il s'agit d'un adaptateur AC-DC avec la sortie DC 3 - 15V 700mA
Puis-je utiliser deux de cela comme une source d'alimentation?L'un est de fournir 5V pour 89C52 et LCD tandis que l'autre est de fournir 7,5 V à GM862 EVK V3.
Je suis vraiment inquiéter les grands courants détruira GM862 ou tout autre appareil.Question 2
Si je veux que pour l'envoi de commander à partir de MCU à GM862, puis-je quitté le RXD, RTS, CTS déconnecté?

Question 3
Je ne sais pas si la connexion des broches TXD est juste ou pas. (Parce que la feuille de données semble erroné)
Donc, je tiens à le confirmer.

89C52 Pin 11 (TXD) -> traduction de niveau (de 5V à 2,8 V) -> TXD (GM862 EVK V3)

Le GM862 TXD que je doit se connecter est le cercle rouge de one.Right image?

Question 4
Avant de vous connecter sur TXD (GM862 EVK V3), devrais-je besoin de faire dessouder sur ce cercle Pin Rouge (sur la photo 1). Parce que c'est avoir une traduction de niveau entre RSR232 et TxD.
http://www.sparkfun.com/datasheets/Cellular%% 20Modules/GM862 20EVK% 20V3% 20RS232% 20sch.PDF

Vraiment pas familier avec la conception du matériel et de peur de détruire l'appareil I.Votre aide peut faire mon projet de devenir plus facile. [/ img]
Dernière édition par uXing le 11 Avr 2008 11:19, édité 1 fois au total

 
Hey Buddy Comment avez-vous faites ce clavier dans Proteus ???................ vous n'avez plus besoin de connecter un proteus cristal a un cristal par défaut ........ .........

 
Oui, il suffit de se connecter de cristal dans protues.L'écran LCD peut travailler dans protues.Mais il ne fonctionne pas dans mon produit du matériel réel.Il ne montre rien dans mon écran LCD, pourquoi?Mon code d'initialisation du LCD est ici:

# include <AT89X52.h>
# define LCD_data P1
# define P1_7 LCD_BusyFlat
# define LCD_RS P3_5
# define LCD_RW P3_6
# define LCD_EN P3_7
void lcd_init ()
(

/ / Mise en opération à 8 bits et sélectionner 1-ligne de l'affichage en ligne et police de caractère
LCD_RS = 0; LCD_RW = 0; P1 = 0x30; LCD_EN = 1; LCD_EN = 0;
Delay ();

/ / Display Off
LCD_RS = 0; LCD_RW = 0; P1 = 0x0F; LCD_EN = 1; LCD_EN = 0;
Delay ();

/ / affichage clair
LCD_RS = 0; LCD_RW = 0; P1 = 0x01; LCD_EN = 1; LCD_EN = 0;
Delay ();

/ / afficher la vidéo.Curseur apparaît
LCD_RS = 0; LCD_RW = 0; P1 = 0x0E; LCD_EN = 1; LCD_EN = 0;
Delay ();

/ / mode d'entrée de jeu n quart de travail et incremement Auto
LCD_RS = 0; LCD_RW = 0; P1 = 0x06; LCD_EN = 1; LCD_EN = 0;
Delay ();
)

 
im en utilisant un programme en langage d'assemblage
MOD52 $
LINE EQU R0
DataReady EQU P2.7

org 0000H

MOV LINE, # 00H
MOV P2, # 0FFH

MOV A, # 38H; LCD 2 LIGNES
Acall COMNWRT

MOV A, # 01H; CLR DISPL
Acall COMNWRT

MOV A, # 0EH; déplace le curseur ON
Acall COMNWRT

MOV A, # 06H; MAJ curseur à droite,
Acall COMNWRT

MOV A, # 80H; ENVOYER EN PREMIÈRE LIGNE ADDR
Acall COMNWRT

CHECK:
JNB DataReady, level2
Sjmp CHECK
Niveau 2:
MOV A, P2
SETB P2.7
Acall LOOKUP
Sjmp CHECK

Cle:
RL A
ANL A, # 0F0H
XRL A, # 0F0H
MOV 20H, # 00H; CLEAR MEM LOCN 20
RLC A; réorganiser I / P code BCD EN BON ORDRE
MOV 00H, C
RLC A
MOV 01H, C
RLC A
MOV 02H, C
RLC A
MOV 03H, C
CLR C
MOV A, 20H
SUBB A, # 01H; vérifiez si KEY 1 est pressée
JZ ONE1
SUBB A, # 01H; vérifiez si KEY 2 est pressée
JZ TWO1
SUBB A, # 01H; vérifiez si KEY 3 est enfoncé
JZ THREE1
SUBB A, # 01H; vérifiez si CLÉ 4 est pressé
JZ FOUR1
SUBB A, # 01H; vérifiez si CLÉ 5 est pressé
JZ FIVE1
SUBB A, # 01H; vérifiez si on appuie sur la touche 6
JZ SIX1
SUBB A, # 01H; vérifiez si clés 7 est pressé
JZ SEVEN1
SUBB A, # 01H; vérifiez si on appuie sur la touche 8
JZ EIGHT1
SUBB A, # 01H; vérifiez si KEY 9 est pressé
JZ NINE1
SUBB A, # 01H; vérifiez si la touche 0 est enfoncé
JZ zero1
SUBB A, # 01H; vérifiez si KEY * est pressé
JZ Back1
SUBB A, # 01H; vérifiez si KEY # est pressée
JZ hash1
LJMP INEXACTS;

ONE1: LJMP ONE
TWO1: LJMP DEUX
THREE1: LJMP TROIS
FOUR1: LJMP QUATRE
FIVE1: LJMP CINQ
SIX1: LJMP SIX
SEVEN1: LJMP SEVEN
EIGHT1: LJMP HUIT
NINE1: LJMP NEUF
Zero1: LJMP ZERO
Back1: LJMP RETOUR
Hash1: LJMP HASH
INCORRECT1: LJMP INCORRECT

ONE:; KEY ONE est pressé
Acall LINEINC
MOV A, # '1 '
Acall DATAWRT
Acall Delay1
CLR C
LJMP CHECK

DEUX:; clé Deux est pressé
Acall Printa
Acall PRINTB
Acall PRINTC
Acall print2
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ Printa
SUBB A, # 01H
JZ PRINTB
SUBB A, # 01H
JZ PRINTC
SUBB A, # 01H
JZ print2
Sjmp INCORRECT1
LJMP CHECK

Printa:
MOV A, # 'a'
Acall DATAWRT
RET

PRINTB:
MOV A, # 'b'
Acall DATAWRT
RET

PRINTC:
MOV A, # 'c'
Acall DATAWRT
RET

Print2:
MOV A, # '2 '
Acall DATAWRT
RET

TROIS:; trois principaux est pressé
Acall printd
Acall PRINTE
Acall PRINTF
Acall PRINT3
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ printd
SUBB A, # 01H
JZ PRINTE
SUBB A, # 01H
JZ PRINTF
SUBB A, # 01H
JZ PRINT3
LJMP INCORRECT
LJMP CHECK

Printd:
MOV A, # 'd'
Acall DATAWRT
RET

PRINTE:
MOV A, # 'e'
Acall DATAWRT
RET

Printf:
MOV A, # 'f'
Acall DATAWRT
RET

PRINT3:
MOV A, # '3 '
Acall DATAWRT
RET

QUATRE:; QUATRE touche est pressée
Acall PRINTG
Acall PRINTH
Acall Printi
Acall PRINT4
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ PRINTG
SUBB A, # 01H
JZ PRINTH
SUBB A, # 01H
JZ Printi
SUBB A, # 01H
JZ PRINT4
LJMP INCORRECT
LJMP CHECK

PRINTG:
MOV A, # 'g'
Acall DATAWRT
RET

PRINTH:
MOV A, # 'h'
Acall DATAWRT
RET

Printi:
MOV A, # 'i'
Acall DATAWRT
RET

PRINT4:
MOV A, # '4 '
Acall DATAWRT
RETCINQ:; clés Cinq est pressé
Acall PRINTJ
Acall printk
Acall printl
Acall PRINT5
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ PRINTJ
SUBB A, # 01H
JZ printk
SUBB A, # 01H
JZ printl
SUBB A, # 01H
JZ PRINT5
LJMP INCORRECT
LJMP CHECK

PRINTJ:
MOV A, # 'j'
Acall DATAWRT
RET

Printk:
MOV A, # 'K'
Acall DATAWRT
RET

Printl:
MOV A, # 'l'
Acall DATAWRT
RET

PRINT5:
MOV A, # '5 '
Acall DATAWRT
RET

SIX:; SIX PRINCIPALES est pressé
Acall PRINTM
Acall PrintN
Acall PRINTO
Acall PRINT6
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ PRINTM
SUBB A, # 01H
JZ PrintN
SUBB A, # 01H
JZ PRINTO
SUBB A, # 01H
JZ PRINT6
LJMP INCORRECT
LJMP CHECK

PRINTM:
MOV A, # 'm'
Acall DATAWRT
RET

PrintN:
MOV A, # 'N'
Acall DATAWRT
RET

PRINTO:
MOV A, # 'o'
Acall DATAWRT
RET

PRINT6:
MOV A, # '6 '
Acall DATAWRT
RETSEPT:; SEPT touche est pressée
Acall PRINTP
Acall printq
Acall printr
Acall PRINTS
Acall PRINT7
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ PRINTP
SUBB A, # 01H
JZ printq
SUBB A, # 01H
JZ printr
SUBB A, # 01H
JZ PRINTS
SUBB A, # 01H
JZ PRINT7
LJMP INCORRECT
LJMP CHECK

PRINTP:
MOV A, # 'a'
Acall DATAWRT
RET

Printq:
MOV A, # 'Q'
Acall DATAWRT
RET

Printr:
MOV A, # 'R'
Acall DATAWRT
RET

COPIES:
MOV A, # 's'
Acall DATAWRT
RET

PRINT7:
MOV A, # '7 '
Acall DATAWRT
RET

HUIT:; HUIT touche est pressée
Acall PRINTT
Acall PRINTU
Acall PRINTV
Acall PRINT8
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ PRINTT
SUBB A, # 01H
JZ PRINTU
SUBB A, # 01H
JZ PRINTV
SUBB A, # 01H
JZ PRINT8
LJMP INCORRECT
LJMP CHECK

PRINTT:
MOV A, # 't'
Acall DATAWRT
RET

PRINTU:
MOV A, # 'u'
Acall DATAWRT
RET

PRINTV:
MOV A, # 'v'
Acall DATAWRT
RET

PRINT8:
MOV A, # '8 '
Acall DATAWRT
RETNINE:; CLE NEUF est pressé
Acall printw
Acall PRINTX
Acall PRINTY
Acall PRINTZ
Acall PRINT9
Acall Delay1
Acall CHECK1
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall ASTERIX
Acall LINEINC
MOV A, R1
SUBB A, # 01H
JZ printw
SUBB A, # 01H
JZ PRINTX
SUBB A, # 01H
JZ PRINTY
SUBB A, # 01H
JZ PRINTZ
SUBB A, # 01H
JZ PRINT9
LJMP INCORRECT
LJMP CHECK

Printw:
MOV A, # 'w'
Acall DATAWRT
RET

PRINTX:
MOV A, # 'x'
Acall DATAWRT
RET

PRINTY:
MOV A, # 'y'
Acall DATAWRT
RET

Printz:
MOV A, # 'z'
Acall DATAWRT
RET

PRINT9:
MOV A, # '9 '
Acall DATAWRT
RET

ZERO:; ZERO touche est pressée
Acall LINEINC
MOV A, # '0 '
Acall DATAWRT
Acall Delay1
CLR C
LJMP CHECK

ASTERIX:
MOV A, # 10H
Acall COMNWRT
MOV A, # ''
Acall DATAWRT
MOV A, # 10H
Acall COMNWRT
RET

RETOUR:
Acall ASTERIX
Acall LINEDEC; si la touche est enfoncée *
LJMP CHECK

HASH:; si la touche # est pressée
MOV A, # ''
Acall DATAWRT
Acall LINEINC
Acall Delay1
CLR C
LJMP CHECK

INCORRECT:; si la touche pressée est INCORRECT
Acall LINEDEC
CLR C
LJMP CHECK

Delay1:; 0.5 sec RETARD
AGAIN1: MOV R3, # 64
NOUVEAU: MOV R4, # 250
ICI: NOP
NOP
NOP
NOP
NOP
DJNZ R4, ICI
DJNZ R3, AGAIN
CLR C
RET

CHECK1:
C1:
JNB DataReady, C2
Sjmp C1
C2:
MOV A, P2
RL A
ANL A, # 0F0H
XRL A, # 0F0H
MOV 20H, # 00H; CLEAR MEM LOCN 20
RLC A
MOV 00H, C
RLC A
MOV 01H, C
RLC A
MOV 02H, C
RLC A
MOV 03H, C
MOV R1, 20H
CLR C
RET

LINEINC:
CJNE LINE, # 10H, CHK1
MOV A, # 0C0h
Acall COMNWRT

INC LIGNE
CLR C
RET
CHK1: CJNE LINE, # 20H, CHK2
MOV A, # 01H; CLR DISPLAY pendant DISPL EST PLEINE
Acall COMNWRT
MOV A, # 80H
Acall COMNWRT

MOV LINE, # 00H
CLR C
RET
CHK2: INC LIGNE
CLR C
RET

LINEDEC:
CJNE LINE, # 10H, CHK3
MOV A, # 90H
Acall COMNWRT

Décembre LIGNE
CLR C
RET
CHK3: CJNE LINE, # 00H, CHK4
MOV A, # 0D0H
Acall COMNWRT

MOV LINE, # 20H
CLR C
RET
CHK4: DEC LIGNE
CLR C
RET

COMNWRT: acall READY
MOV P0, A
CLR P3.3
CLR P3.2
SETB P3.4
CLR P3.4
RET

DATAWRT: acall READY
MOV P0, A
SETB P3.3
CLR P3.2
SETB P3.4
CLR P3.4
RET

Ready: SETB P0.7
CLR P3.3
SETB P3.2
Back2: CLR P3.4
SETB P3.4
JB P0.7, Back2
RET

FIN

 
void boucle () / / boucle ici si le bouton est tenue
(
for (;;) (
if (P2_0! = 0)
break; / / arrêt de la boucle lorsque le bouton est relâché
)

for (;;) (
if (P2_1! = 0)
break;
)

for (;;) (
if (P2_2! = 0)
break;
)

for (;;) (
if (P2_3! = 0)
break;
)
)

void scan_keyboard ()
(
while (1) (P2 = 239; / / 11101111 vérifier colonne3

if (P2_0 == 0) (/ / # est pressée
send ( 'a');
send ( 't');
send ( 'd');
send ( '');
boucle ();
)

if (P2_1 == 0) (/ / 9 est pressé
send ('9 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x39; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_2 == 0) (/ / 6 est pressée
send ('6 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x36; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_3 == 0) (/ / 3 est enfoncé
send ('3 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x33; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

P2 = 223; / / 11011111 vérifier colonne2

if (P2_0 == 0) (/ / 0 est enfoncé
send ('0 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x30; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_1 == 0) (/ / 8 est pressée
send ('8 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x38; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_2 == 0) (/ / 5 est pressé
send ('5 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x35; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_3 == 0) (/ / 2 est pressée
send ('2 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x32; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

P2 = 191; / / 10111111 vérifier column1

if (P2_0 == 0) (/ / * est pressé
send (0x0D); / / retour chariot
boucle ();
)

if (P2_1 == 0) (/ / 7 est pressé
send ('7 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x37; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_2 == 0) (/ / 4 est pressé
send ('4 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x34; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)

if (P2_3 == 0) (/ / 1 est pressée
send ('1 ');
LCD_RS = 1; LCD_RW = 0; P1 = 0x31; LCD_EN = 1; retard (); LCD_EN = 0;
boucle ();
)
))

Le code de clavier est le travail.Et l'écran LCD sont le travail dans Proteus aussi.
Mais le LCD ne sont pas afficher dans le produit réel.Je ne sais pas pourquoi

 

Welcome to EDABoard.com

Sponsor

Back
Top