منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 29-08-2015, 01:59 AM المشاركة 17   
افتراضي خطوة متقدمة : استخدام مسجل الإزاحة 74595 فى عملية انتخاب الأعمدة وفى إرسال بيانات الص



خطوة متقدمة : استخدام مسجل الإزاحة 74595 فى عملية انتخاب الأعمدة وفى إرسال بيانات الصفوف :
باتباع نفس النهج السابق ، ومع معرفة خصائص مسجل الإزاحة 74595 والفرق بينه ومسجل الأزاحة يمكننا البدء فى إنشاء شاشة ليد ماتريكس 8X8 قابلة للتوسعة ، فقط بزيادة عدد عناصر مصفوفة المخزن المؤقت كما يلى :

كود:
 #include "font.h"
//===================
#define  LOW 0
#define  HIGH 1
//====================
#define  DATA_columns PORTA.F0
#define  CLK_columns  PORTA.F1
#define  LAT_columns  PORTA.F2
//================================
#define  DATA_rows  PORTB.F0
#define  CLK_rows   PORTB.F1
#define  LAT_rows   PORTB.F2
//=================================
#define rows_clock CLK_rows=HIGH; CLK_rows=LOW;
#define rows_latch LAT_rows=HIGH; LAT_rows=LOW;
//================================
#define columns_clock CLK_columns=LOW; CLK_columns=HIGH;
#define columns_latch LAT_columns=LOW; LAT_columns=HIGH;
//===========================
#define NC 8 // Numbers of display columns
//==================================
unsigned char message[]="PIC " ; // define string array , as you wish , depends on memory
//==========================
unsigned char buffer[NC];
//===============================
void clear_buffer();
void display_buffer(unsigned char scroll_speed);
void send_data(unsigned char byte_data);
void print_message(unsigned char speed);
//=======================
void main()
{
  CMCON=7;
  TRISA=0;
  TRISB=0;
  while(1)
  {

    print_message(50);

  }
}
 //========================
 void clear_buffer()
 {
  unsigned char i;
  for(i=0;i<NC;i++)
   {
     buffer[i]=0;
   }
 }
 //=========================
 //send byte data serially bit by bit to rows via rows shift register
 void send_data(unsigned char byte_data)
 {
 unsigned char i;
  for(i=0;i<8;i++)
      {
          DATA_rows=byte_data&1;
          rows_clock;
          byte_data=byte_data>>1 ;
     }
   rows_latch;
 }
//===============================
void display_buffer(unsigned char scroll_speed)
 {
unsigned char i,j;
   for(i=0;i<scroll_speed;i++)//display one frame speed times
     {
        DATA_columns=HIGH; columns_clock; columns_latch; //only for first column to put 1
                for(j=0;j<NC;j++)
        {
         send_data(~buffer[j]);
         delay_ms(1);
         DATA_columns=LOW; columns_clock; columns_latch; // for other columns
         send_data(0xFF);
        }
     }
 }
 //===============================
void print_message(char speed)
  {
  unsigned char index,new_index,number_of_characters,update,character,i;

        //=====clear buffer==================
        clear_buffer();
        //=======================
        number_of_characters = strlen(message);
        //=============================

   for(character=0;character<number_of_characters;character++)
     {
      index=message[character]-32;
      index=index*5;
          //==========================
      for(new_index=index;new_index<index+5;new_index++)
          {

                        //=======shift=============

            for(i=0;i<NC;i++)
                 {
                  buffer[i]=buffer[i+1];
                 }
                                 //----------transfer------------
              buffer[NC-1]=font[new_index];//Last element
                          //====display===========

            display_buffer(speed);
          }
     }
         //==============================
 }
//=====================


اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 29-08-2015, 02:36 AM المشاركة 18   
افتراضي


مثال لشاشة ليد ماتريكس مكونة من 4 وحدات 8X8 :

كود:
 #include "font.h"
//===================
#define  LOW 0
#define  HIGH 1
//====================
#define  DATA_columns PORTA.F0
#define  CLK_columns  PORTA.F1
#define  LAT_columns  PORTA.F2
//================================
#define  DATA_rows  PORTB.F0
#define  CLK_rows   PORTB.F1
#define  LAT_rows   PORTB.F2
//=================================
#define rows_clock CLK_rows=HIGH; CLK_rows=LOW;
#define rows_latch LAT_rows=HIGH; LAT_rows=LOW;
//================================
#define columns_clock CLK_columns=LOW; CLK_columns=HIGH;
#define columns_latch LAT_columns=LOW; LAT_columns=HIGH;
//===========================
#define NC 32 // Numbers of display columns
//==================================
unsigned char message[]="PIC MICRO " ; // define string array , as you wish , depends on memory
//==========================
unsigned char buffer[NC];
//===============================
void clear_buffer();
void display_buffer(unsigned char scroll_speed);
void send_data(unsigned char byte_data);
void print_message(unsigned char speed);
//=======================
void main()
{
  CMCON=7;
  TRISA=0;
  TRISB=0;
  while(1)
  {

    print_message(5);

  }
}
 //========================
 void clear_buffer()
 {
  unsigned char i;
  for(i=0;i<NC;i++)
   {
     buffer[i]=0;
   }
 }
 //=========================
 //send byte data serially bit by bit to rows via rows shift register
 void send_data(unsigned char byte_data)
 {
 unsigned char i;
  for(i=0;i<8;i++)
      {
          DATA_rows=byte_data&1;
          rows_clock;
          byte_data=byte_data>>1 ;
     }
   rows_latch;
 }
//===============================
void display_buffer(unsigned char scroll_speed)
 {
unsigned char i,j;
   for(i=0;i<scroll_speed;i++)//display one frame speed times
     {
        DATA_columns=HIGH; columns_clock; columns_latch; //only for first column to put 1
                for(j=0;j<NC;j++)
        {
         send_data(~buffer[j]);
         delay_ms(1);
         DATA_columns=LOW; columns_clock; columns_latch; // for other columns
         send_data(0xFF);
        }
     }
 }
 //===============================
void print_message(char speed)
  {
  unsigned char index,new_index,number_of_characters,update,character,i;

        //=====clear buffer==================
        clear_buffer();
        //=======================
        number_of_characters = strlen(message);
        //=============================

   for(character=0;character<number_of_characters;character++)
     {
      index=message[character]-32;
      index=index*5;
          //==========================
      for(new_index=index;new_index<index+5;new_index++)
          {

                        //=======shift=============

            for(i=0;i<NC;i++)
                 {
                  buffer[i]=buffer[i+1];
                 }
                                 //----------transfer------------
              buffer[NC-1]=font[new_index];//Last element
                          //====display===========

            display_buffer(speed);
          }
     }
         //==============================
 }
//=====================

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

الصورة الرمزية fathi-mohmed
fathi-mohmed
:: مهندس متميز ::
تاريخ التسجيل: Aug 2010
الدولة: القاهرة
المشاركات: 513
نشاط [ fathi-mohmed ]
قوة السمعة:
قديم 29-08-2015, 07:35 AM المشاركة 19   
افتراضي


شكرا لك اخي فتح الله
متميز دائما
جزاك الله عنا خيرا


asdasd123456
:: مهندس ::
تاريخ التسجيل: Feb 2012
الدولة: القاهرة
المشاركات: 8
نشاط [ asdasd123456 ]
قوة السمعة:
قديم 26-09-2015, 09:34 AM المشاركة 20   
افتراضي


انا كنت عاوز اعمل نفس الفكرة دية بس على عدد اكبر من الليدات
مثلا عرض 300 ليد و طول 80/100 ليد
عاوز اعرف ازاى اقدر اتحكم فيهم كلهم
كل ليد لوحدها باسهل طريقة
ممكن مساعدة ؟؟؟



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