Etape 5: Programmation du système
["#include
#define lcdport P0
#define adcport P1
sbit enfoncées = P2 ^ 5 ;
sbit ouvre = P2 ^ 6 ;
sbit upkey = P2 ^ 7 ;
sbit rs = P2 ^ 0 ;
sbit rdwr = P2 ^ 1 ;
sbit lcde = P2 ^ 2 ;
sbit relais = P2 ^ 3 ;
sbit ronfleur = P2 ^ 4 ;
sbit intr = P3 ^ 0 ;
sbit wr = P3 ^ 1 ;
sbit rd = P3 ^ 2 ;
unsigned char adcdata ;
unsigned char referenceval ;
unsigned char enterkeyflag ;
unsigned char enterkeycount ;
unsigned char buzzercount ;
unsigned char buzzerentrycount ;
unsigned char loopflag = 1 ;
unsigned char adcdatagreaterflag ;
const unsigned char slogan1 [] = "L’Irrigation du sol" ;
const unsigned char slogan2 [] = "Contrl System" ;
const unsigned char slogan3 [] = "Valeur de référence" ;
const unsigned char slogan4 [] = "Valeur de sol" ;
Sub delay() ;
void lcdinit() ;
void clr_lcd() ;
void dispslogan(char*) ;
void senddata(unsigned char) ;
void send_command(unsigned char) ;
void next_line() ;
void delay1() ;
unsigned char xch(unsigned char) ;
interruption timer0() Sub 1
{
buzzercount ++ ;
TF0 = 0 ;
TH0 = 00 ;
TL0 = 00 ;
if(buzzercount==100)
{
buzzercount = 1 ;
ronfleur = 0 ;
ET0 = 0 ;
TR0 = 0 ;
}
}
Sub longdelay()
{
unsigned int i, j ;
pour (i = 0; i < 100; i ++)
{
pour (j = 0; j < 400; j ++)
{}
}}
Sub adccontrol()
{
WR = 0 ;
Delay() ;
WR = 1 ;
Delay() ;
while(intr == 1) ; / * attendre que le signal INTR rend * /
/ * haut-à-basse transition indiquant * /
/ * fin de conversion
/ * Lire la valeur de la tension du port * /
Delay() ;
RD = 0 ;
Delay() ;
Delay() ;
adcdata = adcport ;
RD = 1 ;
}
void sndconvdata (unsigned char convdata)
{
unsigned char convdata1 ;
convdata1 = convdata/10 ;
SendData (convdata1/10 + 48) ;
SendData (convdata1 % 10 + 48) ;
SendData (convdata % 10 + 48) ;
dispslogan ("%") ;
}
Sub upkeychk()
{
if(Upkey==0)
{
referenceval ++ ;
send_command(0xC4) ;
sndconvdata(referenceval) ;
}}
Sub downkeychk()
{
if(downkey==0)
{
referenceval--;
send_command(0xC4) ;
sndconvdata(referenceval) ;
}}
Sub enterkeychk()
{
if(enterkey==0)
{
enterkeycount ++ ;
if(enterkeycount==1)
{
enterkeyflag = 1 ;
clr_lcd() ;
dispslogan(slogan3) ;
send_command(0xC4) ;
sndconvdata(referenceval) ;
}}} “]
["/ *** À PARTIR DE LA TEMPÉRATURE CONTRÔLEUR PROJET *** /
Sub main()
{
Relais = 0 a ;
ronfleur = 0 ;
TMOD = 0 X 01 ;
TH0 = 00 ;
TL0 = 00 ;
EA = 1 ;
ET0 = 0 ;
TR0 = 0 ;
rdwr = 0 ;
Delay() ;
lcdinit() ;
clr_lcd() ;
dispslogan(slogan1) ;
next_line() ;
dispslogan(slogan2) ;
longdelay() ;
clr_lcd(); »
["/ *** À PARTIR DE LA BOUCLE PRINCIPALE *** /
while(enterkeycount<2)
{
enterkeychk() ;
if(enterkeyflag)
upkeychk() ;
if(enterkeyflag)
downkeychk() ;
}
RD = 1 ;
WR = 1 ;
intr = 1 ;
clr_lcd() ;
dispslogan(slogan4) ;
while(1)
{
Delay() ;
adccontrol() ;
Delay() ;
send_command(0xC4) ;
sndconvdata(2*adcdata) ;
Si (2 * adcdata > referenceval)
{
if(!adcdatagreaterflag)
{
adcdatagreaterflag = 1 ;
buzzerentrycount ++ ;
LCDE = 1 ;
Relais = 0 ;
if(buzzerentrycount==1)
{
ronfleur = 1 ;
ET0 = 1 ;
TR0 = 1 ;
}}}”]
["/ *** FONCTION POUR ÉCHANGER DES LSBYTE ET MSBYTE DU DONNÉES *** /
unsigned char xch (unsigned char data1)
{
unsigned char temp, temp1 ;
Temp = données1 ;
Data1 = data1 >> 4 ;
Temp1 = données1 ;
Data1 = temp ;
Data1 = data1 << 4 ;
Data1 = data1|temp1 ;
Return(data1) ;
} “]
["/ *** L’INITIALISATION DE L’ÉCRAN LCD *** /
Sub lcdinit()
{
clr_lcd() ; / * FONCTION SET * /
send_command(0x28) ;
Delay() ;
send_command(0x28) ;
Delay() ;
send_command(0x28) ;
Delay() ;
send_command(0x06) ; MODE D’ENTRÉE
Delay()
send_command(0x0E) ; AFFICHER MARCHE/ARRÊT
retarder)
clr_lcd() ;
} “]
[« / * FONCTION D’AFFICHAGE DES DONNÉES SUR L’ÉCRAN LCD *** /
void dispslogan (unsigned char * p)
{
unsigned char data1 ;
while(*p)
{
Data1 = * p ;
SendData(data1) ;
p ++ ;
}
} “]
["/ *** FONCTION POUR ENVOYER DES LCD COMMANDES *** /
void send_command (unsigned char data1)
{
unsigned char newdata ;
RS = 0 ;
Delay() ;
LCDE = 1 ;
Delay() ;
lcdport = données1 ;
LCDE = 0 ;
Delay() ;
LCDE = 1 ;
NewData=Xch(data1) ;
lcdport = newdata ;
Delay() ;
LCDE = 0 ;
Delay() ;
RS = 1 ;
} “]
["/ *** FONCTION POUR ÉCRIRE DES DONNÉES SUR L’ÉCRAN LCD *** /
Sub senddata (unsigned char data1)
{
unsigned char newdata ;
RS = 1 ;
Delay() ;
LCDE = 1 ;
Delay() ;
lcdport = données1 ;
LCDE = 0 ;
Delay() ;
LCDE = 1 ;
NewData=Xch(data1) ;
lcdport = newdata ;
Delay() ;
LCDE = 0 ;
Delay() ;
RS = 0 ;
} “]
["/ *** retarder pour 20 micro seconde *** /
delay() Sub
{
unsigned char i, j ;
pour (i = 0; i < 80; i ++)
{
pour (j = 0; j < 120; j ++)
{}
}}”]
["/ *** COMMANDE POUR AMENER LE CURSEUR DE L’ÉCRAN LCD SUR LA DEUXIÈME LIGNE *** /
Sub next_line()
{
send_command(0xC0) ;
Delay() ;
} “]
["/ *** COMMANDE POUR LCD DE COMPENSATION ET AMENER LE CURSEUR LCD SUR PREMIÈRE LIGNE *** /
Sub clr_lcd()
{
send_command(0x01) ;
Delay() ;
send_command(0x02) ;
Delay() ;
} “]