تتبع الخطوات التالية :
1- نبدأ بتعريف المنفذ GPIO بالأسم السهل المستعار OUTPUT . وإعلان متغير عام "i" يستخدم كعداد لحلقات for .
كود:
#define OUTPUT GPIO
char i;
2- تحديد إعدادات سجلات ومنافذ الميكروكونترولر . يفضل إنشاء دالة تضم هذه الإعدادات بحيث يسهل تعديلها عند الرغبة , علاوة على تنظيم البرنامج بما يسهل تتبعه .
كود:
void init_port(void)
{
ANSEL = 0x00; //set port as digital I/O , not analog input
ADCON0 = 0x00; //shut off the A/D converter(default)
CMCON = 0x07; //shut off the comparator
VRCON = 0x00; //shut off the voltage reference(default)
TRISIO = 0x00; //all output
GPIO = 0x00; //make all pins low "0"
}
3- الأضاء المتحركة يمكن أن تاخذ نماذج متعددة مثل:
أ- الحركة جهة اليسار , أى إضاءة الليد بأقصى اليمين ثم الذى يليه جهة اليسار وهكذا . بالطبع يفضل وضع النموذج بدالة مستقلة كما يلى :
كود:
void move_left(void)
{
OUTPUT=1; delay_ms(250);// GP0 ON
OUTPUT=(1<<1); delay_ms(250);// GP1 ON
OUTPUT=(1<<2); delay_ms(250);// GP2 ON
//Note : GP3 : Input only
OUTPUT=(1<<4); delay_ms(250);// GP4 ON
OUTPUT=(1<<5); delay_ms(250);// GP5 ON
OUTPUT=0; delay_ms(250);// All OFF
}
العبارات الرئيسية المستخدمة مثل ((1<<4 , هذه العبارة هى مجرد أخد قيمة الواحد "1" وإزاحة البتات جهة اليسار أربع مرات بحيث يكون الرقم "4" هو نفسه موقع البت الرابعة . يتم ترقيم البتات فى البايت من "7" إلى "0" من جهة اليسار إلى جهة اليمين وحيث أن (1<<0)=1, (1<<1)=2, (1<<2)=4, (1<<3)=8 وهكذا , لذلك فإن ذلك يعطى طريقة سهلة لتحديد البت بشكل "منفرد" فى البايت كما أن ذلك سهل القراءة أيضا . إذا أردت تحديد البت الخامسة "5" يمكنك كتابة GPIO = 32; ( أو 0x20 بالسداسى عشر) , ولكن GPIO = (1<<5) أسهل بكثير فى القراءة . GPIO = (1<<5) .
4- نكرر الخطوة السابقة لنموذج آخر , وليكن الحركة جهة اليمين كما يلى :
كود:
void move_right(void)
{
OUTPUT=(1<<5); delay_ms(250);// GP5 ON
OUTPUT=(1<<4); delay_ms(250);// GP4 ON
//Note : GP3 : Input only
OUTPUT=(1<<2); delay_ms(250);// GP2 ON
OUTPUT=(1<<1); delay_ms(250);// GP1 ON
OUTPUT=1; delay_ms(250);// GP0 ON
OUTPUT=0; delay_ms(250);// All OFF
}
وكذلك لنموذج وميض جميع الليدات :
كود:
void blink_all()
{
OUTPUT=0x37; delay_ms(250);//ALL ON
OUTPUT=0x00; delay_ms(250);//ALL OFF
}
5- الآن انتهت جميع المكونات الرئيسية للبرنامج وجاء وقت الدخول إلى الدالة الرئيسية وتحديد الشكل المطلوب وعدد مرات تكرارة عن طريق اختيار الدوال المناسبة , وهنا مثال لذلك ولكن يمكنك إجراء التعديلات المناسبة :
كود:
void main()
{
init_port();
while(1)
{
for(i=0;i<5;i++)
{
move_left();
move_right();
}
for(i=0;i<5;i++)
{
blink_all();
}
}
}
البرنامج :