Вы находитесь на странице: 1из 13

TP Dure : 6 heures

TSTI2 anne 2011/2012

Programmation en C TP n3 : Afficheur LCD et Dcodage d'un clavier

Panneau solaire automatis pour camping-car


fig$1 le panneau solaire sur le toit du amping- ar

fig$2 le % o&tier de ommande

Prrequis : - algorithme, algorigramme - notions de programmation en langage C

Objectifs : - mise en uvre d'un affi heur !C" - d odage d'un lavier matri 1# tou hes

SECTION STI

ELECTRONIQUE

Le panneau so aire auto!atis est insta sur e toit "#un ca!pin$-car %&oir fi$'()' I per!et "e rechar$er une batterie afin "e e ren"re autono!e en ner$ie ectrique' D*s #arr+t "u &hicu e, e panneau se re *&e et cherche a position % &ation et rotation) qui entraine un ren"e!ent !a-i!u!' Dans ce TP on s#intresse . a fonction /P( 0 Traite!ent !icro-pro$ra!! 1 qui se situe "ans un bo2tier "e co!!an"e re i au panneau so aire %&oir fi$'3)' Dans e bo2tier "e co!!an"e %&oir fi$'3) #uti isateur "ispose : "#un c a&ier qui ui per!et : "e choisir un !o"e "e fonctionne!ent 0 !anue 1 ou 0 auto!atique 1 "u panneau4 "#entrer es infor!ations 0 "ate 1 et 0 heure 14 "#un afficheur qui ui per!et : "e &isua iser e courant "e char$e "e a batterie ors "u fonctionne!ent "u panneau4 "#un bu55er qui retentit en cas "e "6sfonctionne!ent' S hma fon tionnel de degr 2 de '(1 )%oitier de ommande* +
? aboration nu!rique "#une hor o$e te!ps re
Infor!ation B3C "ate ; heure S ection afficheur B3C

T78ITE9ENT P7O:7899E DES IN/O798TIONS ; CON<E7SION


Co!!an"e bu55er Infor!ation . afficher B(6C

FS1-2
7$ a$e "u !o"e "e fonctionne!ent par #uti isateur

8!p ification "e courant ; Trans"uction ectrique optique

Infor!ations &isue es

8cquisition Infor!ation "u r$ a$e touche "u !o"e "e fonctionne!ent BDC actionne

FS1-4
8!p ification "e courant ; Trans"uction ectrique acoustique

FS1-3
Position !oteur &ation

Infor!ation sonore

8N8LO:I=>E
Position !oteur rotation

N>9E7I=>E

FS1-5
Co!!an"e 8utorisationA!oteurs Co!!an"e SensAarr+tA &ation Co!!an"e SensAarr+tArotation

8 erte "!arra$e &hicu e

B3C

FS1-1
Courant panneau so aire @

B3C

SCHEMA FONCTIONNEL DE DEGRE 2 DE FP1


<ous a e5 : crire un pro$ra!!e per!ettant a !ise en fonctionne!ent "u bu55er4 crire un pro$ra!!e per!ettant #afficha$e "e !essa$e sur #afficheur LCD' crire un pro$ra!!e per!ettant "e "tecter puis "e traiter #appui sur une touche "u c a&ier4 schma structurel de la carte PIC 1 !"#$ % 1&$
(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C 45T( prog C 6 lavier$odt7 - page 2/18

Attention' inversion du c()lage sur schma* suivre l'nonc du TP

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 8/18

schma structurel de la carte PIC 1 !"#$ + $&$

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 9/18

Enca"rer es fonctions secon"aires "e /P( sur es sch!as structure s'

Pour e TP, e PIC uti is est un PIC(D/EF3 "e a fa!i e Gi$h-En"' Cette fa!i e n#est pas co!patib e a&ec e co!pi ateur cc5x "onc nous uti iserons e co!pi ateur cc8e' L#uti isation "es broches "u !icrocontrH eur est a sui&ante :
786 78F 78E 78I 783 78( 78J

PORTA

OSC3
7KL 7K6

7S
7KF

C8P3
7KE

8LE7T
7KI

C8P(
7K3

IA9OT
7K(

IAP8N
7KJ

PORTB

D8T8
7CL

CLM
7C6

DL
7CF

D6
7CE

N
7CI

DF
7C3

DE
7C(

7KJOINT
7CJ

PORTC

7N
7DL

TN
7D6

EN
7DF

SD8
7DE

SCL
7DI

7OT3
7D3

7OT(
7D(

K>P
7DJ

PORTD

LI:I

LI:3

LI:(

LI:J

COLI

COL3
7E3

COL(
7E(

COLJ
7EJ 9OTAEN

PORTE

EL<3

EL<(

(' >ti isation "u bu55er


('(Sur que e sortie "u !icrocontrH eur est re i e bu55er K(Q ('3Dans que tat "oit +tre e transistor =( pour que e bu55er sonne Q En ""uire e ni&eau o$ique . p acer sur a sortie "u PIC' ('ICopier e rpertoire ,t-,-rog.c,TP3 % -anneau "u rseau sous &otre co!pte' Ou&rir a&ec 9PL8K e projet -anneau' Ce rpertoire contient un pro$ra!!e crit en C, e fichier )u//er.eleve0c0 On "onne ci-"essous #a $orith!e "u pro$ra!!e principa ' ?crire ce pro$ra!!e principa en an$a$e C' Co!pi er et en&o6er e pro$ra!!e "ans e !icrocontrH eur' Tester et f !re " #!$er % r #e %r&fesse'r(

programme principal dbut mettre RC0 en sortie rpter activer le buzzer attendre 250 ms teindre le buzzer attendre 250 ms l'infini fin

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page :/18

(' L) ff!c*e'r LCD


1pondre au; <uestions en vous aidant de la fi he de ours sur les affi heurs !C"$ 3'(=ue es sont es "eu- t6pes "e !!oires prsentes "ans un afficheur LCD' 8 quoi ser&ent-e es Q 3'3Trou&er es co"es . en&o6er en DD789 pour effectuer es actions sui&antes :

Act!&+ Inhiber Rafficheur %Disp a6 O//) <a i"er Rafficheur %Disp a6 ON) sans curseur ni c i$note!ent 7a!ener e curseur en haut . $auche %7eturn Go!e) Effacer Rafficheur Confi$urer Rafficheur : D bits, afficha$e sur une i$ne, $ran"s caract*res

C&$e ,ex D--D.

3'IDonner a succession "e co"es 8SCII per!ettant "Rcrire 0 KONSO>7 1 3'ELorsque a !!oire est &i"e, e e contient "es co"es T//, e-p iquer pourquoi Rafficheur affiche "es rectan$ es noirs . a !ise sous tension' Pour si!p ifier a pro$ra!!ation, on crira es i$nes sui&antes en en-t+te "u pro$ra!!e : Upra$!a bit 7S V PO7T8'F Upra$!a bit EN V PO7TC'F Upra$!a bit DL V PO7TK'F Upra$!a bit D6 V PO7TK'E Upra$!a bit DF V PO7TK'3 Upra$!a bit DE V PO7TK'(

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page #/18

3'F Dans e projet panneau "e 9PL8K, ou&rir e fichier bonjourAe e&e'c' Ce pro$ra!!e "oit afficher 0 KONSO>7 1 sur #afficheur' En &ous ai"ant "es co!!entaires "onns, co!p ter es sous-pro$ra!!es INITALCD%), 8//ICGALCD%) et e pro$ra!!e principa ' Co!pi er et en&o6er e pro$ra!!e "ans e !icrocontrH eur' Tester et faire &a i"er par e professeur'
/= test affi heur - affi hage du mot >?0-@0/1> fi hier + %onAour6eleve$ auteur + Ch$ !. ?1IS date + B o to%re 200C =/ Dpragma hip (IC1E'9:2 Dpragma onfigF1G H 0;22 Dpragma onfigF2G H 0;0" Dpragma onfigF8G H 0;0. Dpragma onfigF:G H 0;01 Dpragma onfigF#G H 0;E0 Ddefine IC"26".?/J Dpragma %it 1S K (01T,$: Dpragma %it .- K (01TC$: Dpragma %it "B K (01T?$: Dpragma %it "# K (01T?$9 Dpragma %it ": K (01T?$2 Dpragma %it "9 K (01T?$1 // (IC 1E'9:2 // mot de onfiguration du (IC mode IS

// dfinition du %ro hage de l'affi heur !C"

void delaL6ms) uns1# millise * // temporisation multiple de 1ms // "elaLs a multiple of 1 millise onds at 20 2IM // using the T210 timer 4 har ne;t H 0N T0C0- H 0;C9N T210! H 2N // dedu t 2=E fi;ed instru tion L les delaL do 4 ne;t OH 1:#N Phile )T210! QH ne;t*N // 1:# = #,9u H 1000 )H 1 ms* 7 Phile ) -- millise QH 0*N 7 void .-R0I60CT.T) har o tet* // envoi d'un o tet dans l'affi heur !C" en mode 9 %its 4 // .nvoi du <uartet de poids fort %B%#%:%9 "B H o tet$BN "# H o tet$#N ": H o tet$:N "9 H o tet$9N .-H1N // 1C: ).-* S 1, validation affi heur delaL6ms)2*N .-H0N // 1C: ).-* S 0 delaL6ms)2*N // .nvoi du <uartet de poids fai%le %8%2%1%0 "B H o tet$8N "# H o tet$2N ": H o tet$1N "9 H o tet$0N .-H1N // 1C: ).-* S 1, validation affi heur delaL6ms)2*N .-H0N // 1C: ).-* S 0 delaL6ms)2*N 7 void .-R0I6I-ST1) har instru tion* // envoi d'une instru tion pour l'affi heur !C" 4 1SH0N .-R0I60CT.T)instru tion*N 7 void .-R0I6C,1) har ara tere* 4 1SH1N .-R0I60CT.T) ara tere*N 7

sous-programme delaL6ms)-* + temporisation de - ms

sous-programme .-R0I60CT.T)o tet* + envoi d'un o tet sur l'affi heur !C" en mode 9 %its

sous-programme .-R0I6I-ST1)instru tion* + envoi d'une instru tion vers l'affi heur !C" sous-programme .-R0I6C,1) ara tere* + envoi d'un ara tTre vers l'affi heur !C"
45T( prog C 6 lavier$odt7 - page B/18

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

void I-IT6!C")* 4 .-R0I6I-ST1)0;88*N .-R0I6I-ST1) .-R0I6I-ST1) .-R0I6I-ST1) .-R0I6I-ST1) .-R0I6I-ST1) .-R0I6I-ST1) 7 void ,''ICI6!C")* 4 har iN stati *N *N *N *N *N *N

// initialisation de l'affi heur !C" --U S omplter // initialisation // mode 9 %its // paramtrage 9%its, O d'une ligne, matri e :;B // a tivation ran, pas de urseur, pas de lignotement // effa e l'affi heur

sous-programme I-IT6!C")* + initialisation de l'affi heur !C" A C12PL3T34

// e riture de la gau he vers la droite sans a tiver le suivi de urseur // 1eturn Iome pour le urseur

/= envoi du message >?0-@0/1> =/

onst har messageFBGH4

7N // S omplter // pour i de 0 S # par pas de 1 // faire // // // fin pour

sous-programme ,''ICI6!C")* + envoi du message ?0-@0/1 A C12PL3T34

envoLer messageFiG sur l'affi heur !C" --U S omplter ) utiliser le sous-programme .-R0I6C,1)**N

.-R0I6I-ST1) 7 void I-IT6(IC)* 4 T1IS, H 0;:'N

*N

// 1eturn Iome pour le urseur --U S omplter

// 1,: )1S* en sortie, les autres en entre // 1?1 )"9*, 1?2 )":*, 1?9 )"#* et 1?: )"B* en sortie // 1C: ).-* en sortie

sous-programme I-IT6(IC)* + initialisation des ports du (IC

T1IS? H T1IS? V 0;CCN T1ISC H T1ISC V 0;"'N 7 void main)* 4

programme prin ipal A C12PL3T34


// appel du sous-programme I-IT6(IC)* // appel du sous-programme I-IT6!C")* // appel du sous-programme ,''ICI6!C")*

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page E/18

Pour spcifier #a"resse "e a case oW &ous &ou e5 "!arrer #afficha$e, &ous "e&e5 en&o6er #instruction sui&ante a&ant "#en&o6er &os caract*res : D( D/ D5 D4 D3 D2 D1 D.

a"resse "e a case

e-e!p e : #appe "e EN<OIAINST7%J-D() p ace e curseur "e #afficheur sur a pre!i*re i$ne et e "eu-i*!e co onne car J-D( X Jb(JJJJJJ(' 3'6 9o"ifier &otre pro$ra!!e pour centrer 0 BON0OUR 1 sur a i$ne "u bas "e #afficheur' Tester et f !re " #!$er % r #e %r&fesse'r(

Pour &iter "#a&oir . chercher e co"e 8SCII "e chaque caract*re, i suffit "e !ettre e caract*re entre # #' e-e!p e : #8# X co"e 8SCII "e a ettre 8 soit J-E('

3'L 9o"ifier e sous-pro$ra!!e 8//ICGALCD%) afin "Rcrire cette fois : 0 PANNEAU SOLAIRE 1, centr sur a i$ne "u haut' Tester et f !re " #!$er % r #e %r&fesse'r(

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page C/18

(' D1c&$ 2e $' c# "!er


L#acquisition "u r$ a$e "u !o"e "e fonctionne!ent "u panneau est ra ise par un c a&ier !atric "e (6 touches soit E i$nes et E co onnes' Les touches sont qui&a entes . "es boutons-poussoirs p acs au- intersections "es i$nes et "es co onnes' 8u !o!ent "#un appui sur une touche "u c a&ier, on tab it un contact entre une i$ne et une co onne' La ecture "u c a&ier !atric est $re par un pro$ra!!e &ia e port D "u PIC (D/EF3'

i$nes

co onnes

7appe "u brocha$e "u PO7TD :


7DL 7D6 7DF 7DE 7DI 7D3 7D( 7DJ

PORTD

LI:I

LI:3

LI:(

LI:J

COLI

COL3

COL(

COLJ

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 10/18

La ecture "u c a&ier !atric se "rou e en "eu- te!ps : (- On confi$ure es co onnes "u c a&ier en sorties %7DJ . 7DI) et es i$nes "u c a&ier en entres %7DE . 7DL)' Les sorties "u port D %7DJ . 7DI) sont positionnes au ni&eau bas et on effectue une pre!i*re ecture "u port D4 on obtient a ors e co"e LI:NES'

lecture des lignes

3- On confi$ure es i$nes "u c a&ier en sorties %7DE . 7DL) et es co onnes "u c a&ier en entres %7DJ . 7DI)' Les sorties "u port D %7DE . 7DL) sont positionnes au ni&eau bas et on effectue une "eu-i*!e ecture "u port D4 on obtient a ors e co"e COLONNES'

lecture des colonnes

P&'r &3te+!r #e c&$e # t&'c*e s'r 8 3!ts4 !# s'ff!t $e f's!&++er #e c&$e LI5NES et #e c&$e COLONNES % r '+ OU #&2!6'e(

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 11/18

I'(8 #ai"e "es sch!as qui&a ents prc"ents, "ter!ine5 e co"e "e chacune "es touches "u c a&ier' Co"e TO>CGE Touche actionne aucune J ( 3 I E F 6 L D Y 8 K C D E / On "onne #a $orith!e per!ettant e "co"a$e "u c a&ier' On uti ise trois &ariab es "e t6pe 0 octet 1, #!2+es, c&#&++es et t&'c*e' Cette "erni*re &ariab e contient . a fin "e #e-cution "u sous-pro$ra!!e e co"e "e a touche appu6e' sous-programme C0".6T0/CI. d%ut mettre le (01T" en entre mettre les olonnes en sortie mettre les olonnes au niveau %as mettre les lignes en entre lire les lignes mettre le (01T" en entre mettre les lignes en sortie mettre les lignes au niveau %as mettre les olonnes en entre lire les olonnes tou he H olonnes 0/ lignes fin du sous-programme ( i$nes
7DL 7D6

co onnes
7D( 7DJ

Co"e he-a ( T//

7DF 7DE 7DI 7D3

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 12/18

I'3Ou&rir e fichier clavier.eleve0c' En uti isant #a $orith!e "onn pa$e prc"ente, co!p ter e souspro$ra!!e CODEATO>CGE%)' I'ICo!p ter e sous-pro$ra!!e DECOD8:E%) en entrant es co"es he-a"ci!au- "e chaque touche' On "onne #a $orith!e "u pro$ra!!e principa ' Le but est "#afficher a touche appu6e' programme prin ipal d%ut appel du sous-programme I-IT6(IC)* appel du sous-programme I-IT6!C")* appel du sous-programme ,''ICI6!C")* rpter appel du sous-programme C0".6T0/CI.)* appel du sous-programme ".C0",J.)* 1etour hariot pour le urseur envoi sur l'affi heur !C" de la varia%le numero6tou he S l'inifini fin I'E?crire "ans e fichier c# "!er7e#e"e(c e pro$ra!!e principa en an$a$e C' Co!pi er et en&o6er e pro$ra!!e "ans e !icrocontrH eur' Tester et f !re " #!$er % r #e %r&fesse'r( I'FOn uti ise a LED DF pour si!u er e !oteur "e !onte "u panneau so aire' ?crire un pro$ra!!e -anneau0c qui acti&e a !onte qui panneau si a touche #8# a t appu6e et #arr+te ors "#un appui sur #K#' L#afficheur LCD "e&ra afficher 0 8ONTEE 1 ou 0 ARRET 1' Tester et f !re " #!$er % r #e %r&fesse'r(

(,--.,/ S0!,I1. ,/T02,TIS3 + programmation en C

45T( prog C 6 lavier$odt7 - page 18/18

Вам также может понравиться