Schritt 5: Systemprogrammierung
["#include
#define Lcdport P0
#define Adcport P1
sBIT Enterkey = P2 ^ 5;
sBIT Downkey = P2 ^ 6;
sBIT Upkey = P2 ^ 7;
sBIT Rs = P2 ^ 0;
sBIT Rdwr P2 = ^ 1;
sBIT Lcde P2 = ^ 2;
sBIT Relais = 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 [] = "Boden Bewässerung";
const unsigned Char slogan2 [] = "Contrl System";
const unsigned Char slogan3 [] = "Referenzwert";
const unsigned Char slogan4 [] = "Boden Wert";
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() Interrupt 1
{
Buzzercount ++;
TF0 = 0;
TH0 = 00;
TL0 = 00;
If(buzzercount==100)
{
Buzzercount = 1;
Summer = 0;
ET0 = 0;
TR0 = 0;
}
}
void longdelay()
{
unsigned Int i, j;
für (ich = 0; ich < 100; i ++)
{
für (j = 0; j < 400; j++)
{}
}}
void adccontrol()
{
WR = 0;
Delay();
WR = 1;
Delay();
while(intr == 1); / * warten bis das INTR-Signal macht * /
/ * High-Low-Übergang Angabe * /
/ * Umstellung
/ * Lesen den Spannungswert vom Hafen * /
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);
}}} “]
["/ *** AB DER TEMPERATUR CONTROLLER PROJEKT *** /
void main()
{
Relais = 0a;
Summer = 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();"
["/ *** AB DER 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);
Wenn (2 * Adcdata > Referenceval)
{
If(!adcdatagreaterflag)
{
Adcdatagreaterflag = 1;
Buzzerentrycount ++;
Lcde = 1;
Relais = 0;
If(buzzerentrycount==1)
{
Summer = 1;
ET0 = 1;
TR0 = 1;
}}}”]
["/ *** FUNKTION FÜR DEN AUSTAUSCH VON LSBYTE UND MSBYTE DER DATEN *** /
unsigned Char Xch (unsigned Char data1)
{
unsigned Char temp, temp1;
Temp = data1;
Data1 = data1 >> 4;
Temp1 = data1;
Data1 = Temp;
Data1 = data1 << 4;
Data1 = data1|temp1;
Return(Data1);
} “]
["/ *** INITIALISIERUNG DES LCD *** /
void lcdinit()
{
clr_lcd(); / * FUNKTIONEN * /
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x28);
Delay();
send_command(0x06); EINGABEMODUS
Delay()
send_command(0x0e); ZEIGEN EIN/AUS AN
Verzögerung)
clr_lcd();
} “]
["/ * FUNKTION ZUM ANZEIGEN VON DATEN AUF DEM LCD *** /
void Dispslogan (unsigned Char * p)
{
unsigned Char data1;
while(*p)
{
Data1 = * p;
SendData(Data1);
p ++;
}
} “]
["/ *** FUNKTION FÜR SENDEN LCD-BEFEHLE *** /
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 ZUM SCHREIBEN VON DATEN AUF DEM 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;
} “]
["/ *** verzögern für 20 Micro zweiter *** /
void delay()
{
unsigned Char i, j;
für (ich = 0; ich < 80; i ++)
{
für (j = 0; j < 120; j++)
{}
}}”]
["/ *** BEFEHL DAFÜR LCD-CURSOR AUF DIE ZWEITE ZEILE *** /
void next_line()
{
send_command(0xc0);
Delay();
} “]
["/ *** BEFEHL FÜR CLEARING LCD- UND BRINGT LCD-CURSOR AUF DIE ERSTE ZEILE *** /
void clr_lcd()
{
send_command(0x01);
Delay();
send_command(0x02);
Delay();
} “]