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

أدوات الموضوع

isambukhari
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 6
نشاط [ isambukhari ]
قوة السمعة:0
قديم 11-12-2012, 07:43 AM المشاركة 1   
ha pic16f628a مساعدة بخصوص الضغط على البوش بوتن Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركات
ارجو المساعدة من الاخوه الكرام


اريد كتابة برنامج قي الميكروسي يقوم بالعمل التالي

قمت بتوصيل ليد على احد اطراف البيك
وقمت بتوصيل البوتن (زر او كبسة) في البيك

المطلوب ان يبقى الليد مضيء اذا ضغطت على البوتن بشكل متتالي اي اضغط و ارفع بشكل سريع واذا لم اضغط لمدة 3ثواني ينطفئ الليد



ارجو التكرم و المساعدة منكم لاني مطر على هذا البرنامج وجزاكم الله كل خير

اعلانات

isambukhari
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 6
نشاط [ isambukhari ]
قوة السمعة:0
قديم 11-12-2012, 07:56 AM المشاركة 2   
افتراضي


السلام عليكم ورحمة الله وبركات
ارجو المساعدة من الاخوه الكرام


اريد كتابة برنامج قي الميكروسي يقوم بالعمل التالي

قمت بتوصيل ليد على احد اطراف البيك
وقمت بتوصيل البوتن (زر او كبسة) في البيك

المطلوب ان يبقى الليد مضيء اذا ضغطت على البوتن بشكل متتالي اي اضغط و ارفع بشكل سريع واذا لم اضغط لمدة 3ثواني ينطفئ الليد



ارجو التكرم و المساعدة منكم لاني مطر على هذا البرنامج وجزاكم الله كل خير
ارجو التكرم يا اخوني بحل بكتابة هذا البرناج

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

Mohammedalharbi
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2012
المشاركات: 58
نشاط [ Mohammedalharbi ]
قوة السمعة:0
قديم 11-12-2012, 08:44 AM المشاركة 3   
افتراضي


اهلا اخي..للاسف مااستعمل برنامج mikro
بس كتبت لك الكود باستخدام برنامج mplab ..حاول تطبق نفس الفكرة.
جربته في بروتس واشتغل.. بس كانه يحتاجله تعديل في الديلاي(delay) ..حاول تزيد في القيمة بين الضغطتين..
كود:
#include <htc.h>

__CONFIG(FOSC_INTOSC&WDTE_OFF&MCLRE_ON&CP_OFF);

#define _XTAL_FREQ 16000000

void main (void)
{

	OSCCON  = 0x7B;  //select internal osciallator =16Mhz
	__delay_us(4);			//allow the new clock to stabilize

	TRISCbits.TRISC2 =0;	// set Pin 2 in PortC  as output
	TRISCbits.TRISC1 =1;    // set Pin 1 in PortC  as input
	RC2=0;					//clear Pin 2 in PortC
	RC1=0;					// clear Pin 1 in PortC
	char stat=0;			//define the state of the button
	while(1)
		{
		while(RC1==1)    //if button pushed 
				{
				__delay_ms(100); //wait for 100 ms
				if (RC1==1)	//if the button is still pressed 
					{
					RC2=1;	//turn on the LED on PortC pin 2
					stat=1;	// change the status of button to high
					}
				}
		while(RC1==0){			//if the button is not pressed
				if (stat){     // check the previous status of the button if stat=1
						RC2=1;	 //keep the LED high  
					
						for(int i=0; i<30; i++)  //delay for 3 sec
							{	
					
								while (RC1==1) //if the button is pressed during the delay, break the for loop
									{
									i=30;
									}
							__delay_ms(100);
							}
						}	
			RC2=0;  //since the 30 min is passed and the button is not pressed,turn off the LED
			stat=0; // change the status of the LED to low
		
		}
		}
}


Mohammedalharbi
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2012
المشاركات: 58
نشاط [ Mohammedalharbi ]
قوة السمعة:0
قديم 11-12-2012, 09:18 AM المشاركة 4   
افتراضي


تم التعديل بعض الاخطاء..

كود:
#include <htc.h>

__CONFIG(FOSC_INTOSC&WDTE_OFF&MCLRE_ON&CP_OFF);

#define _XTAL_FREQ 16000000

void main (void)
{

	OSCCON  = 0x7B;  //select internal osciallator =16Mhz
	__delay_us(4);			//allow the new clock to stabilize

	TRISCbits.TRISC2 =0;	// set Pin 2 in PortC  as output
	TRISCbits.TRISC1 =1;    // set Pin 1 in PortC  as input
	RC2=0;					//clear Pin 2 in PortC
	RC1=0;					// clear Pin 1 in PortC
	char stat=0;			//define the state of the button
	while(1)
		{
		while(RC1==1)    //if button pushed 
				{
				__delay_ms(500); //wait for 100 ms
				if (RC1==1)	//if the button is still pressed 
					{
					RC2=1;	//turn on the LED on PortC pin 2
					stat=1;	// change the status of button to high
					}
				}
		while(RC1==0){			//if the button is not pressed
				if (stat){     // check the previous status of the button if stat=1
					
					
						for(int i=0; i<30; i++)  //delay for 3 sec
							{	
					
								if (RC1==1) //if the button is pressed during the delay, wait another 3
									{
									i=0;
									}
							__delay_ms(100);
							}
						}	
			RC2=0;  //since the 30 min is passed and the button is not pressed,turn off the LED
			stat=0; // change the status of the LED to low
		
		}
		}
}


isambukhari
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 6
نشاط [ isambukhari ]
قوة السمعة:0
قديم 11-12-2012, 09:23 AM المشاركة 5   
افتراضي


مشكور جداً اخي الكريم على الرد
لاكن انا اريد
:

اذا تم الضغط على السوتش بشكل متتالي يبقى الليد مضاء و اذا رفعت يدي عن السويتش لمدة معينة او ابقيتها على السوتش للمدة نفسها ينطفئ الليد


الصورة الرمزية اكترونى بشري
اكترونى بشري
:: مهندس جيد ::
تاريخ التسجيل: Apr 2010
الدولة: libya-tripoli
المشاركات: 201
نشاط [ اكترونى بشري ]
قوة السمعة:0
قديم 11-12-2012, 02:20 PM المشاركة 6   
افتراضي


مشكور جداً اخي الكريم على الرد
لاكن انا اريد
:

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


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 11-12-2012, 03:04 PM المشاركة 7   
افتراضي


تفضل اخي ...

كود:
char i=0,j=0;
void main()
 {trisa.f0=1;trisb.f0=0;portb=1;
 while(1)
        {i=0;portb.f0=1;
       while(porta.f0)
                     {i++;
                       delay_ms(100);
                      if(i>30){portb.f0=0;i=0;}
                     }
       i=0;
       while(porta.f0==0)
                     {i++;
                       delay_ms(100);
                      if(i>30){portb.f0=0;i=0;}
                     }
       }

}


isambukhari
:: مهندس ::
تاريخ التسجيل: Dec 2012
المشاركات: 6
نشاط [ isambukhari ]
قوة السمعة:0
قديم 12-12-2012, 06:31 AM المشاركة 8   
win


تفضل اخي ...

كود:
char i=0,j=0;
void main()
 {trisa.f0=1;trisb.f0=0;portb=1;
 while(1)
        {i=0;portb.f0=1;
       while(porta.f0)
                     {i++;
                       delay_ms(100);
                      if(i>30){portb.f0=0;i=0;}
                     }
       i=0;
       while(porta.f0==0)
                     {i++;
                       delay_ms(100);
                      if(i>30){portb.f0=0;i=0;}
                     }
       }

}
مشكور جداً اخي الكريم هذا ما اردته
فقط قمت بتعديل char i=0 الى int i;
شكراً جزيلاً لكم

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025