J
jackson0215
Guest
to je nějaký problém, když jsem kompilaci tohoto zdrojového kódu, může někdo ze u pomozte mi zkontrolovat, co je problém a pomoci mi ji upravit?
# Include <16F877A.h>
# Pojistky NOWDT / / No Watch Dog Timer
# Pojistky XT / / vysokorychlostní OSC (> 4mhz)
# Pojistky zahnědnutí / / Reset, když zahnědnutí zjištěny
# Pojistky NOPUT / / No Power Up Timer
# Pojistky DEBUG
# Použití zpoždění (hodiny = 4000000)
# Použití RS-232 (přenosová = 9600, parita = N, xmit = PIN_C6, rcv = PIN_C7, bitů = 8, stream = GSM)
# Použití RS-232 (přenosová = 1200, parita = N, xmit = PIN_C1, invertovat, rcv = PIN_E2, bitů = 8, stream = IRS1) / / První IR senzor
# Použití RS-232 (přenosová = 1200, parita = N, xmit = PIN_C1, invertovat, rcv = PIN_D7, bitů = 8, stream = IRS2) / / Druhý IR senzor
# Define LCD_DB4 PIN_C0 / / LCD Data Pins
# Define LCD_DB5 PIN_C1
# Define LCD_DB6 PIN_C2
# Define LCD_DB7 PIN_C3
# Define LCD_E PIN_D1 / / LCD Povolit Pin
# Define LCD_RS PIN_D0 / / LCD RS Pin
# Define IRLED PIN_E0
# Define PIRLED PIN_D6
# Define MEGLED PIN_D5
# Define SMOKELED PIN_D4
# Define PIRSENSOR PIN_A0
# Define MEGSENSOR PIN_A3
# Define SMOKESENSOR PIN_A2
# Include "flex_lcd.c" / / LCD ovladač
# Include <kbd1.c> / / klávesnice ovladač
# Include <stdlib.h> / / standardních knihoven
# Include <string.h> / /
# Define bzučák PIN_E1 / / bzučák připojené na pin 9
# Define Sen 100 / / IR citlivosti snímače, tj.
/ / Vyšší hodnota ..menší citlivost a naopak
int sendSMS (void) / / Metoda až k poslat SMS upozornění přes mobilní telefon T230
neplatné checkSensors (); / / IR senzor snímání přes RS232
int waitResponse (nepodepsané int16); / / AT Command reakce Metoda
int1 timeoutFlg = 0, SysActivated = 0; / / Výrazy a vlajek
INT8 AlertFlg = 0;
char buf [60]; / / řetězce buffer obdržet odpověď řetězec z mobilního telefonu
char dtstr [60] = ("ALERT! někdo vloupání do svého domu. \ 0"); / / Aler odeslání zprávy pomocí SMS
char SOK [] = ("OK"); / / reakce Struny z mobilního telefonu
char SER [] = ("ERROR");
char sSen [] = ("CMS ERROR");
char nk tomuto serveru [] = ("00923014217397 \ 0"); / / Receipent počet buněk
char heslo []={" 333 \ 0 "); / / heslo zadané listovat klávesnice
dlouhý timeout, timeout2, INDEX, / / čas zpracování proměnných a generální Index veriable
void main ()
(
unsigned int c, c2;
int i;
char K, projít []={"*** \ 0 ");
setup_adc_ports (No_ANALOGS); / / Všechny Ios je v digitálním režimu
setup_psp (PSP_DISABLED);
setup_spi (SPI_SS_DISABLED);
lcd_init (); / / LCD inicializace
kbd_init (); / / inicializace klávesnice
lcd_gotoxy (1,1); / / Inicializace řetězce zprávy na LCD po dobu 1 vteřiny
lcd_putc ("\ fStart-Up");
delay_ms (1000);while (1) (
lcd_putc ("\ fSystem De-aktivoval"); / / Systém potřebuje 3 číselné heslo do start k aktivaci
lcd_gotoxy (8,2);
i = 0;
AlertFlg = 0;
timeout2 = 0;
output_low (pin_a1);
k = 0;
output_high (PIN_A1); / / LED říci, že systém má powerd a připraven
AlertFlg = 0;
while (! sysActivated) (/ / I když, až systém není aktivován pomocí hesla vstup
k = kbd_getc (); / / skenování klávesnice
if (k! = 0) (/ / Pokud nějaké tlačítko je stisknuto
delay_ms (50); / / De-Bounce čas
lcd_putc ('*'); / / Print astarick na lcd
pasu = k; / / Nahraje pole index
i ;
)
if (i> = 3) (/ / Pokud je klávesnice tlačítka jsou lisované třikrát
if (pasu [0] == heslo [0] & & pasu [1] == heslo [1] & & pasu [2] == heslo [2]) (/ / Kontrola hesla ve tři číslice
lcd_putc ("\ f [Heslo OK]") / / Pokud je heslo zápasy
pasu [0] = 0;
pasu [1] = 0;
pasu [2] = 0;
lcd_gotoxy (2,2);
lcd_putc ("aktivovaný systém"); / / Aktivovat systém
output_Low (IRLED);
output_Low (PIRLED);
output_Low (MEGLED);
output_Low (SMOKELED);
delay_ms (2000);
SysActivated = 1; / / aktivace systému Flag
Else ()
lcd_putc ("\ f [Přístup byl odepřen]") / / Pokud je heslo je pak worng
delay_ms (2000);
lcd_putc ("\ fSystem De-aktivoval"); / / systém stále deaktivovány
lcd_gotoxy (8,2);
sysActivated = 0;
i = 0;
)
)
)/ / Pokud je heslo, byl OK, pak spusťte skenování senzory
lcd_putc ("\ f skenování ...."); / / jasný displej
while (1)
(
checkSensors (); / / Scan čidlo ve smyčce
if (AlertFlg> 0) / / Pokud intrustion je tam Stop Scanning
(Break
)
lcd_putc ("\ f"); / / jasný displej
output_high (bzučák), / / Alarm On
If (AlertFlg == 1) (
lcd_putc ("\ f * IR-detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (IRLED);
) Else if (AlertFlg == 2) (
lcd_putc ("\ f * PIR-detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (PIRLED);
) Else if (AlertFlg == 3) (
lcd_putc ("\ f * MEG Detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (MEGLED);
) Else if (AlertFlg == 4) (
lcd_putc ("\ f * detekce kouře MSG"); / / jasný displej a detekce průniků zprávu pobyty
output_high (SMOKELED);
)
sendSMS (); / / Poslat upozornění na zprávu SMSi = 0;
lcd_gotoxy (8,2);
while (sysActivated) (/ / Pokud není systém reset přes re-zadání hesla
k = kbd_getc (); / / bzučák bude dál.
if (k! = 0) (
delay_ms (50);
lcd_putc ('*');
pasu = k;
i ;
) If (i> = 3) (
if (pasu [0] == heslo [0] & & pasu [1] == heslo [1] & & pasu [2] == heslo [2]) (
lcd_putc ("\ f [Heslo OK]");
lcd_gotoxy (2,2);
lcd_putc ("System De-aktivoval");
output_low (bzučák);
pasu [0] = 0;
pasu [1] = 0;
pasu [2] = 0;
delay_ms (2000);
SysActivated = 0;
Else ()
lcd_gotoxy (1,2);
lcd_putc ("");
lcd_gotoxy (8,2);
sysActivated = 1;
i = 0;
)
))
)
)int waitResponse (nepodepsané int16 t) (/ / Tato metoda jednoduše přijímá RS232 odpověď od telefonu
/ / Odesílání AT-příkazy, aby mobilní telefon
int r;
TIMEOUT = T;
timeoutFlg = 1;
Index = 0;
do (
if (kbhit ()) (
buf [index] = fgetc (GSM);
index ;
)
delay_ms (1);
TIMEOUT -;
) While (TIMEOUT> 0 & & TIMEOUT <31000 & & index <60);
BUF [index] = '\ 0';
r = 0;
if (strstr (BUF, sSen)> 0) (/ / error
r = 4;
) Else if (strstr (BUF, SER)> 0) (/ / error
r = 2;
) Else if (strstr (BUF, SOK)> 0) (/ / datasent ok
r = 1;
)
if (r> 0) (
návrat r;
Else ()
return 0;
)
)
int sendSMS () (/ / odesílání SMS běžné listovat AT-příkazy
CHAR ctrlZ = 26, c = 34, resp;
lcd_gotoxy (2,2);
lcd_putc ("Posílání SMS Alert ..");
fprintf (GSM, "AT \ n \ r"); / / AT Command Start zde
waitResponse (2000);
fprintf (GSM, "AT CMGF = 1 \ n \ r"); / / SMS Text režimu na
waitResponse (2000);
fprintf (GSM, "AT CMGS =% C% S% C \ n \ r", c, nk tomuto serveru, c) / / Poslat SMS COMMAND
waitResponse (2000); / / žádná chyba.
If (AlertFlg == 1) (
fprintf (GSM, "IR% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 2) (
fprintf (GSM, "PIR% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 3) (
fprintf (GSM, "MEGNATIC% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 4) (
fprintf (GSM, "kouř% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
)
waitResponse (1000);
fprintf (GSM, "% c", ctrlZ); / / Pošli to s ctrlZ charakter
resp = waitResponse (5000); / / Wait for Odeslat OK odpověď
if (resp.! = 4 & & resp! = 2) (/ / Pokud není žádná chyba pak
fprintf (GSM, "AT \ n \ r");
waitResponse (1000); / / SMS záznam byl úspěšně odeslán
AlertFlg = 0;
return 1;
)
lcd_putc ("SMS Poslat Chyba .."); / / Ostatní moudrý zobrazení chybové
return 0;
)
neplatné CheckSensors () (/ / test systému
byte c = 0, c2 = 0;
AlertFlg = 0;
if (kbhit (IRS1)) / / Kontrola prvním čidle
(C = fgetc (IRS1)
if (kbhit (IRS2)) (/ / Kontrola druhé čidlo
c2 = fgetc (IRS2)
lcd_gotoxy (1,2);
printf (lcd_putc, "% d", c) / / Pokud je nějaký majetek, je recived ukazují pokrok na LCD
if (c == 0 & & c2 == 0) (/ / Pokud došlo vniknutí pak data se nedostali tj. 0
timeout2 ; / / Increament čas
Else ()
timeout2 = 0;
)
if (timeout2> Sen) (/ / Pokud doba překročí hodnotu sensitiveity
AlertFlg = 1; / / Tak tohle je varování podmínka, tj. vniknutí zjištěny.
timeout2 = 0;
break;
)
if (vstup (PIRSENSOR) == 1) (
AlertFlg = 2;
Break;
) Else if (vstup (MEGSENSOR) == 1) (
AlertFlg = 3;
Break;
) Else if (vstup (SMOKESENSOR) == 1) (
AlertFlg = 4;
Break;
)
)
# Include <16F877A.h>
# Pojistky NOWDT / / No Watch Dog Timer
# Pojistky XT / / vysokorychlostní OSC (> 4mhz)
# Pojistky zahnědnutí / / Reset, když zahnědnutí zjištěny
# Pojistky NOPUT / / No Power Up Timer
# Pojistky DEBUG
# Použití zpoždění (hodiny = 4000000)
# Použití RS-232 (přenosová = 9600, parita = N, xmit = PIN_C6, rcv = PIN_C7, bitů = 8, stream = GSM)
# Použití RS-232 (přenosová = 1200, parita = N, xmit = PIN_C1, invertovat, rcv = PIN_E2, bitů = 8, stream = IRS1) / / První IR senzor
# Použití RS-232 (přenosová = 1200, parita = N, xmit = PIN_C1, invertovat, rcv = PIN_D7, bitů = 8, stream = IRS2) / / Druhý IR senzor
# Define LCD_DB4 PIN_C0 / / LCD Data Pins
# Define LCD_DB5 PIN_C1
# Define LCD_DB6 PIN_C2
# Define LCD_DB7 PIN_C3
# Define LCD_E PIN_D1 / / LCD Povolit Pin
# Define LCD_RS PIN_D0 / / LCD RS Pin
# Define IRLED PIN_E0
# Define PIRLED PIN_D6
# Define MEGLED PIN_D5
# Define SMOKELED PIN_D4
# Define PIRSENSOR PIN_A0
# Define MEGSENSOR PIN_A3
# Define SMOKESENSOR PIN_A2
# Include "flex_lcd.c" / / LCD ovladač
# Include <kbd1.c> / / klávesnice ovladač
# Include <stdlib.h> / / standardních knihoven
# Include <string.h> / /
# Define bzučák PIN_E1 / / bzučák připojené na pin 9
# Define Sen 100 / / IR citlivosti snímače, tj.
/ / Vyšší hodnota ..menší citlivost a naopak
int sendSMS (void) / / Metoda až k poslat SMS upozornění přes mobilní telefon T230
neplatné checkSensors (); / / IR senzor snímání přes RS232
int waitResponse (nepodepsané int16); / / AT Command reakce Metoda
int1 timeoutFlg = 0, SysActivated = 0; / / Výrazy a vlajek
INT8 AlertFlg = 0;
char buf [60]; / / řetězce buffer obdržet odpověď řetězec z mobilního telefonu
char dtstr [60] = ("ALERT! někdo vloupání do svého domu. \ 0"); / / Aler odeslání zprávy pomocí SMS
char SOK [] = ("OK"); / / reakce Struny z mobilního telefonu
char SER [] = ("ERROR");
char sSen [] = ("CMS ERROR");
char nk tomuto serveru [] = ("00923014217397 \ 0"); / / Receipent počet buněk
char heslo []={" 333 \ 0 "); / / heslo zadané listovat klávesnice
dlouhý timeout, timeout2, INDEX, / / čas zpracování proměnných a generální Index veriable
void main ()
(
unsigned int c, c2;
int i;
char K, projít []={"*** \ 0 ");
setup_adc_ports (No_ANALOGS); / / Všechny Ios je v digitálním režimu
setup_psp (PSP_DISABLED);
setup_spi (SPI_SS_DISABLED);
lcd_init (); / / LCD inicializace
kbd_init (); / / inicializace klávesnice
lcd_gotoxy (1,1); / / Inicializace řetězce zprávy na LCD po dobu 1 vteřiny
lcd_putc ("\ fStart-Up");
delay_ms (1000);while (1) (
lcd_putc ("\ fSystem De-aktivoval"); / / Systém potřebuje 3 číselné heslo do start k aktivaci
lcd_gotoxy (8,2);
i = 0;
AlertFlg = 0;
timeout2 = 0;
output_low (pin_a1);
k = 0;
output_high (PIN_A1); / / LED říci, že systém má powerd a připraven
AlertFlg = 0;
while (! sysActivated) (/ / I když, až systém není aktivován pomocí hesla vstup
k = kbd_getc (); / / skenování klávesnice
if (k! = 0) (/ / Pokud nějaké tlačítko je stisknuto
delay_ms (50); / / De-Bounce čas
lcd_putc ('*'); / / Print astarick na lcd
pasu = k; / / Nahraje pole index
i ;
)
if (i> = 3) (/ / Pokud je klávesnice tlačítka jsou lisované třikrát
if (pasu [0] == heslo [0] & & pasu [1] == heslo [1] & & pasu [2] == heslo [2]) (/ / Kontrola hesla ve tři číslice
lcd_putc ("\ f [Heslo OK]") / / Pokud je heslo zápasy
pasu [0] = 0;
pasu [1] = 0;
pasu [2] = 0;
lcd_gotoxy (2,2);
lcd_putc ("aktivovaný systém"); / / Aktivovat systém
output_Low (IRLED);
output_Low (PIRLED);
output_Low (MEGLED);
output_Low (SMOKELED);
delay_ms (2000);
SysActivated = 1; / / aktivace systému Flag
Else ()
lcd_putc ("\ f [Přístup byl odepřen]") / / Pokud je heslo je pak worng
delay_ms (2000);
lcd_putc ("\ fSystem De-aktivoval"); / / systém stále deaktivovány
lcd_gotoxy (8,2);
sysActivated = 0;
i = 0;
)
)
)/ / Pokud je heslo, byl OK, pak spusťte skenování senzory
lcd_putc ("\ f skenování ...."); / / jasný displej
while (1)
(
checkSensors (); / / Scan čidlo ve smyčce
if (AlertFlg> 0) / / Pokud intrustion je tam Stop Scanning
(Break
)
lcd_putc ("\ f"); / / jasný displej
output_high (bzučák), / / Alarm On
If (AlertFlg == 1) (
lcd_putc ("\ f * IR-detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (IRLED);
) Else if (AlertFlg == 2) (
lcd_putc ("\ f * PIR-detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (PIRLED);
) Else if (AlertFlg == 3) (
lcd_putc ("\ f * MEG Detekce MSG *"); / / jasný displej a detekce průniků zprávu pobyty
output_high (MEGLED);
) Else if (AlertFlg == 4) (
lcd_putc ("\ f * detekce kouře MSG"); / / jasný displej a detekce průniků zprávu pobyty
output_high (SMOKELED);
)
sendSMS (); / / Poslat upozornění na zprávu SMSi = 0;
lcd_gotoxy (8,2);
while (sysActivated) (/ / Pokud není systém reset přes re-zadání hesla
k = kbd_getc (); / / bzučák bude dál.
if (k! = 0) (
delay_ms (50);
lcd_putc ('*');
pasu = k;
i ;
) If (i> = 3) (
if (pasu [0] == heslo [0] & & pasu [1] == heslo [1] & & pasu [2] == heslo [2]) (
lcd_putc ("\ f [Heslo OK]");
lcd_gotoxy (2,2);
lcd_putc ("System De-aktivoval");
output_low (bzučák);
pasu [0] = 0;
pasu [1] = 0;
pasu [2] = 0;
delay_ms (2000);
SysActivated = 0;
Else ()
lcd_gotoxy (1,2);
lcd_putc ("");
lcd_gotoxy (8,2);
sysActivated = 1;
i = 0;
)
))
)
)int waitResponse (nepodepsané int16 t) (/ / Tato metoda jednoduše přijímá RS232 odpověď od telefonu
/ / Odesílání AT-příkazy, aby mobilní telefon
int r;
TIMEOUT = T;
timeoutFlg = 1;
Index = 0;
do (
if (kbhit ()) (
buf [index] = fgetc (GSM);
index ;
)
delay_ms (1);
TIMEOUT -;
) While (TIMEOUT> 0 & & TIMEOUT <31000 & & index <60);
BUF [index] = '\ 0';
r = 0;
if (strstr (BUF, sSen)> 0) (/ / error
r = 4;
) Else if (strstr (BUF, SER)> 0) (/ / error
r = 2;
) Else if (strstr (BUF, SOK)> 0) (/ / datasent ok
r = 1;
)
if (r> 0) (
návrat r;
Else ()
return 0;
)
)
int sendSMS () (/ / odesílání SMS běžné listovat AT-příkazy
CHAR ctrlZ = 26, c = 34, resp;
lcd_gotoxy (2,2);
lcd_putc ("Posílání SMS Alert ..");
fprintf (GSM, "AT \ n \ r"); / / AT Command Start zde
waitResponse (2000);
fprintf (GSM, "AT CMGF = 1 \ n \ r"); / / SMS Text režimu na
waitResponse (2000);
fprintf (GSM, "AT CMGS =% C% S% C \ n \ r", c, nk tomuto serveru, c) / / Poslat SMS COMMAND
waitResponse (2000); / / žádná chyba.
If (AlertFlg == 1) (
fprintf (GSM, "IR% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 2) (
fprintf (GSM, "PIR% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 3) (
fprintf (GSM, "MEGNATIC% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
) Else if (AlerTFlg == 4) (
fprintf (GSM, "kouř% s", dtstr); / / Poskytnout str tj. varovné zprávy odeslat
)
waitResponse (1000);
fprintf (GSM, "% c", ctrlZ); / / Pošli to s ctrlZ charakter
resp = waitResponse (5000); / / Wait for Odeslat OK odpověď
if (resp.! = 4 & & resp! = 2) (/ / Pokud není žádná chyba pak
fprintf (GSM, "AT \ n \ r");
waitResponse (1000); / / SMS záznam byl úspěšně odeslán
AlertFlg = 0;
return 1;
)
lcd_putc ("SMS Poslat Chyba .."); / / Ostatní moudrý zobrazení chybové
return 0;
)
neplatné CheckSensors () (/ / test systému
byte c = 0, c2 = 0;
AlertFlg = 0;
if (kbhit (IRS1)) / / Kontrola prvním čidle
(C = fgetc (IRS1)
if (kbhit (IRS2)) (/ / Kontrola druhé čidlo
c2 = fgetc (IRS2)
lcd_gotoxy (1,2);
printf (lcd_putc, "% d", c) / / Pokud je nějaký majetek, je recived ukazují pokrok na LCD
if (c == 0 & & c2 == 0) (/ / Pokud došlo vniknutí pak data se nedostali tj. 0
timeout2 ; / / Increament čas
Else ()
timeout2 = 0;
)
if (timeout2> Sen) (/ / Pokud doba překročí hodnotu sensitiveity
AlertFlg = 1; / / Tak tohle je varování podmínka, tj. vniknutí zjištěny.
timeout2 = 0;
break;
)
if (vstup (PIRSENSOR) == 1) (
AlertFlg = 2;
Break;
) Else if (vstup (MEGSENSOR) == 1) (
AlertFlg = 3;
Break;
) Else if (vstup (SMOKESENSOR) == 1) (
AlertFlg = 4;
Break;
)
)