#include #include #include #include #include #include "hardware.h" //Hardware Routinen für die LEDs, die Echtzeituhr und den Türöffner #include "serial.h" //Routinen für die serielle Schnittstelle #include "flash.h" //Routinen für die flashkarte #define MAXDATEN 2000 //gibt an wieviele Datensätze maximal gespeichert werden #define uchar unsigned char #define fadr 0xd0 //Adresse der Flashkarte struct time // Struct für die Zeit { uchar seconds; uchar minutes; uchar hours; }; sbit sda=P5^0; //I2C Pin für die Daten-Leitung sbit scl=P5^1; //I2C Pin für die Clock-Leitung //Arays für die Daten unsigned long xdata nummern[MAXDATEN]; unsigned char xdata tag1[MAXDATEN]; unsigned char xdata tag2[MAXDATEN]; unsigned char xdata anfang1[MAXDATEN]; unsigned char xdata anfang2[MAXDATEN]; unsigned char xdata ende1[MAXDATEN]; unsigned char xdata ende2[MAXDATEN]; unsigned int letztedaten=MAXDATEN; //Hilfsvariable für die Datensätze //Funktionsprototypen void terminal(); void s_hilfe(); void format(); void s_zeit(); void s_zeitneu(); void s_wochentag(); void s_wochentagneu(); void s_laden(); void s_anzeige(); void speichern(); void lesen(); uchar seconds(); void warten(uchar sek); void erste_taste(uchar ged_taste); void tur_auf(); /******************************************** * Funktion für die Ein- und Ausgabe über* * die serielle Schnittstelle * ********************************************/ void terminal() { uchar xdata eingabe[20]=" "; uchar xdata stlinie[]= "******************************\r"; uchar xdata st_zwei[]= "* *\r"; uchar xdata prj[]= "* Projekt Zugangskontrolle *\r"; uchar xdata st_ret[]= " statt Return \"#\" benutzen! \r"; uchar xdata hilfe[]= " Befehlsuebersicht mit hilfe# \r"; uchar xdata wichtig[]= " WICHTIG, IMMER MIT ende# BEENDEN !!!! "; s_stringout(stlinie); s_stringout(st_zwei); s_stringout(prj); s_stringout(st_zwei); s_stringout(stlinie); s_charout('\r'); s_stringout(st_ret); s_charout('\r'); s_charout('\r'); s_stringout(wichtig); s_stringout(hilfe); while(1) { s_charout('\r'); s_charout('>'); s_stringin(eingabe); s_charout('\r'); if (s_stringvergl(eingabe,"ende#")==1) return; if (s_stringvergl(eingabe,"laden#")==1) s_laden(); if (s_stringvergl(eingabe,"daten#")==1) s_anzeige(); if (s_stringvergl(eingabe,"hilfe#")==1) s_hilfe(); if (s_stringvergl(eingabe,"format#")==1) format(); if (s_stringvergl(eingabe,"lesen#")==1) lesen(); if (s_stringvergl(eingabe,"speichern#")==1) speichern(); if (s_stringvergl(eingabe,"zeit#")==1) s_zeit(); if (s_stringvergl(eingabe,"zeitneu#")==1) s_zeitneu(); if (s_stringvergl(eingabe,"tag#")==1) s_wochentag(); if (s_stringvergl(eingabe,"tagneu#")==1) s_wochentagneu(); }; } /******************************************************** * Gibt den Hilfe Text aus * ********************************************************/ void s_hilfe() { s_stringout("*****************************************************\r"); s_stringout("* HILFE FUER DIE BENUTZUNG *\r"); s_stringout("* *\r"); s_stringout("* ende# Datenverwaltung beenden *\r"); s_stringout("* laden# Neue Daten in Speicher laden *\r"); s_stringout("* daten# Aktuelle Daten im Speicher anzeigen *\r"); s_stringout("* hilfe# Dieser Text *\r"); s_stringout("* speichern# Daten im Speicher auf Flash speichern *\r"); s_stringout("* (alte Daten werden ueberschrieben !) *\r"); s_stringout("* format# Flash loeschen *\r"); s_stringout("* lesen# Daten aus Flash in Speicher lesen *\r"); s_stringout("* zeit# Aktuelle Zeit anzeigen *\r"); s_stringout("* zeitneu# Zeit neu setzen *\r"); s_stringout("* tag# Aktuellen Wochentag anzeigen *\r"); s_stringout("* tagneu# Wochentag neu setzen *\r"); s_stringout("*****************************************************\r"); s_charout('\r'); } void s_wochentag() { s_stringout(" Aktueller Wochentag: "); s_charout(get_wochentag()+0x30); s_charout('\r'); } void s_wochentagneu() { uchar temp; s_stringout(" Bitte neuen Wochentag eingeben:"); temp=s_charin(); temp=temp-0x30; set_wochentag(temp); s_stringout(" Neuer Wochentag: "); s_charout(get_wochentag()+0x30); s_charout('\r'); } void s_zeit() { struct time zeits; uchar zeitstring[10]; get_zeit(&zeits); sprintf(zeitstring,"%d:%d:%d",zeits.hours,zeits.minutes,zeits.seconds); s_stringout(zeitstring); s_charout('\r'); } void s_zeitneu() { struct time zeits; uchar eingabe[5]; uchar temp; s_stringout("Neue Zeit eingeben"); s_charout('\r'); s_stringout("Wieder mit # abschließen"); s_charout('\r'); s_stringout("Stunden:"); s_stringin(eingabe); temp=atoi(eingabe); zeits.hours=temp; s_charout('\r'); s_stringout("Minuten:"); s_stringin(eingabe); temp=atoi(eingabe); zeits.minutes=temp; s_charout('\r'); set_zeit(&zeits); } void format() { s_stringout(" Flashkarte wird gelöscht, bitte warten ..."); s_charout('\r'); erase_flash(fadr); s_stringout(" Flash gelöscht, bitte neue Daten einspielen!"); s_charout('\r'); } /**************************************************** * Lädt neue Werte aus einer an die serielle * * Schnittstelle gesendeten Textdatei in den RAM * ****************************************************/ void s_laden() { const uchar senden[]="Bitte neue Zugangsdaten schicken ....\r"; const uchar erfolg[]="DATEN ERFOLGREICH EMPFANGEN\r"; int i,j; uchar idata temp; uchar xdata temp2[10]; bit abr=0; s_stringout(senden); for (i=0;i>8; n3=nummern[i]>>16; n4=nummern[i]>>24; write_flash(j,n1); write_flash(j+1,n2); write_flash(j+2,n3); write_flash(j+3,n4); write_flash(j+4,tag1[i]); write_flash(j+5,tag2[i]); write_flash(j+6,anfang1[i]); write_flash(j+7,anfang2[i]); write_flash(j+8,ende1[i]); write_flash(j+9,ende2[i]); }; s_stringout(" Daten abgespeichert"); s_charout('\r'); } void lesen() { unsigned int i; unsigned long j; uchar n1,n2,n3,n4; s_stringout(" Daten werden von Flash gelesen, bitte warten..."); s_charout('\r'); for (i=0;i