المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
2 مشترك
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الميكروكونترولر PIC والبرجة بلغة السى والمترجم مسكروسى برو :: الميكروكونترولر PIC والبرمجة بلغة السى والمترجم ميكروسى برو
صفحة 1 من اصل 1
المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الأول : تمهيد
استخدام وحدتى عرض سفن سيجمنت لعرض العدد الثابت "12" وليشير إلى رقم الوحدة المتفق عليها .
الدائرة الكهربية :
البرنامج :
ملف البرنامج والدائرة الكهربية على الرابط :
http://www.mediafire.com/download/cm27ykthi6dd8ay/1-MULTIPLEXING-7SEGMENT-2UNITS-1.zip
التدريب الأول : تمهيد
استخدام وحدتى عرض سفن سيجمنت لعرض العدد الثابت "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/cm27ykthi6dd8ay/1-MULTIPLEXING-7SEGMENT-2UNITS-1.zip
Samirrpic12 يعجبه هذا الموضوع
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الثانى :
تطوير للتدريب الأول ، وذلك باستخدام أربعة وحدات لعرض العدد "1234"
الدائرة الكهربية :
البرنامج :
تطوير للتدريب الأول ، وذلك باستخدام أربعة وحدات لعرض العدد "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
}
}
Samirrpic12 يعجبه هذا الموضوع
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الثالث : تطبيق على التدريب السابق
قراءة جهد تناظرى من 0v إلى 5v من مقاومة متغيرة وعرض نتيجة التحويل من تناظرى لرقمى من 0 إلى 1023
الدائرة الكهربية :
البرنامج :
قراءة جهد تناظرى من 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
}
}
Samirrpic12 يعجبه هذا الموضوع
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الرابع :
قياس درجة حرارة باستخدام الحساس LM35 وعرضها على 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
}
}
Samirrpic12 يعجبه هذا الموضوع
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب الخامس :
تطوير للتدريب السابق بوضع حرف :"C" للإشارة إلى الدرجات المئوية .
الدائرة الكهربية :
البرنامج :
تطوير للتدريب السابق بوضع حرف :"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
}
}
Samirrpic12 يعجبه هذا الموضوع
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
التدريب السادس :
تطوير للبرنامج الأول مع إزالة حرف "C" واستخدام خانة الآحاد لبيان كسر الآحاد مع عرض النقطة العشرية على وحدة السفن سيجمنت :
الدائرة الكهربية :
البرنامج :
تطوير للبرنامج الأول مع إزالة حرف "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
}
}
رد: المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة Multiplexing من خلال تدريبات متعددة ومتدرجة
احسنتم بميزان حسناتكم
abdallhadi- عدد المساهمات : 1
تاريخ التسجيل : 23/02/2021
Samirrpic12 يعجبه هذا الموضوع
مواضيع مماثلة
» تدريبات على وحدات العرض السفن سجمنت 7-Segmentمع المترجم CCS C التدريب الأول :
» عوامل الإزاحة المخصصة للتعامل مع البتات المنفردة Bitwise Shift Operators
» شرح ساعة وقت وتاريخ تستخدم PIC16F877A و DS1307 و السفن سيجمنت مع المقاطعة
» تدريبات ومشاريع الأردوينو Arduino Tutorials and Projects
» جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 وحدات سفن سيجمنت مع المترجم CCS C :
» عوامل الإزاحة المخصصة للتعامل مع البتات المنفردة Bitwise Shift Operators
» شرح ساعة وقت وتاريخ تستخدم PIC16F877A و DS1307 و السفن سيجمنت مع المقاطعة
» تدريبات ومشاريع الأردوينو Arduino Tutorials and Projects
» جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 وحدات سفن سيجمنت مع المترجم CCS C :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الميكروكونترولر PIC والبرجة بلغة السى والمترجم مسكروسى برو :: الميكروكونترولر PIC والبرمجة بلغة السى والمترجم ميكروسى برو
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى