مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :

مُساهمة من طرف Admin في الخميس مايو 21, 2015 11:12 pm

مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C  :



سوف نتقدم خطوة إلى الأمام ، ونستخدم سجل الإزاحة 74164 فى عملية المسح ، ولتقليل عدد الأطراف المستخدمة من الميكروكونترولر ، فبدلا من استخدام 8 أطراف للمسح سوف نستخدمين طرفين فقط هما طرف البيانات التسلسلية وطرف الساعة .
كل ما تحتاجة لبرمجة سجل الإزاحة للقيام بعملية المسح :



• تطبيق نبضة تنتقل من الحالة المنخفضة إلى الحالة المرتفعة output_high(data_pin)) على طرف الدخل التسلسلى ، وتنتظر هناك لحين وصول نبضة الساعة .
• إنشاء حلقة for للتكرار 8 مرات : فى المرة الأول نبدأ بتطبيق  نبضة ساعة مرتفعة على طرف الساعة output_high(clock_pin) ، هذه النبضة تؤدى إلى دخول نبضة البيانات المرتفعة إلى أول ذاكرة بمسجل الإزاحة فتبقى هناك كما أنها سوف تظهر على الخرج الأول لتشكل نبضة اختيار الصف الأول ، ومن ثم يلى ذلك إرسال أول بايت من بيانات العرض A[0] إلى المنفذ PORTB بكامله ثم تأخير قليل ليستقر العرض ، بعد ذلك يتم إزالة نبضة الساعة بتطبيق الحالة المنخفضة output_low(clock_pin)  ثم بعدها إزالة نبضة البيانات بتطبيق الحالة المنخفضة output_low(data_pin) .
• فى التكرار التالى يكون طرف البيانات داخل الحلقة فى الحالة المنخفضة “0” حيث يتم تطبيق نبضة الساعة التالية فيدخل الصفر أول ذاكرة (ويظهر على المخرج الأول ليفصل مسح الصف الأول) ، ويقوم بدفع الواحد الموجود سابقا إلى الذاكرة الثانية ، ليظهر على المخرج الثانى ، وتكون النتيجة هى إزاحة النبضة المرتفعة إلى المخرج الثانى الذى يستخدم فى مسح الصف الثانى فقط . وتستكمل الدورة كما سبق .
• تتكرر الدورات حتى يتم عرض جميع بيانات العرف
         



البرنامج :


الكود:


#include <16F877A.h>
#use delay(clock=4000000)

#define clock_pin pin_d0
#define data_pin pin_d1
 
unsigned int8 i,j,n,
A[11]={0xFF,0xC0,0x80,0x77,0x77,0x80,0xC0,0xFF,0xFF,0xFF,0xFF},// increase 3 spaces at the end of an array
A_copy[11];
 
void main()
{
    
    while(true)
    {
        //1- Initially display the fixed photo data "A"  , frame
      for(n=0;n<=25;n++) //Repeat 25 times to obtain steady display , speed of display
       {
            output_high(data_pin);// using 74164 for scanning selection , we need only one high pulse and shift it to select rows (or columns) at clock pulses
            
         /////////////////////////////////////////////////////////////
         for(i=0;i<=7;i++) //Repeat 8 times for first 8 elements of array A[11] , as for fixed photo on 8x8 led matrix ,fram
            {    
                output_high(clock_pin); //1-clock pulse , low to high and data high will give  high to Q0 , Q1 , .....Q7 to select rows
               output_b(A[i]);//2-send one byte of data to columns
               delay_ms(1); // very short delay
                output_low(clock_pin); // clock low to be ready for next loop    
                output_low(data_pin); //we need only one high pulse and shift it to select rows so we must reset data after first loop
            }
         /////////////////////////////////////////////////////////
        }
      //end of display fixed frame
      
     //2-Shift data
      //a- Copy : Array A , 11 element
              for(j=0;j<=10;j++)  // Repeat 11 times
        {
            A_copy[j]=A[j]; // copy 11 elements from A[] to A_copy[] , the 2 arrays have  same elements
        }
      //b-Shift part1
        for(j=0;j<=9;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] (shift-left) ,A[1]=A_copy[2],.....A[9]=A_copy[10] , now array A[] has shifted data Except A[10] , so :  
        }
      //c-shift part2
        A[10]=A_copy[0];  //copy first element of A_copy[] to last element of A[] , shift it
        //at the next loop display shifts one position-left  
  
    }
}


Admin
Admin

عدد المساهمات : 985
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى