مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :
مبدأ برمجة سجل الإزاحة 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” حيث يتم تطبيق نبضة الساعة التالية فيدخل الصفر أول ذاكرة (ويظهر على المخرج الأول ليفصل مسح الصف الأول) ، ويقوم بدفع الواحد الموجود سابقا إلى الذاكرة الثانية ، ليظهر على المخرج الثانى ، وتكون النتيجة هى إزاحة النبضة المرتفعة إلى المخرج الثانى الذى يستخدم فى مسح الصف الثانى فقط . وتستكمل الدورة كما سبق .
• تتكرر الدورات حتى يتم عرض جميع بيانات العرف
البرنامج :
سوف نتقدم خطوة إلى الأمام ، ونستخدم سجل الإزاحة 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
}
}
مواضيع مماثلة
» تقنيات عرض الرسائل والإعلانات على شاشات الليد ماتريكس مع المترجم CCS C والمترجم ميكروسى برو: مقدمة : مبدأ عمل شاشة العرض LED dot matrix :
» الليد ماتريكس LED MATRIX علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CCS C :
» بداية ممارسة برمجة الليد ماتريكس بشكل احترافى
» كيفية البدء فى عمل شاشة ليد ماتريكس ناجحة والبرمجة بلغة السى مع المترجم ميكروسى برو :
» تدريبات ومشاريع الأردوينو Arduino Tutorials and Projects
» الليد ماتريكس LED MATRIX علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CCS C :
» بداية ممارسة برمجة الليد ماتريكس بشكل احترافى
» كيفية البدء فى عمل شاشة ليد ماتريكس ناجحة والبرمجة بلغة السى مع المترجم ميكروسى برو :
» تدريبات ومشاريع الأردوينو Arduino Tutorials and Projects
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى