السلام عليكم
اخي حسن قمت بالتغيير الذي اشرت علي به وهو
كود:
for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
الا انه تم إطفاء الشاشات تماما
وحين رجعت للقيمة الأولي وهي
كود:
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
تضئ الشاشات وتكتب 888888
اريد شرح هذه الأسطر وفائدتهم في البرنامج
كود:
#define Check_bit(var,pos) var&(1<<pos)
#define on 1
#define off 0
اين اجد تعرف هذه الجملة وما وظائفها ...
اشكرك اخي الحبيب علي مجهودك معي بارك الله لك
|
السلام عليكم
بالنسبه للجمله
هي في كود التالي
كود:
void display_7seg()
{
char y;
GIE_bit=0;
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
for(x=0;x<8;x++) // ???? ????? ????? ???? ???? ??? ???? ?? ????
{
if(Check_bit(segbit[7-colomn],7-x))ds1=1;
else DS1=0;
SH1=0;SH1=1;
}
for(x=0;x<8;x++) //
{
if(Check_bit(segment[num[colomn]],7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
ST1=1; ST1=0;
colomn++;
if(colomn==6)colomn=0;
GIE_bit=1;
}
مهمتها أيقاف تفعيل الانتربت لان GIE_bit هو بت في ريجيستر intcon مهمته تفعيل او عدم تفعيل الانتربت
وانا جعلت
لكي يتم تنفيذ اوامر موجوده في داله display_7seg()
==========================================
اما
كود:
#define Check_bit(var,pos) var&(1<<pos)
فهي مايكرو جاهزه مهمتها انها تعمل فحص للبت فهل هو 1 ام 0
كيف تعمل ؟
حيث تم تعريف (Check_bit(var,pos بـــ (var&(1<<pos اي ان مايكرو عندما يشوف (Check_bit(var,pos فأنه سيعوض مكانها (var&(1<<pos وهذه خاصيه #define
الان var تعني متغير او بورت يعني حجمه 1 بايت اما pos يعني رقم البت المراد فحصه
مثلا اريد شوف بت رقم 4 من بورت B هل هو يساوي 1 ام 0
الان تصبح العمليه هكذا (portb &(1<<4
يعني نشفت 1 اربع مرات بأتجاه اليسار
(portb &(00001000 الان كما ترى راح يتم عمل and
بين 00001000 مع بورت B وبتالي نتيجه تعتمد على حاله بت رقم 4 في بورت B فأذا كان =1 فأن نتيجه (portb &(00001000 لا تساوي 0 يعني هنا راح
= 00001000
اما أذا كان بت رقم 4 من بورت B يساوي 0 فأن النتيجه (portb &(00001000 تساوي 0
أتمنى وصلت فكره
يعني هذه الداله تسمى مايكرو وهي جاهزه
وهناك مايكرو أخرى مثل عمل set لاي بت ا
كود:
#define set_bit(var,pos) (var|=(1<<pos) )
واخرى لعمل تصفير لاي بت
كود:
#define clear_bit(var,pos) ( var&=~(1<<pos) )
وأخرى لعمل toggle لاي بت
كود:
#define toggle_bit(var,pos) (var^=(1<<pos) )
طبعا هذه تعريفات لقد تعلمناها من أستاذ الفاضل أحمد سمير فايد جزاءه الله خير
تحياتي