كود تفعيل العضوية - الابلاغ عن روابط لاتعمل - صيانة التلفزيون - الحاسبة - الأعضاء المتميزين - البرامج و المخططات - بث مباشر للقنوات الفضائية - إذاعة - تردد القنوات - بحث
|
التسجيل | اجعل كافة المشاركات مقروءة |
منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics |
![]() |
|
أدوات الموضوع |
![]() |
#1 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة 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
__________________
مقالات المهندس فتح الله عبدالعزيز |
![]() |
![]() |
اعلانات |
![]() |
#2 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() التدريب الثانى :
تطوير للتدريب الأول ، وذلك باستخدام أربعة وحدات لعرض العدد "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 عدم اعجاب, 0 اعجاب |
![]() |
|
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها ) | |||
|
![]() |
#3 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() التدريب الثالث : تطبيق على التدريب السابق
قراءة جهد تناظرى من 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 عدم اعجاب, 0 اعجاب |
![]() |
|
![]() |
#4 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() التدريب الرابع :
قياس درجة حرارة باستخدام الحساس 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 } }
__________________
مقالات المهندس فتح الله عبدالعزيز |
![]() |
![]() |
![]() |
#5 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() التدريب الخامس :
تطوير للتدريب السابق بوضع حرف :"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 } }
__________________
مقالات المهندس فتح الله عبدالعزيز |
![]() |
![]() |
![]() |
#6 |
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 332
|
![]() التدريب السادس :
تطوير للبرنامج الأول مع إزالة حرف "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 } }
__________________
مقالات المهندس فتح الله عبدالعزيز |
![]() |
![]() |
![]() |
#7 | |
مهندس متميز
![]() الدولة: Syria
المشاركات: 518
معدل تقييم المستوى: 0
|
![]() اقتباس:
اسمح لي أن أشارك مع حضرتك بتعديل بسيط على الكود ليصبح الاظهار للعدد 12 عداد يعد حتى 99 ثم يعود للصفر. كود:
void main() { unsigned char MSD, LSD, count=0; // display constant 2 digit number int i; 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){ for (i=0;i<50;i++){ ///////////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 /////////////////////////////////// } count++; } } |
|
![]() |
![]() |
![]() |
العلامات المرجعية |
أدوات الموضوع | |
|
|