GSM baserade automatiserade bevattningssystem med regn-Gun (5 / 5 steg)
Steg 5: Systemprogrammering
["#include
#define lcdport P0
#define adcport P1
sbit Enter = P2 ^ 5.
sbit downkey = P2 ^ 6.
sbit upkey = P2 ^ 7;
sbit rs = P2 ^ 0;
sbit rdwr = P2 ^ 1;
sbit lcde = P2 ^ 2;
sbit relä = P2 ^ 3;
sbit Summer = 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 [] = "Jord bevattning";
CONST unsigned char slogan2 [] = "Contrl System";
CONST unsigned char slogan3 [] = "referensvärde";
CONST unsigned char slogan4 [] = "Markens värde";
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() avbrott 1
{
buzzercount ++;
TF0 = 0;
TH0 = 00.
TL0 = 00.
IF(buzzercount==100)
{
buzzercount = 1;
summern = 0;
ET0 = 0;
TR0 = 0;
}
}
void longdelay()
{
unsigned int i, j.
för (jag = 0; jag < 100; i ++)
{
för (j = 0; j < 400; j ++)
{}
}}
void adccontrol()
{
WR = 0;
Delay();
WR = 1;
Delay();
While(intr == 1); / * vänta tills INTR signalen gör * /
/ * hög-till låg övergång som anger * /
/ * slutförandet av konvertering
/ * Läsa värdet spänning från 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 ("%");
}
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);
}}} “]
["/ *** START AV TEMPERATUR CONTROLLER PROJEKT *** /
void main)
{
Relay = 0a;
summern = 0;
TMOD = 0X01;
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();"
["/ *** START AV MAIN LOOP *** /
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);
om (2 * adcdata > referenceval)
{
IF(!adcdatagreaterflag)
{
adcdatagreaterflag = 1;
buzzerentrycount ++;
lcde = 1;
Relay = 0;
IF(buzzerentrycount==1)
{
summern = 1;
ET0 = 1;
TR0 = 1;
}}}”]
["/ *** FUNKTION FÖR ATT BYTA LSBYTE OCH MSBYTE AV DATA *** /
unsigned char xch (unsigned char data1)
{
unsigned char temp, temp1;
Temp = data1;
Data1 = data1 >> 4;
temp1 = data1;
Data1 = härda;
Data1 = data1 << 4;
Data1 = data1|temp1;
Return(Data1);
} “]
["/ *** INITIERING AV LCD *** /
void lcdinit()
{
clr_lcd(); / * FUNKTION SET * /
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x06); POST-LÄGE
Delay()
send_command(0x0e); VISA PÅ/AV
fördröjning)
clr_lcd();
} “]
["/ * FUNKTION FÖR VISNING AV DATA PÅ LCD *** /
void dispslogan (unsigned char * p)
{
unsigned char data1;
While(*p)
{
Data1 = * p;
senddata(Data1);
p ++;
}
} “]
["/ *** FUNKTION FÖR SKICKA LCD-KOMMANDON *** /
void send_command (unsigned char data1)
{
unsigned char newdata;
RS = 0;
Delay();
lcde = 1;
Delay();
lcdport = data1;
lcde = 0;
Delay();
lcde = 1;
newData=XCH(Data1);
lcdport = newdata;
Delay();
lcde = 0;
Delay();
RS = 1;
} “]
["/ *** FUNKTION FÖR ATT SKRIVA DATA PÅ LCD *** /
void senddata (unsigned char data1)
{
unsigned char newdata;
RS = 1;
Delay();
lcde = 1;
Delay();
lcdport = data1;
lcde = 0;
Delay();
lcde = 1;
newData=XCH(Data1);
lcdport = newdata;
Delay();
lcde = 0;
Delay();
RS = 0;
} “]
["/ *** fördröjning för 20 micro andra *** /
void delay()
{
unsigned char i, j.
för (jag = 0; jag < 80; i ++)
{
för (j = 0; j < 120; j ++)
{}
}}”]
["/ *** KOMMANDO FÖR ATT VÄCKA LCD-MARKÖREN PÅ ANDRA RADEN *** /
void next_line()
{
send_command(0xC0);
Delay();
} “]
["/ *** KOMMANDO FÖR CLEARING LCD OCH FÖRA LCD-MARKÖREN PÅ FÖRSTA RADEN *** /
void clr_lcd()
{
send_command(0x01);
Delay();
send_command(0x02);
Delay();
} “]