قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

chafteyes
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 225
نشاط [ chafteyes ]
قوة السمعة:
قديم 09-12-2009, 11:27 PM المشاركة 1265   
افتراضي



تتم
اما بخصوص الاستفسار الثاني فهو كما يلي
لا يمكن ان تضيئ ليد الاندار حتى ولو قمنا بالضغط على السوتش معا



كمثال عوض ان يضاء ليد الاندار يضيء ليد السويتش الدي ضغط عليه في البدء
هل من تفسير لهدا المشكل رجاء

اعلانات

الصورة الرمزية bigstreet
bigstreet
:: مهندس ::
تاريخ التسجيل: Nov 2009
المشاركات: 35
نشاط [ bigstreet ]
قوة السمعة:
قديم 09-12-2009, 11:41 PM المشاركة 1266   
افتراضي


بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته..
اود مشاركة الاخوة هدا النرنامج الذي كتبته بلغة mikroc
وهو عبارة عن قفل الكتروني مشفر بكودين (PIN & PUK)
PIN اربعة ارقام .... PUK ثمانية ارقام.... يشتغل كما يلي :
1: يطلب منك النظام ادخال كود pin (اربع محاولات)
2 : ادا ادخلت الكود الصحيح يتم تفعيل المخرج portd0
3 : ادا فشلت في ادخال الكود اربع مرات يطلب منك ادخال الكود puk (اربع محاولات)
4: ادا ادخلت الكود الصحيح يتم تفعيل المخرج portd0
5: ادا فشلت في ادخال الكود اربع مرات يتم تفعيل نظام الانذار لحوالي 5 ثوان
ثم يتوقف النظام
اليكم الدارة
باسم الله :


و الان مع الكود :

كود:
unsigned short kp[]={0,0,10,9,8,0,7,6,5,0,4,3,2,0,0,1,0},kp1, clavier,pin[]={1,9,8,7},chiffr,nmb,error,a,puk[]={1,2,3,4,5,6,7,8}  ;

void ok () {          
lcd_out(1,1,"code ok");        
portd.f0=1;                             
delay_ms(1000);                         
}
void delay() {                   
delay_ms(300);
}
void lcdclv ()  {                  
for(nmb=0;nmb<4;nmb++) {            
lcd_cmd(lcd_second_row);            
error=0;                          
for(chiffr=0;chiffr<a;chiffr++) {    
do {                                
clavier = Keypad_Released();
kp1=kp[clavier] ;
clavier = kp1;
} while(!clavier);
clavier--;                        
if(clavier!=pin[chiffr] ) {if (a==4) {error=1;} }        
if(clavier!=puk[chiffr] ) {  if (a==8) { error=1;  }  }
lcd_chr_cp(clavier+48);                                
}
if(error==0) { ok ();  break;}                         
if(error==1) { 
 lcd_out(1,1,"wrong code"); 
 delay();
 lcd_cmd(lcd_clear);
 if (nmb<3) 
 lcd_out(1,1,"try again"); }  
delay_ms(300);
}
}

void main ()  {
int alarm=0;
start:
a=4;
trisd=0;
portd.f0=0;
lcd_init(&portb);
keypad_init(&portc);
lcd_cmd(lcd_cursor_off);
lcd_out(1,1," welcome ");
delay();
lcd_cmd(lcd_clear);
lcd_out(1,1,"enter PIN");
lcdclv();
if (error==0) goto start;
lcd_cmd(lcd_clear);
lcd_out(1,1,"pin blocked");
delay();
a=8;
lcd_out(1,1,"enter PUK");
lcdclv();
if(error==0) goto start;
lcd_out(1,1,"systeme blocked");
while(1) {
portd.f1=0;
delay_us(500);
portd.f1=1;
delay_us(500);
alarm++;
if(alarm==5000) break;
}
}
انا مستعد لاي سؤال
اتمنا ان افيد الاخوة كما اتمنى ان اجد من يعدل على الكود بافكار جديدة ان شاء الله
الحمد لله الدي هدانا لهدا و ماكنا لنهتدي للولا اد هدانا


التعديل الأخير تم بواسطة : bigstreet بتاريخ 10-12-2009 الساعة 12:22 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 10-12-2009, 01:56 AM المشاركة 1267   
افتراضي


ماشاء الله برنامج جميل وكود رائع جدا ...

لكم أتمنى أن تضع هذا الكود والدائرة في موضوع جديد مستقل لكي يكون فيه النقاش أفضل ... وأشكرك وأحييك مرة أخرى


chafteyes
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 225
نشاط [ chafteyes ]
قوة السمعة:
قديم 10-12-2009, 02:17 AM المشاركة 1268   
افتراضي


سلام الله عليكم
مهندس احمد لا يسعني الا ان اشكرك على اخد طلبي بعين الاعتبار
كما لاسف ان اثقلت عليك بالاسؤلة فبالنسبة لكود الاندار لا زلت اواجه نفس المشكل مع العلم اني طبقت الكود كما وضعته لكن لا استجابة من لااندار
فعل ياتر يوجد خطا بالكود ام ان الخطئ من عندي
اسف ان اثقلت عليك بالاسؤلة
شكرا


pablo1
:: مهندس ::
تاريخ التسجيل: Jul 2009
المشاركات: 7
نشاط [ pablo1 ]
قوة السمعة:
قديم 10-12-2009, 05:53 AM المشاركة 1269   
افتراضي استفسار


السلام عليكم
اولا نحمد الله على سلامتك استاد احمد ونشكر الله لاستجابته لدعائنا واعادك الينا سالما غانما
الحيقيقةانا لديا سوال حيرني وهو
عندما ننشئ متغير مثلا char aaa داخل دالة void main اودالة اخرى
-ما هي القيمة التي يحملها متغير aaa عند انشائه مباشرة هل يكو ن مثلا 00000000
-وعندما نقوم بتحميل قيمة مثلا 21 لمتغير aaa عن طريق سويتش وفصلنا الكهرباء
عن البيك وبعد مدة قمنا بتوصيله هل يبق aaa محافض قيمته 21 ام لا
ارجرجو يا استاد احمد ان تجيبنى بجواب مفصل لانه مهم جدا


رانية1
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2006
الدولة: فلسطين
المشاركات: 128
نشاط [ رانية1 ]
قوة السمعة:
قديم 10-12-2009, 09:32 AM المشاركة 1270   
افتراضي الحل


اعتقد ان هذا هو الحل فهو سيقوم بفحص جميع الحالات واقوم باخذ الحالة التي اريد .

void main ()
{
trisa=0xff;
trisb=0x00;
portb=0;
while(1)
{
if(porta.f1==0&&porta.f2==0&&porta.f3==0)
portb=0;
delay_ms(100);
if(porta.f1==1&&porta.f2==0&&porta.f3==0)
portb=0b00000010;
delay_ms(100);
if(porta.f1==0&&porta.f2==1&&porta.f3==0)
portb.f0=1;
delay_ms(100);
if(porta.f1==1&&porta.f2==1&&porta.f3==0)
portb=0;
delay_ms(100);
if(porta.f1==0&&porta.f2==0&&porta.f3==1)
portb=3;
delay_ms(100);
if(porta.f1==1&&porta.f2==0&&porta.f3==1)
portb=0;
delay_ms(100);
if(porta.f1==0&&porta.f2==1&&porta.f3==1)
portb=0;
delay_ms(100);
if(porta.f1==1&&porta.f2==1&&porta.f3==1)
portb=0;
delay_ms(100);
}
}


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 10-12-2009, 03:15 PM المشاركة 1271   
افتراضي


اعتقد ان هذا هو الحل فهو سيقوم بفحص جميع الحالات واقوم باخذ الحالة التي اريد .

void main ()
{
trisa=0xff;
trisb=0x00;
portb=0;
while(1)
{
if(porta.f1==0&&porta.f2==0&&porta.f3==0)
portb=0;
delay_ms(100);
if(porta.f1==1&&porta.f2==0&&porta.f3==0)
portb=0b00000010;
delay_ms(100);
if(porta.f1==0&&porta.f2==1&&porta.f3==0)
portb.f0=1;
delay_ms(100);
if(porta.f1==1&&porta.f2==1&&porta.f3==0)
portb=0;
delay_ms(100);
if(porta.f1==0&&porta.f2==0&&porta.f3==1)
portb=3;
delay_ms(100);
if(porta.f1==1&&porta.f2==0&&porta.f3==1)
portb=0;
delay_ms(100);
if(porta.f1==0&&porta.f2==1&&porta.f3==1)
portb=0;
delay_ms(100);
if(porta.f1==1&&porta.f2==1&&porta.f3==1)
portb=0;
delay_ms(100);
}
}
ان البرنامج الذي وضعته أنا شغال بشكل جد وهو برنامج صغير لا يستهلك الكثير
من الذاكرة
2- أن تربطي المفاتيح بالارضي(-) أو بالموجب(+) فهذا لا يغير شيء في
البرنامج الذي سوف يتغير هو عدد الازرار التي سوف تضغط
فبدل من الضغط على زر واحد سوف تضغطين على زرين
ان تعليمة delay لا فائدة منها هنا
البرنامج الذي وضعته أنت رديء لانه لو كان عدد الازرار 6 مثلا فان عدد الاحتمالات
سوف يصبح 2أس6 وهو 64 احتمال وهذا رقم مهول
أفضل برنامج هو


void main()
{
trisa=0xff;
trisb=0;
portb=0;
rania: while(1){
if(porta.f1==0&&porta.f2==0&&porta.f3==1){portb=3; goto rania;}
if(porta.f1==1&&porta.f2==0&&porta.f3==0){portb=2; goto rania;}
if(porta.f1==0&&porta.f2==1&&porta.f3==0){portb=1; goto rania;}
portb=0;}}


ويمكنك ان تجربيه على دارة حقيقية تحتوي على ل relays فقط


التعديل الأخير تم بواسطة : lahoioui بتاريخ 10-12-2009 الساعة 03:18 PM

الصورة الرمزية bigstreet
bigstreet
:: مهندس ::
تاريخ التسجيل: Nov 2009
المشاركات: 35
نشاط [ bigstreet ]
قوة السمعة:
قديم 10-12-2009, 05:41 PM المشاركة 1272   
افتراضي


انشاء الله سأقوم بنقله مع تعديلات بسيطة و شكرا على هدا الكلام الجميل المشجع...



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:51 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)