لدي مشروع إلكتروني يتطلب برمجة للميكركونترلر 16F877 أريد أن أضيف إليه تعديلات على مستوى البرمجة لجعله يتماشى مع مايتطلبه
كود:
#include "source.h"
#include "LCD.C"
#include "PCF8583.C"
#include "2432.C"
#include <ctype.h>
long int chartoint(char code[3])
{long int param;
param=(code[1]-48 +(code[0]-48)*10);
return param;
}
char bytetochar(byte x)
{char param [3];
param[0]=x/100+48;
param[1]=x/10-((param[0]-48)*10);
param[2]=x-((param[0]-48)*100)-((param[1]-48)*10);
return x;
}
void main()
{int page,an,a,x; long int timeout;
char c;
char code[2];
date_time_t dt;
timeout=0;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
lcd_init();
init_ext_eeprom();
PCF8583_init();
an=read_eeprom(0);
printf("Voulez vous regler le temps/date du\n\r");
printf("SYSTEME ? (O/N)\n\r");
SET_TRIS_C(0x86);
output_low(PIN_C0);
while(1)
{
while (!kbhit()&&(++timeout<3000)) {delay_ms(1);++timeout;lcd_gotoxy(1,1);lcd_putc("Init...");}
if (timeout >3000){break;}
c = getc();
c = toupper(c);
if(c == 'O')
{
L1:printf("\n\r");
printf("donnez le mois Format:XX\n\r");
while(!kbhit());gets(code);
dt.month = chartoint(code);
if (dt.month >12){printf("format Incorrect ?\n\r");goto L1;}
printf("\n\r");
L2:printf("donnez le jour Format:XX\n\r");
while(!kbhit());gets(code);
dt.day = chartoint(code); printf("\n\r");
if (dt.day >31){printf("format Incorrect ?\n\r");goto L2;}
L3:printf("donnez année Format:XX\n\r");
while(!kbhit());gets(code);
an = chartoint(code);printf("\n\r");
if (an <7){printf("Date invalide ?\n\r");goto L3;}
if (an >99){printf("Date invalide ?\n\r");goto L3;}
write_EEPROM(0,an);
L4:printf("donnez heure Format:XX\n\r");
while(!kbhit());gets(code);
dt.hours = chartoint(code);printf("\n\r");
if (dt.hours >23){printf("format Incorrect ?\n\r");goto L4;}
L5:printf("donnez minute Format:XX\n\r");
while(!kbhit());gets(code);
dt.minutes = chartoint(code);printf("\n\r");
if (dt.minutes >59){printf("format Incorrect ?\n\r");goto L5;}
dt.seconds = 0;
dt.weekday = 0;
PCF8583_set_datetime(&dt);
printf("\n\r");
printf("Nouvelle date/temps est ecrite dans le PCF8583.\n\r");
break;
}
if(c == 'N')
break;
}
printf("\n\r");
printf("Voulez vous lire les données de\n\r");
printf("systéme ? (O/N)\n\r");
timeout=0;
while(1)
{
while (!kbhit()&&(++timeout<3000)) {delay_ms(1);++timeout;lcd_gotoxy(1,1);lcd_putc("Init...");}
if (timeout >3000){break;}
c = getc();
c = toupper(c);
if(c == 'O')
{
for (c=1;c<10;c=c+1)
{ printf("GARDIEN N");
putc(bytetochar(x));
for (page=1;page<31;page=page+1)
{
dt.day=read_ext_eeprom(page+c-48);putc(dt.day); printf(" ");
dt.month=read_ext_eeprom(page+c-48+256);putc(dt.month);printf(" ");
dt.hours=read_ext_eeprom(page+c-48+512);putc(dt.hours);printf(" ");
dt.minutes=read_ext_eeprom(page+c-48+1024);putc(dt.minutes);printf(" ");printf("\n\r");
}
}
break;
}
if(c == 'N')
break;
}
printf("\n\r");
lcd_gotoxy(1,1);
lcd_putc("PFE ISSAT MAHDIA\n");
lcd_putc("NASRI & HELA");
delay_ms(3000);
printf("Démarrage de SYSTEME avec succé \n\r");
while(1)
{
delay_ms(1000);
PCF8583_read_datetime(&dt);
lcd_gotoxy(1,1);
printf(LCD_putc," %u/%u/%02u, %u:%02u:%02u\n\r",
dt.day, dt.month, an,
dt.hours, dt.minutes, dt.seconds);
lcd_gotoxy(1,2);lcd_putc("Inserez votre carte");
if (input(PIN_C1) && (a==1))
{ a=0;
lcd_gotoxy(1,2);lcd_putc("Lecture de la carte");
output_high(PIN_C0);delay_ms(500);
//while(!kbhit());c=getc(); // à activer pour le test réel de la carte et non en simulation
lcd_gotoxy(1,2);lcd_putc("Gardien Présent ");
page = chartoint(dt.day);
write_ext_eeprom(page+c-48,dt.day);
write_ext_eeprom(page+c-48+256,dt.month);
write_ext_eeprom(page+c-48+512,dt.hours);
write_ext_eeprom(page+c-48+1024,dt.minutes);
delay_ms(1000);
while(input(PIN_C1)){lcd_gotoxy(1,2);lcd_putc("Retirer la carte ");}
}
if (input(PIN_C1)==0){a=1;}
}
}
اخواني أريد أن أضيف عليه تعديلات لجعله يتماشى مع المثال الهندسي التالي [IMG]C:\Users\Badreddine\Desktop\Schema.gif[/IMG]