المشروع عبارة عن طريقة اوتوماتيكية لاخذ فيم بطاقات E1 التي تستعملها شركات الاتصال للربط الاتصال بالشبكة,
المشروع يقدم احتمالين اما ان يختار التقني ان يقوم بعملية اخذ قيم جميع الــ pin فنقوم ببدا عملة اوتوماتكية لاخذجميع القيم الاربع و الستون ( الا اني في المشروع اكتفية بخمس فقط للتجريب j=5 ) و اما ان يختار التقني المود اليدوي و بذلك يدخل فيمة ال pin الذي يريد اخذ قيمته فيتوجه ال motor الى المكان المحدد و يعود بعد ان يتنطر 20 تانية ( اخذت 2 توان في المشروع فقط للتجريب و لكي لا يكول الانتظار )
المشكل كالاتي, عندما اقوم بتخريب المود اوتوماتيك لوحده فهو يعملة و عنمدا اقوم بتجريب المود يدوي فقه يعمل لكن عندما اجمع المودين و اقوم بعملة اختيار لواحد منهما فانا اواجه مشكل, و عندما احل مشكل يظهر مشكل اخير بالاخص في lcd فتختفي كتابة و تظهر اخرى و في بعض الاحيان تظهر حروف غريبة
ان تكرمتم ان تلقوا نظرة على الكود و ان كان اي شئ غير صحيح ارجوا اخباري
للاشارة استعمل mikroc pro لتجمة الكود و isis للمعاينة
و هنا صورة للمشروع
link
و هنا الكود
كود:
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections
// Keypad module connections
char keypadPort at PORTD;
// End Keypad module connections
// Variables
int kc,kp,a,aa;
int tab[10];
int i=0,j=0,k=0,l=0,var=0,pos,resu,temp;
char affi[5];
// Declaration des fonctions
int choix();
int test();
void init();
void automatique();
void manuel();
void forward_m1();
void backward_m1();
void up_m2();
void down_m2();
void main()
{
init();
do{
Lcd_Out(1,5,"**Menu**");
Lcd_Out(2,5,"<Entree>");
}while(test()!=35);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "**Mode Autom**");
Lcd_Out(2, 1, "<Next>");
Lcd_Out(2, 9, "<Entree>");
aa=choix();
switch (aa)
{ case 1: {
automatique();
break;
}
case 0: {
manuel();
break;
}
}
Lcd_Cmd(_LCD_CLEAR);
}
void init(){
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
TRISB = 0x00;
PORTB = 0x00;
TRISC = 0x00;
Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
//Lcd_Cmd(_LCD_CURSOR_OFF);
}
int test(){
kc = 0;
do
kc = Keypad_Key_Click();
while (!kc);
switch (kc)
{
case 1: kc = 49; break; // 1
case 2: kc = 50; break; // 2
case 3: kc = 51; break; // 3
case 5: kc = 52; break; // 4
case 6: kc = 53; break; // 5
case 7: kc = 54; break; // 6
case 9: kc = 55; break; // 7
case 10: kc = 56; break; // 8
case 11: kc = 57; break; // 9
case 13: kc = 42; break; // *
case 14: kc = 48; break; // 0
case 15: kc = 35; break; // #
}
return kc;
}
int choix(){
a=1;
do{
do
kp = Keypad_Key_Click();
while (!kp);
switch (kp)
{
case 13: {
if(a==0){
Lcd_Out(1, 2, "**Mode Autom**");
Lcd_Out(2, 1, "<Next>");
Lcd_Out(2, 9, "<Entree>");
a=1;
}
else{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "**Mode Manue**");
Lcd_Out(2, 1, "<Next>");
Lcd_Out(2, 9, "<Entree>");
a=0;
}
kp = 42; break; // *
}
case 15: kp = 35; break; // #
}
}while(kp!=35);
return a;
}
void automatique(){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "**Mode Autom**");
Lcd_Out(2,2,"PIN NUMERO: ");
j=0;
while(j<3){
j++;
forward_m1();
ByteToStr(j, affi);
Lcd_Out(2,14,Ltrim(affi));
down_m2();
up_m2();
}
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_FIRST_ROW);
Lcd_Out_CP(" **Mode Autom**");
Lcd_Cmd(_LCD_SECOND_ROW);
Lcd_Out_CP("mise a zero...");
j++;
while(j>0){
backward_m1();
j--;
}
}
void manuel(){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 2, "**Mode Manue**");
Lcd_Out(2,2,"ALLER A : ");
var=0;
pos=12;
do{
tab[var]=test();
if(tab[var]!=35){
if(tab[var]!=42){
Lcd_Chr(2,pos,tab[var]);
if(pos<13) pos++;
}
else{
Lcd_Out(2,12," ");
pos=12;
var=-1;
}
}
var++;
}while(tab[var-1]!=35);
resu=0;
if(tab[1]!=35){
resu=((tab[0]-48)*10)+tab[var-2]-48;
}
else{
resu=(tab[0]-48);
}
temp=resu;
while(resu){
forward_m1();
resu--;
}
down_m2();
up_m2();
Lcd_Out(1, 2, "**Mode Manue**");
Lcd_Out(2,2,"Mise a zero...");
while(temp){
backward_m1();
temp--;
}
}
void forward_m1(){
switch (i){
case 0:
{
PORTB=0x60; // 090 degree
delay_ms(500);
i++;
break;
}
case 1:
{
PORTB=0xC0; // 180 degree
delay_ms(500);
i++;
break;
}
case 2:
{
PORTB=0x90; // 270 degree
delay_ms(500);
i++;
break;
}
case 3:
{
PORTB=0x30; // 000 degree
delay_ms(500);
i=0;
break;
}
}
}
void backward_m1(){
switch (l){
case 0:
{
PORTB=0x90; // 090 degree
delay_ms(500);
l++;
break;
}
case 1:
{
PORTB=0xC0; // 180 degree
delay_ms(500);
l++;
break;
}
case 2:
{
PORTB=0x60; // 270 degree
delay_ms(500);
l++;
break;
}
case 3:
{
PORTB=0x30; // 000 degree
delay_ms(500);
l=0;
break;
}
}
}
void down_m2(){
PORTB=0x0C; // 180 degree
delay_ms(2000); // 20s de mesure
}
void up_m2(){
PORTB=0x03; // 000 degree
delay_ms(1000); // temps d'attent pour passer au next pin
}