كود تفعيل العضوية - الابلاغ عن روابط لاتعمل - صيانة التلفزيون - الحاسبة - الأعضاء المتميزين - البرامج و المخططات - بث مباشر للقنوات الفضائية - إذاعة - تردد القنوات - بحث
|
|||||||
| التسجيل | اجعل كافة المشاركات مقروءة |
| منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics |
![]() |
|
|
أدوات الموضوع |
|
|
#1 |
|
استاذ و مشرف قسم الالكترونيات
المشاركات: 6,894
معدل تقييم المستوى: 335
|
المدخل المباشر للتعامل مع وحدات السفن سيجمنت بطريقة 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
معدل تقييم المستوى: 335
|
التدريب الثانى :
تطوير للتدريب الأول ، وذلك باستخدام أربعة وحدات لعرض العدد "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
معدل تقييم المستوى: 335
|
التدريب الثالث : تطبيق على التدريب السابق
قراءة جهد تناظرى من 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
معدل تقييم المستوى: 335
|
التدريب الرابع :
قياس درجة حرارة باستخدام الحساس 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
معدل تقييم المستوى: 335
|
التدريب الخامس :
تطوير للتدريب السابق بوضع حرف :"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
معدل تقييم المستوى: 335
|
التدريب السادس :
تطوير للبرنامج الأول مع إزالة حرف "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++;
}
}
|
|
|
|
|
![]() |
| العلامات المرجعية |
| أدوات الموضوع | |
|
|