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

   

sofien.j
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
الدولة: tunisia
المشاركات: 83
نشاط [ sofien.j ]
قوة السمعة:
قديم 17-06-2010, 08:59 PM المشاركة 25   
افتراضي



السلام عليكم ورحمه الله
اخي
أبو زكووور
lovevb6
sofien.j
5282
Ahmed7905
جزاكم الله خيرا علي هذا التشجيع الجميل وهذه الكلمات الرقيقه
للاسف لن استطيع ان اشرح الكود كاملا وذلك لسببين
السبب الاول لست ممن اعطاهم الله موهبه ايصال المعلومه
السبب الثاني هو ضيق الوقت فقد اقتربت امتحاناتي
ولكن يمكن ان اشرح افكار بعض الدوال الرئيسيه في البرنامج
وساشرح فكره الداله write1(char num)
وهي الداله الرئيسيه في هذا البرنامج واللتي تقوم بارسال البيانات الي مسجله الازاحه
لاوضح عمل هذه الدله ساذكر مثال بسيط عند كتابه الامر التالي ماذا يحدث
portb=7;
ما يحدث هو ان اول 3bit يتحولوا الي high اما بقيه البورت يكون low
f7 f6 f5 f4 f3 f2 f1 f0
0 0 0 0 0 1 1 1
ولكن ماذا يحدث اذا اردنا ان نظهر الرقم 7 علي مسجل الازاحه
سيتطلب ذلك تحويل الرقم 7 الي النظام الثنائي اولا وتخزينه في المصفوفه m[8]
وبعد ذلك يتم ارسال محتويات المصفوفه الي مسجل الازاحه
والداله اللتي تقوم بتحويل الرقم الي النظام الثنائي هي
d2b(char hex)
ولاوضح عمل هذه الداله يجب ان نسترجع بعض المبادئ البرمجيه وهو كيفيه تحويل الارقام من النظام العشري الي النظام الثنائي وكان ذلك يتم بقسمه الرقم
العشري علي 2 واخذ باقي القسمه ليكون علي النحو التالي
7/2=3 ويكون باقي القسمه1
3/2=1 ويكون باقي القسمه1
1/2=0 ويكون باقي القسمه1
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
بتجميع باقي قسمه العمليات مقلوبه اي من اسفل الي اعلي ينتج الرقم
00000111
ويتم ذلك برمجيا علي النحو التالي
كود:
void d2b(char hex)
{
for(x=0;x<8;x++)
               {
               m[7-x]=hex%2;
               hex=hex/2;
               }

}
وعند استعاء داله الكتابه write1
فانها تقوم بارسال الرقم الي الداله d2bوالتي بدورها تحول الرقم الي النظام الثنائي
وتخزنه في المصفوفه m[8[
وبعد الانتهاء من التحويل والتخزين تبدا عمليه الارسال الي مسجل الازاحه
ليكون كود داله الكتابه بالشكل التالي
كود:
void write1(char num)
{
d2b(num);//call the function that coverts the number
//into binary  and save it in m[8]

for(x=0;x<8;x++)//send data to the 74hc595
         {
          data1=m[x];
          clk1
         }
         show1;

}
اعتذر عن الاطاله
مع تحياتي
the lion

اخي هل لي بشرح في البرنامج كيفية زيادة المتركس 24 الي 64
يعني اي دالة يكون العمل عليها لاستطيع اظهار المتريكس علي 64 عمود
ومع الشكر

اعلانات

chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:
قديم 02-12-2010, 12:38 PM المشاركة 26   
افتراضي chaalali


[QUOTE=the lion;398215]السلام عليكم ورحمه الله
اخي
أبو زكووور
lovevb6
sofien.j
5282
Ahmed7905
جزاكم الله خيرا علي هذا التشجيع الجميل وهذه الكلمات الرقيقه
للاسف لن استطيع ان اشرح الكود كاملا وذلك لسببين
السبب الاول لست ممن اعطاهم الله موهبه ايصال المعلومه
السبب الثاني هو ضيق الوقت فقد اقتربت امتحاناتي
ولكن يمكن ان اشرح افكار بعض الدوال الرئيسيه في البرنامج
وساشرح فكره الداله write1(char num)
وهي الداله الرئيسيه في هذا البرنامج واللتي تقوم بارسال البيانات الي مسجله الازاحه
لاوضح عمل هذه الدله ساذكر مثال بسيط عند كتابه الامر التالي ماذا يحدث
portb=7;
ما يحدث هو ان اول 3bit يتحولوا الي high اما بقيه البورت يكون low
f7 f6 f5 f4 f3 f2 f1 f0
0 0 0 0 0 1 1 1
ولكن ماذا يحدث اذا اردنا ان نظهر الرقم 7 علي مسجل الازاحه
سيتطلب ذلك تحويل الرقم 7 الي النظام الثنائي اولا وتخزينه في المصفوفه m[8]
وبعد ذلك يتم ارسال محتويات المصفوفه الي مسجل الازاحه
والداله اللتي تقوم بتحويل الرقم الي النظام الثنائي هي
d2b(char hex)
ولاوضح عمل هذه الداله يجب ان نسترجع بعض المبادئ البرمجيه وهو كيفيه تحويل الارقام من النظام العشري الي النظام الثنائي وكان ذلك يتم بقسمه الرقم
العشري علي 2 واخذ باقي القسمه ليكون علي النحو التالي
7/2=3 ويكون باقي القسمه1
3/2=1 ويكون باقي القسمه1
1/2=0 ويكون باقي القسمه1
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
0/0=0 ويكون باقي القسمه0
بتجميع باقي قسمه العمليات مقلوبه اي من اسفل الي اعلي ينتج الرقم
00000111
ويتم ذلك برمجيا علي النحو التالي
كود:
void d2b(char hex)
{
for(x=0;x<8;x++)
               {
               m[7-x]=hex%2;
               hex=hex/2;
               }

}
وعند استعاء داله الكتابه write1
فانها تقوم بارسال الرقم الي الداله d2bوالتي بدورها تحول الرقم الي النظام الثنائي
وتخزنه في المصفوفه m[8[
وبعد الانتهاء من التحويل والتخزين تبدا عمليه الارسال الي مسجل الازاحه
ليكون كود داله الكتابه بالشكل التالي
كود:
void write1(char num)
{
d2b(num);//call the function that coverts the number
//into binary  and save it in m[8]

for(x=0;x<8;x++)//send data to the 74hc595
         {
          data1=m[x];
          clk1
         }
         show1;

}
اعتذر عن الاطاله
مع تحياتي
the lion[/QUOTE


السلام عليكم ورحمة الله وبركته


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

const char ahmednum[546] =
{
0x00, 0x00, 0x00, 0x00, 0x00 ,0x00, // sp
0x00, 0x00, 0x2f, 0x00, 0x00 ,0x00, // !
0x00, 0x07, 0x00, 0x07, 0x00 ,0x00, // "
0x14, 0x7f, 0x14, 0x7f, 0x14 ,0x00, // #
0x24, 0x2a, 0x7f, 0x2a, 0x12 ,0x00, // $
0xc4, 0xc8, 0x10, 0x26, 0x46 ,0x00, // %
0x36, 0x49, 0x55, 0x22, 0x50 ,0x00, // &
0x00, 0x05, 0x03, 0x00, 0x00 ,0x00, // '
0x00, 0x1c, 0x22, 0x41, 0x00 ,0x00, // (
0x00, 0x41, 0x22, 0x1c, 0x00 ,0x00, // )
0x14, 0x08, 0x3E, 0x08, 0x14 ,0x00, // *
0x08, 0x08, 0x3E, 0x08, 0x08 ,0x00, // +
0x00, 0x00, 0x50, 0x30, 0x00 ,0x00, // ,
0x10, 0x10, 0x10, 0x10, 0x10 ,0x00, //
0x00, 0x60, 0x60, 0x00, 0x00 ,0x00, // .
0x20, 0x10, 0x08, 0x04, 0x02 ,0x00, // /
0x3E, 0x51, 0x49, 0x45, 0x3E ,0x00, // 0
0x00, 0x42, 0x7F, 0x40, 0x00 ,0x00, // 1
0x42, 0x61, 0x51, 0x49, 0x46 ,0x00, // 2
0x21, 0x41, 0x45, 0x4B, 0x31 ,0x00, // 3
0x18, 0x14, 0x12, 0x7F, 0x10 ,0x00, // 4
0x27, 0x45, 0x45, 0x45, 0x39 ,0x00, // 5
0x3C, 0x4A, 0x49, 0x49, 0x30 ,0x00, // 6
0x01, 0x71, 0x09, 0x05, 0x03 ,0x00, // 7
0x36, 0x49, 0x49, 0x49, 0x36 ,0x00, // 8
0x06, 0x49, 0x49, 0x29, 0x1E ,0x00, // 9
0x00, 0x36, 0x36, 0x00, 0x00 ,0x00, // :
0x00, 0x56, 0x36, 0x00, 0x00 ,0x00, // ;
0x08, 0x14, 0x22, 0x41, 0x00 ,0x00, // <
0x14, 0x14, 0x14, 0x14, 0x14 ,0x00, // =
0x00, 0x41, 0x22, 0x14, 0x08 ,0x00, // >
0x02, 0x01, 0x51, 0x09, 0x06 ,0x00, // ?
0x32, 0x49, 0x59, 0x51, 0x3E ,0x00, // *
0x7E, 0x11, 0x11, 0x11, 0x7E ,0x00, // A
0x7F, 0x49, 0x49, 0x49, 0x36 ,0x00, // B
0x3E, 0x41, 0x41, 0x41, 0x22 ,0x00, // C
0x7F, 0x41, 0x41, 0x22, 0x1C ,0x00, // D
0x7F, 0x49, 0x49, 0x49, 0x41 ,0x00, // E
0x7F, 0x09, 0x09, 0x09, 0x01 ,0x00, // F
0x3E, 0x41, 0x49, 0x49, 0x7A ,0x00, // G
0x7F, 0x08, 0x08, 0x08, 0x7F ,0x00, // H
0x00, 0x41, 0x7F, 0x41, 0x00 ,0x00, // I
0x20, 0x40, 0x41, 0x3F, 0x01 ,0x00, // J
0x7F, 0x08, 0x14, 0x22, 0x41 ,0x00, // K
0x7F, 0x40, 0x40, 0x40, 0x40 ,0x00, // L
0x7F, 0x02, 0x0C, 0x02, 0x7F ,0x00, // M
0x7F, 0x04, 0x08, 0x10, 0x7F ,0x00, // N
0x3E, 0x41, 0x41, 0x41, 0x3E ,0x00, // O
0x7F, 0x09, 0x09, 0x09, 0x06 ,0x00, // P
0x3E, 0x41, 0x51, 0x21, 0x5E ,0x00, // Q
0x7F, 0x09, 0x19, 0x29, 0x46 ,0x00, // R
0x46, 0x49, 0x49, 0x49, 0x31 ,0x00, // S
0x01, 0x01, 0x7F, 0x01, 0x01 ,0x00, // T
0x3F, 0x40, 0x40, 0x40, 0x3F ,0x00, // U
0x1F, 0x20, 0x40, 0x20, 0x1F ,0x00, // V
0x3F, 0x40, 0x38, 0x40, 0x3F ,0x00, // W
0x63, 0x14, 0x08, 0x14, 0x63 ,0x00, // X
0x07, 0x08, 0x70, 0x08, 0x07 ,0x00, // Y
0x61, 0x51, 0x49, 0x45, 0x43 ,0x00, // Z
0x00, 0x7F, 0x41, 0x41, 0x00 ,0x00, // [
0x55, 0x2A, 0x55, 0x2A, 0x55 ,0x00, // 55
0x00, 0x41, 0x41, 0x7F, 0x00 ,0x00, // ]
0x04, 0x02, 0x01, 0x02, 0x04 ,0x00, // ^
0x40, 0x40, 0x40, 0x40, 0x40 ,0x00, // _
0x00, 0x01, 0x02, 0x04, 0x00 ,0x00, // '
0x20, 0x54, 0x54, 0x54, 0x78 ,0x00, // a
0x7F, 0x48, 0x44, 0x44, 0x38 ,0x00, // b
0x38, 0x44, 0x44, 0x44, 0x20 ,0x00, // c
0x38, 0x44, 0x44, 0x48, 0x7F ,0x00, // d
0x38, 0x54, 0x54, 0x54, 0x18 ,0x00, // e
0x08, 0x7E, 0x09, 0x01, 0x02 ,0x00, // f
0x0C, 0x52, 0x52, 0x52, 0x3E ,0x00, // g
0x7F, 0x08, 0x04, 0x04, 0x78 ,0x00, // h
0x00, 0x44, 0x7D, 0x40, 0x00 ,0x00, // i
0x20, 0x40, 0x44, 0x3D, 0x00 ,0x00, // j
0x7F, 0x10, 0x28, 0x44, 0x00 ,0x00, // k
0x00, 0x41, 0x7F, 0x40, 0x00 ,0x00, // l
0x7C, 0x04, 0x18, 0x04, 0x78 ,0x00, // m
0x7C, 0x08, 0x04, 0x04, 0x78 ,0x00, // n
0x38, 0x44, 0x44, 0x44, 0x38 ,0x00, // o
0x7C, 0x14, 0x14, 0x14, 0x08 ,0x00, // p
0x08, 0x14, 0x14, 0x18, 0x7C ,0x00, // q
0x7C, 0x08, 0x04, 0x04, 0x08 ,0x00, // r
0x48, 0x54, 0x54, 0x54, 0x20 ,0x00, // s
0x04, 0x3F, 0x44, 0x40, 0x20 ,0x00, // t
0x3C, 0x40, 0x40, 0x20, 0x7C ,0x00, // u
0x1C, 0x20, 0x40, 0x20, 0x1C ,0x00, // v
0x3C, 0x40, 0x30, 0x40, 0x3C ,0x00, // w
0x44, 0x28, 0x10, 0x28, 0x44 ,0x00, // x
0x0C, 0x50, 0x50, 0x50, 0x3C ,0x00, // y
0x44, 0x64, 0x54, 0x4C, 0x44 , 0x00 // z

ونرجوا أ تبين لنا بمثال لكي تعمم الفائدة وهذا لا يستغرب منك يا أستاذ the lion


أخاكم في الله chaalali

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

chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:
قديم 02-12-2010, 12:46 PM المشاركة 27   
افتراضي chaalali


السلام عليكم والرحمة أرجوامن الأخ the lion
أما بعد

الموضوع الذي يشغلني التحكم الكامل في المتريس
يعني إنزل النص و العكس الوميض والكتب بأنوع مختلف في المترس وشكرا


وشكرا جزيل


Alprof
:: مهندس ::
تاريخ التسجيل: Jul 2010
المشاركات: 13
نشاط [ Alprof ]
قوة السمعة:
قديم 02-12-2010, 01:25 PM المشاركة 28   
افتراضي


ونرجوا أ تبين لنا بمثال لكي تعمم الفائدة وهذا لا يستغرب منك يا أستاذ the lion
السلام عليكم أخي الكريم
بعد إذن الأستاذ Lion
الجدول الذي تسأل عنه يحوي أشكال الحروف و الأرقام و الرموز
كما تعلم الماتريكس عباره عن مجموعه من الـ LED لذلك يضيئ
و ينطفئ بتغير الجهد أو ما نعرفه في البرمجه بالـ 0 و 1

كمثال
0x7E, 0x11, 0x11, 0x11, 0x7E ,0x00, // A
هذا الجزء من الجدول يحوي شكل الـ A في الماتركس
نقوم بتحويلها من Hexa إلى Binary لنرى الرسم بوضوح

0x7E=01111110
0x11=00010001
0x11=00010001
0x11=00010001
0x7E=01111110
0x00=00000000

الأن إذا أدرت رأسك سترى الحرف بوضوح
و ما يفعله بقيه البرنامج هو إستدعاء الحرف من المصفوفه

تحياتي


chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:
قديم 02-12-2010, 05:14 PM المشاركة 29   
sun chaalali


شكرا جزيل أخي الفاضل
نعم هذا التفسير منطقي و لكن المشكل في كيفة الربط بين الجدول وذالك الكود للأستاذ the lion


chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:
قديم 05-12-2010, 11:25 PM المشاركة 30   
افتراضي السلام عليكم


أخي الفاضل the lion

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

الأشياء ألتي لم أفهمه

([void write1(char num
{
;( d2b(num
( ++for(x=0;x<8;x
{
[ data1=[mx;
clk1 هذا السطر
}
; show1 هذا السطر

}

( [ while(mm[n
{
n++;
}


the lion
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
الدولة: egypt
المشاركات: 117
نشاط [ the lion ]
قوة السمعة:
قديم 06-12-2010, 08:23 PM المشاركة 31   
افتراضي


أخي الفاضل the lion

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

الأشياء ألتي لم أفهمه

([void write1(char num
{
;( d2b(num
( ++for(x=0;x<8;x
{
[ data1=[mx;
clk1 هذا السطر
}
; show1 هذا السطر

}

( [ while(mm[n
{
n++;
}
اخي الحبيب اعتذر عن تاخري في الرد علي استفسارك وذلك لانشغالي
clk1 في هذا الكود عباره عن ماكرو يقوم كومبايلر المايكروسي باستبدالها ووضع
portb.f4=0; portb.f4=1;
وهي تجعل البن رقم 4 في portb زيرو ثم تجعله 1 مما يعطي اشاره لمسجل الازاحه
لتخزين الداتا

اما
write1;
فهي ايضا ماكرو يقوم الكومبايلر باستبداله ب
portb.f2=0; portb.f2=1;
وهي تعطي نبضه لمسجله الازاحه لتقوم بعرض الداتا اللتي تم تخزيتها

ملحوظه
كود:
#define
هي احد الادوات المساعده في السي وتستخدم لاستبدال شيء بشىء اخر
مثال
كود:
#define pb portb
عند كتابه الجمله السابقه اعلي الكود فان الكومبايلر يقوم بالبحث بداخل الكوود كله عن pb ويقوم باستبدالها بportb
هذا يعني انك يمكن ان تكتب التعليمه portb=0
كالتالي
pb=0
والكومبايلر قبل عمل كومبايل سيقوم باستبدالها


chaalali
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2009
المشاركات: 72
نشاط [ chaalali ]
قوة السمعة:
قديم 06-12-2010, 11:24 PM المشاركة 32   
x4 السلام عليكم


شكرا جزيلا أخي الفاضل the lion وكل المشاركين

أخي the lion أرجوا أننا لم نطل عليك ونلهك عن إمتحانتك و أسأل من الله عز وجل

أن يوفقك فيها ولكن نريد شرح كامل للكود وهذا بعد إذنك لكي تعم الفائدة

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

وشكرا
:c offee:



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