Paso 5: Programación del sistema
["#include
#define lcdport P0
#define adcport P1
SBIT enterkey = P2 ^ 5;
SBIT downkey = P2 ^ 6;
SBIT subir = P2 ^ 7;
SBIT rs = P2 ^ 0;
SBIT controlador = P2 ^ 1;
SBIT lcde = P2 ^ 2;
SBIT relé = P2 ^ 3;
SBIT zumbador = 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;
[] slogan1 de const unsigned char = "Riego de suelo";
[] slogan2 de const unsigned char = "Sistema de Contrl";
[] slogan3 de const unsigned char = "Valor de referencia";
[] slogan4 de const unsigned char = "Valor" del suelo;
void 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);
void timer0() interrupción 1
{
buzzercount ++;
TF0 = 0;
TH0 = 00;
TL0 = 00;
if(buzzercount==100)
{
buzzercount = 1;
zumbador = 0;
ET0 = 0;
TR0 = 0;
}
}
void longdelay()
{
unsigned int i, j;
para (i = 0; i < 100; i ++)
{
para (j = 0; j < 400; j ++)
{}
}}
void adccontrol()
{
WR = 0;
Delay();
WR = 1;
Delay();
while(intr == 1); / * esperar hasta que la señal INTR hace * /
/ * transición de alta a baja que indica * /
/ * terminación de la conversión
/ * Leer el valor del voltaje del puerto * /
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 ("%");
}
void upkeychk()
{
if(upkey==0)
{
referenceval ++;
send_command(0xc4);
sndconvdata(referenceval);
}}
void downkeychk()
{
if(downkey==0)
{
referenceval--;
send_command(0xc4);
sndconvdata(referenceval);
}}
void enterkeychk()
{
if(enterkey==0)
{
enterkeycount ++;
if(enterkeycount==1)
{
enterkeyflag = 1;
clr_lcd();
dispslogan(slogan3);
send_command(0xc4);
sndconvdata(referenceval);
}}} “]
["/ *** A PARTIR DEL PROYECTO DE CONTROLADOR DE TEMPERATURA *** /
void main()
{
Relay = 0a;
zumbador = 0;
TMOD = 0 X 01;
TH0 = 00;
TL0 = 00;
EA = 1;
ET0 = 0;
TR0 = 0;
controlador = 0;
Delay();
lcdinit();
clr_lcd();
dispslogan(slogan1);
next_line();
dispslogan(slogan2);
longdelay();
clr_lcd();"
["/ *** A PARTIR DEL BUCLE PRINCIPAL *** /
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;
Relay = 0;
if(buzzerentrycount==1)
{
zumbador = 1;
ET0 = 1;
TR0 = 1;
}}}”]
["/ *** FUNCIÓN PARA INTERCAMBIAR LSBYTE Y MSBYTE DE DATOS *** /
xch char sin signo (unsigned char data1)
{
unsigned char temp, temp1;
Temp = data1;
data1 = data1 >> 4;
temp1 = data1;
data1 = temp;
data1 = data1 << 4;
data1 = data1|temp1;
Return(data1);
} “]
["/ *** INICIALIZACIÓN DE LCD *** /
void lcdinit()
{
clr_lcd(); / * FUNCIÓN CONJUNTO * /
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x06); MODO DE INGRESO DE
Delay()
send_command(0x0e); PANTALLA ON/OFF
() retardo
clr_lcd();
} “]
["/ * FUNCIÓN PARA MOSTRAR DATOS EN LA PANTALLA LCD *** /
void dispslogan (unsigned char * p)
{
unsigned char data1;
while(*p)
{
data1 = * p;
Senddata(data1);
p ++;
}
} “]
["/ *** FUNCIÓN PARA ENVÍO DE LCD COMANDOS *** /
void send_command (unsigned char data1)
{
newdata unsigned char;
RS = 0;
Delay();
LCDE = 1;
Delay();
lcdport = data1;
LCDE = 0;
Delay();
LCDE = 1;
NewData=xch(data1);
lcdport = newdata;
Delay();
LCDE = 0;
Delay();
RS = 1;
} “]
["/ *** FUNCIÓN PARA ESCRIBIR DATOS EN EL LCD *** /
void senddata (unsigned char data1)
{
newdata unsigned char;
RS = 1;
Delay();
LCDE = 1;
Delay();
lcdport = data1;
LCDE = 0;
Delay();
LCDE = 1;
NewData=xch(data1);
lcdport = newdata;
Delay();
LCDE = 0;
Delay();
RS = 0;
} “]
["/ *** retardo de 20 micro segundo *** /
void delay()
{
unsigned char i, j;
para (i = 0; i < 80; i ++)
{
para (j = 0; j < 120; j ++)
{}
}}”]
["/ *** COMANDO PARA LLEVAR EL CURSOR DE LA LCD EN SEGUNDA LÍNEA *** /
void next_line()
{
send_command(0xc0);
Delay();
} “]
["/ *** COMANDO LCD CLARO Y TRAER CURSOR LCD EN PRIMERA LÍNEA *** /
void clr_lcd()
{
send_command(0x01);
Delay();
send_command(0x02);
Delay();
} “]