 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: 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);
}
}
//==============================
}
//=====================

|