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

أدوات الموضوع

merzouk_rdz
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2014
الدولة: Algeria
المشاركات: 56
نشاط [ merzouk_rdz ]
قوة السمعة:0
قديم 12-11-2018, 04:54 PM المشاركة 1   
ha طلب مساعدة لشرح جزء من الكود Twitter FaceBook Google+



تحياتتي لجميع المشاركين.

كود:
//Define Matrix Character Information as 8 byte array
//#include "font.h"
char row_select[8]={1,2,4,8,16,32,64,128};
char i ;
//===============================
void SH_OUT(unsigned char d)
{
short j;
for(j=0;j<8;j++) // Shift out 8 bits
{
PORTC.B0= d & 1 ; // test least significant bit if its 1 --data
PORTC.B1=1;PORTC.B1=0; // clock
d=d >> 1; // shift bits to right by 1 to get next bit
}
}
//=========================================
 void main ()
{
TRISB=0;
TRISC=0;
PORTB=0;
PORTC=0;
  while(1)
  {
   for(i=0 ; i<8 ; i++)
   {
   PORTB=row_select[i]; //select row as array element
   SH_OUT(~font['t'-32][i]); // shift out character as 8 byte ,8-bit each
   PORTC.B2=1;PORTC.B2=0; // Pulse the latch pin ---store
   delay_ms(5); // short delay
  }
  }
}
هاذان الجزءان من الكود لم أفمهما رغم عدة محاولات، اطلب من ذي خبرة أن يعطي لي فكرة.
PORTC.B0= d & 1
المشكل كما أعرف أن PORTC.B0 هو بيت واحد فقط ، كيف يمكن وضع عدة بتات في بيت واحد
كذلك الدالة void SH_OUT(unsigned char d)
ولكم جزيل الشكر


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 13-11-2018 الساعة 04:51 AM السبب: إدراج تنسيق "كود" لتسهيل القراءة
اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 13-11-2018, 04:56 AM المشاركة 2   
افتراضي


تحياتتي لجميع المشاركين.

كود:
//===============================
void SH_OUT(unsigned char d)
{
short j;
for(j=0;j<8;j++) // Shift out 8 bits
{
PORTC.B0= d & 1 ; // test least significant bit if its 1 --data
PORTC.B1=1;PORTC.B1=0; // clock
d=d >> 1; // shift bits to right by 1 to get next bit
}
}
//=========================================
 void main ()
{
TRISB=0;
TRISC=0;
PORTB=0;
PORTC=0;
  while(1)
  {
   for(i=0 ; i<8 ; i++)
   {
   PORTB=row_select[i]; //select row as array element
   SH_OUT(~font['t'-32][i]); // shift out character as 8 byte ,8-bit each
   PORTC.B2=1;PORTC.B2=0; // Pulse the latch pin ---store
   delay_ms(5); // short delay
  }
  }
}
هاذان الجزءان من الكود لم أفمهما رغم عدة محاولات، اطلب من ذي خبرة أن يعطي لي فكرة.
PORTC.B0= d & 1
المشكل كما أعرف أن PORTC.B0 هو بيت واحد فقط ، كيف يمكن وضع عدة بتات في بيت واحد
انت تقول بايت AND واحد أى أن النتيجب ستكون إما صفر أو واحد وهذا بت واحدة
معك حق فى الإرتباك لأن أى لغة أخرى ستعطى رسالة خطأ مفادها أن حجم المتغيرين غير متساوى لكن لغة C تقبل
كذلك الدالة void SH_OUT(unsigned char d)
ولكم جزيل الشكر
أظن الدالة أصبحت مفهومة الآن لأن الباقى مجرد دورة 8 مرات لإخراج باقى البت

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

merzouk_rdz
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2014
الدولة: Algeria
المشاركات: 56
نشاط [ merzouk_rdz ]
قوة السمعة:0
قديم 13-11-2018, 06:29 AM المشاركة 3   
افتراضي


شكرا لك الأخ ماجد على هذا التوضيح، بدأت الأمور تتضح اكثر،


الصورة الرمزية Rwad_Abujazia
Rwad_Abujazia
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2016
الدولة: Libya
المشاركات: 62
نشاط [ Rwad_Abujazia ]
قوة السمعة:0
قديم 20-11-2018, 11:20 AM المشاركة 4   
افتراضي


//Define Matrix Character Information as 8 byte array
//#include "font.h"اضافة مكتبة للبرنامج
char row_select[8]={1,2,4,8,16,32,64,128}; تعريف مصفوفة من النوع حرف
char i ;تعريف متغير من حرف
//===============================
void SH_OUT(unsigned char d) دالة اخراج باستخدام الازاحة
{
short j;
for(j=0;j<8;j++) // Shift out 8 bits حلقة تكرارية
{
PORTC.B0= d & 1 ; التاكدمن من قيمة المتغير هل هو صفر ام واحد واخراج القيمة على الرجل بي 0
PORTC.B1=1;
اعتقد ام من المفروض وضع تأخير زمني هنا تى يتم ملاحظة الخرج
PORTC.B1=0; // clock
d=d >> 1; ازاحة نحو اليمبن بمقدار واحد}
}
//=========================================
void main ()
{
TRISB=0; تعين البورت بي كخرج
TRISC=0; تعين البورت سي كخرج
PORTB=0; تصفير البورت بي
PORTC=0; تصفير البورت سي
while(1) حلقة غير منتهيى
{
for(i=0 ; i<8 ; i++) حقلة من 8 دورات
{
PORTB=row_select[i]; اخراج قيمة العنصر المقابل للمتغير على المنفذ بي
SH_OUT(~font['t'-32][i]); // shift out character as 8 byte ,8-bit each
PORTC.B2=1; اخرج 5 فولث على البورت سي 2
اعتقد من المفروض وضع تأخير زمني هنا
PORTC.B2=0; تصفير البورت سي 2
delay_ms(5); // short delay تأخير زمني 5 ملي ثانية
}
}
}
هذا الذي اعرفه والله اعلم


merzouk_rdz
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2014
الدولة: Algeria
المشاركات: 56
نشاط [ merzouk_rdz ]
قوة السمعة:0
قديم 21-11-2018, 07:48 PM المشاركة 5   
افتراضي


شكرا لك الأخ Rwad _Abujasia على هذا الشرح ، أصبح كل شيئ واضح

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025