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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 09:02 AM المشاركة 1   
افتراضي المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعد Twitter FaceBook Google+



المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الأول : تمهيد
استخدام وحدتى عرض سفن سيجمنت لعرض العدد الثابت "12" وليشير إلى رقم الوحدة المتفق عليها .
الدائرة الكهربية :



البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment -2 units
     MCU:             PIC16F877A
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
//////////////////////////////
#define Digit1 PORTA.RA0 // TENS
#define Digit2 PORTA.RA1 // ONES
///////////////////////////////////////
unsigned char Display (unsigned char digit)//convert(decoder) digit to 7 segment bit pattern 
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return ,segment data for common cathode
    return (pattern);
  }
////////////////////////////////////////
void main() {
  unsigned char MSD, LSD, count=12; // display constant 2 digit number 
  ADCON1= 6;           // Configure all pins as digital inputs .
  TRISA = 0;            // Configure PORTA as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT
//////////////////////////
 Digit1 = 0;            //Disable digit 1
 Digit2 = 0;            //Disable digit 2
////////////////
  while(1){
		///////////MSB is Digit1///// Steps :////////
       MSD = count / 10;       	//1-Extract MSD from "count" >>TENS
       PORTB = Display(MSD);    //2-Display the MSD , send to data port
       Digit1 = 1;             	//3- Enable digit 1 
       Delay_Ms(10);            //4- uase a short delay 10ms , as example
       Digit1 = 0;             	//5- Disable digit 2
		/////////////LSB is Digit2////////Repeat steps :///
       LSD = count % 10;        // LSD digit >>>ONES
       PORTB = Display(LSD);    //Display the LSD
       Digit2 = 1;             	//Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             	//Disable digit 2
	   ///////////////////////////////////
    }
}

ملف البرنامج والدائرة الكهربية على الرابط :


http://www.mediafire.com/download/cm...T-2UNITS-1.zip

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )
اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 09:12 AM المشاركة 2   
افتراضي


التدريب الثانى :
تطوير للتدريب الأول ، وذلك باستخدام أربعة وحدات لعرض العدد "1234"

الدائرة الكهربية :



البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment 4 UNITS
     MCU:             PIC16F877A
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
#define Digit1 PORTA.RA0 // THOUTHAND
#define Digit2 PORTA.RA1 // HUNDRED
#define Digit3 PORTA.RA2 // TENS
#define Digit4 PORTA.RA3 // ONES

unsigned char Display (unsigned char digit)
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return
    return (pattern);
  }

void main() {
  unsigned char DD1,DD2, DD3,DD4 ;
  unsigned int count=1234; //more than char
  ADCON1= 6;           // ALL AS DIGITAL
  TRISA = 0;            // Configure PORTA as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT

Digit1 = 0;            //Disable digit 1
Digit2 = 0;            //Disable digit 2
Digit3 = 0;            //Disable digit 3
Digit4 = 0;            //Disable digit 4 


  while(1){
		///////////
       DD1 = count / 1000;       //Extract DD1 from count >>THOUTHAND
       PORTB = Display(DD1);    //Display the DD1
       Digit1 = 1;             //Enable digit 1
       Delay_Ms(10);            //a short 10ms delay
       Digit1 = 0;             //Disable digit 1
		/////////
       DD2 = (count/100) % 10;        // DD2 digit >>>HUNDRED
       PORTB = Display(DD2);    //Display the DD3
       Digit2 = 1;             //Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             //Disable digit 2
	   ////////////
	   DD3 = (count/10) % 10;       //Extract DD3 from count >>TENS
       PORTB = Display(DD3);    //Display the DD3
       Digit3 = 1;             //Enable digit 3
       Delay_Ms(10);            //a short 10ms delay
       Digit3 = 0;             //Disable digit 3
	   /////////
	   DD4 = count % 10;       //Extract DD4 from count >>ONES
       PORTB = Display(DD4);    //Display the DD4
       Digit4 = 1;             //Enable digit 4
       Delay_Ms(10);            //a short 10ms delay
       Digit4 = 0;             //Disable digit 4
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 09:26 AM المشاركة 3   
افتراضي


التدريب الثالث : تطبيق على التدريب السابق
قراءة جهد تناظرى من 0v إلى 5v من مقاومة متغيرة وعرض نتيجة التحويل من تناظرى لرقمى من 0 إلى 1023

الدائرة الكهربية :







البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment 4 UNITS
     MCU:             PIC16F877A , ADC , 0-1023
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
#define Digit1 PORTD.B0 // THOUTHAND
#define Digit2 PORTD.B1 // HUNDRED
#define Digit3 PORTD.B2 // TENS
#define Digit4 PORTD.B3 // ONES

unsigned char Display (unsigned char digit)
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return
    return (pattern);
  }

void main() {
  unsigned char DD1,DD2, DD3,DD4 ;
  unsigned int ADC_result; //
  ADCON1= 0;           //
  TRISA.B0=1; // AN0 INPUT
  TRISD = 0;            // Configure PORTD as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT

Digit1 = 0;            //Disable digit 1
Digit2 = 0;            //Disable digit 2
Digit3 = 0;            //Disable digit 3
Digit4 = 0;            //Disable digit 4


  while(1){
  ADC_result=ADC_Read(0);  // Read analog value from channel 0
		///////////
       DD1 = ADC_result / 1000;       //Extract DD1 from ADC_result >>THOUTHAND
       PORTB = Display(DD1);    //Display the DD1
       Digit1 = 1;             //Enable digit 1
       Delay_Ms(10);            //a short 10ms delay
       Digit1 = 0;             //Disable digit 1
		/////////
       DD2 = (ADC_result/100) % 10;        // DD2 digit >>>HUNDRED
       PORTB = Display(DD2);    //Display the DD3
       Digit2 = 1;             //Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             //Disable digit 2
	   ////////////
	   DD3 = (ADC_result/10) % 10;       //Extract DD3 from ADC_result >>TENS
       PORTB = Display(DD3);    //Display the DD3
       Digit3 = 1;             //Enable digit 3
       Delay_Ms(10);            //a short 10ms delay
       Digit3 = 0;             //Disable digit 3
	   /////////
	   DD4 = ADC_result % 10;       //Extract DD4 from ADC_result >>ONES
       PORTB = Display(DD4);    //Display the DD4
       Digit4 = 1;             //Enable digit 4
       Delay_Ms(10);            //a short 10ms delay
       Digit4 = 0;             //Disable digit 4
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 09:44 AM المشاركة 4   
افتراضي


التدريب الرابع :
قياس درجة حرارة باستخدام الحساس LM35 وعرضها على 4 وحدات سفن سيجمنت

الدائرة الكهربية :










البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment 4 UNITS
     MCU:             PIC16F877A , ADC , LM35
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
#define Digit1 PORTD.B0 // THOUTHAND
#define Digit2 PORTD.B1 // HUNDRED
#define Digit3 PORTD.B2 // TENS
#define Digit4 PORTD.B3 // ONES

unsigned char Display (unsigned char digit)
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return
    return (pattern);
  }

void main() {
  unsigned char DD1,DD2, DD3,DD4 ;
  unsigned int result; //
  float scale ;
  char num ;
  ADCON1= 0;           //
  TRISA.B0=1; // AN0 INPUT
  TRISD = 0;            // Configure PORTD as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT

Digit1 = 0;            //Disable digit 1
Digit2 = 0;            //Disable digit 2
Digit3 = 0;            //Disable digit 3
Digit4 = 0;            //Disable digit 4


  while(1){
  result=ADC_Read(0);  // Read analog value from channel 0
  scale = result * (5000.0/1023.0); // input analog voltage
  scale = scale /10.0 ; // input temp inc for LM35
  num = scale ;
		///////////
       DD1 = num / 1000;       //Extract DD1 from result >>THOUTHAND
       PORTB = Display(DD1);    //Display the DD1
       Digit1 = 1;             //Enable digit 1
       Delay_Ms(10);            //a short 10ms delay
       Digit1 = 0;             //Disable digit 1
		/////////
       DD2 = (num/100) % 10;        // DD2 digit >>>HUNDRED
       PORTB = Display(DD2);    //Display the DD3
       Digit2 = 1;             //Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             //Disable digit 2
	   ////////////
	   DD3 = (num/10) % 10;       //Extract DD3 from result >>TENS
       PORTB = Display(DD3);    //Display the DD3
       Digit3 = 1;             //Enable digit 3
       Delay_Ms(10);            //a short 10ms delay
       Digit3 = 0;             //Disable digit 3
	   /////////
	   DD4 = num % 10;       //Extract DD4 from result >>ONES
       PORTB = Display(DD4);    //Display the DD4
       Digit4 = 1;             //Enable digit 4
       Delay_Ms(10);            //a short 10ms delay
       Digit4 = 0;             //Disable digit 4
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 09:53 AM المشاركة 5   
افتراضي


التدريب الخامس :

تطوير للتدريب السابق بوضع حرف :"C" للإشارة إلى الدرجات المئوية .

الدائرة الكهربية :



البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment 4 UNITS
     MCU:             PIC16F877A , ADC , LM35 MOD
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
#define Digit1 PORTD.B0 //  DIGIT 1 FROM LEFT , THOUTHAND
#define Digit2 PORTD.B1 // DIGIT 2 FROM LEFT , HUNDRED
#define Digit3 PORTD.B2 // DIGIT 3 FROM LEFT , TENS
#define Digit4 PORTD.B3 // DIGIT 4 FROM LEFT ,  ONES

unsigned char Display (unsigned char digit)
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return
    return (pattern);
  }

void main() {
  unsigned char DD1,DD2, DD3,DD4 ;
  unsigned int ADC_result; //
  float scale ;
  unsigned int num ;
  ADCON1= 0;           //
  TRISA.B0=1; // AN0 INPUT
  TRISD = 0;            // Configure PORTD as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT

Digit1 = 0;            //Disable digit 1
Digit2 = 0;            //Disable digit 2
Digit3 = 0;            //Disable digit 3
Digit4 = 0;            //Disable digit 4


  while(1){
  ADC_result=ADC_Read(0);  // Read analog value from channel 0
  scale = ADC_result * (5000.0/1023.0); // input analog voltage
  num = scale /10.0 ; // input temp inc for LM35
		///////////
       DD1 = num / 100;       //Extract DD1 from ADC_result >>THOUTHAND
       PORTB = Display(DD1);    //Display the DD1
       Digit1 = 1;             //Enable digit 1
       Delay_Ms(10);            //a short 10ms delay
       Digit1 = 0;             //Disable digit 1
		/////////
       DD2 = (num/10) % 10;        // DD2 digit >>>HUNDRED
       PORTB = Display(DD2);    //Display the DD3
       Digit2 = 1;             //Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             //Disable digit 2
	   ////////////
	   DD3 = num % 10;       //Extract DD3 from ADC_result >>TENS
       PORTB = Display(DD3);    //Display the DD3
       Digit3 = 1;             //Enable digit 3
       Delay_Ms(10);            //a short 10ms delay
       Digit3 = 0;             //Disable digit 3
	   /////////
	   //DD4 = num % 10;       //Extract DD4 from ADC_result >>ONES
       PORTB = 0x39;    //Display C CHARACTER
       Digit4 = 1;             //Enable digit 4
       Delay_Ms(10);            //a short 10ms delay
       Digit4 = 0;             //Disable digit 4
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 04-05-2016, 10:05 AM المشاركة 6   
افتراضي


التدريب السادس :

تطوير للبرنامج الأول مع إزالة حرف "C" واستخدام خانة الآحاد لبيان كسر الآحاد مع عرض النقطة العشرية على وحدة السفن سيجمنت :

الدائرة الكهربية :




البرنامج :


كود:
/*
 * Project name: Multiplexing_7-Segment 4 UNITS
     MCU:             PIC16F877A , ADC , LM35 MOD
     Oscillator:      HS, 8.0000 MHz
     SW:              mikroC PRO
*/
#define Digit1 PORTD.B0 //  DIGIT 1 FROM LEFT , THOUTHAND
#define Digit2 PORTD.B1 // DIGIT 2 FROM LEFT , HUNDRED
#define Digit3 PORTD.B2 // DIGIT 3 FROM LEFT , TENS
#define Digit4 PORTD.B3 // DIGIT 4 FROM LEFT ,  ONES

unsigned char Display (unsigned char digit)
  {
    unsigned char pattern;
    unsigned char  SEGMENT_MAP[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
    pattern =  SEGMENT_MAP[digit] ;  //The pattern to return
    return (pattern);
  }

void main() {
unsigned char DD1,DD2, DD3,DD4 ;

float result; //
unsigned int result1;
  ADCON1= 0;           //
  TRISA.B0=1; // AN0 INPUT
  TRISD = 0;            // Configure PORTD as outputs , COMMON CATHODES
  TRISB = 0;            // Configure PORTB as outputs ,7 SEGMENT DATA PORT

Digit1 = 0;            //Disable digit 1
Digit2 = 0;            //Disable digit 2
Digit3 = 0;            //Disable digit 3
Digit4 = 0;            //Disable digit 4


  while(1){
  result=ADC_Read(0);  // Read analog value from channel 0 ,0 to 1023 
  result = result * (5000.0/1023.0); // input analog voltage
  result = result /10.0 ; // input temp in C for LM35 0.0 to 150.0
  		///////////
	result = result *10.0 ;	// float 0.0 to 1500.0
	result1=result; //integer 0 to 1500 to get fraction
		/////////////
       DD1 = result1 / 1000;       //Extract DD1 from result >>THOUTHAND(hundred)
       PORTB = Display(DD1);    //Display the DD1
       Digit1 = 1;             //Enable digit 1
       Delay_Ms(10);            //a short 10ms delay
       Digit1 = 0;             //Disable digit 1
		/////////
       DD2 = (result1/100) % 10;        // DD2 digit >>>HUNDRED (tens)
       PORTB = Display(DD2);    //Display the DD3
       Digit2 = 1;             //Enable digit 2
       Delay_Ms(10);            //a short 10ms delay
       Digit2 = 0;             //Disable digit 2
	   ////////////
	   DD3 = (result1/10) % 10;       //Extract DD3 from result >>TENS (ones)
       PORTB = Display(DD3);    //Display the DD3
       Digit3 = 1;             //Enable digit 3
       Delay_Ms(10);            //a short 10ms delay
       Digit3 = 0;             //Disable digit 3
	   /////////
	   DD4 = result1 % 10;       //Extract DD4 from result >>ONES(fraction)
       //PORTB = 0x39;    //Display C CHARACTER
	   PORTB = Display(DD4);
       Digit4 = 1;             //Enable digit 4
       Delay_Ms(10);            //a short 10ms delay
       Digit4 = 0;             //Disable digit 4
    }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ardino160 ( شكر العضو على هذه المشاركة )
اعجاب ardino160 ( أعجبته المشاركة )

ardino160
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2014
المشاركات: 134
نشاط [ ardino160 ]
قوة السمعة:0
قديم 04-05-2016, 12:40 PM المشاركة 7   
افتراضي شكرا على موضوعك هذا


اسلام عليكم
كيف حالك أستاد عبد العزيز
هذا الموضوع جاء في وقته أنا في الامس الحاجة لهذا الموضوع
وجزاك الله خيرا

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً F.Abdelaziz ( شكر العضو على هذه المشاركة )

ardino160
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2014
المشاركات: 134
نشاط [ ardino160 ]
قوة السمعة:0
قديم 04-05-2016, 04:22 PM المشاركة 8   
افتراضي


استاد عبد العزيز
هل يمكنك ارفاق لنا ملف بروتس لدرس سادس

إضافة رد

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

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

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


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

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