سلام عليكم
اليكم طريقة زيادة عدد الاخراج وكيفية تحكم باي بت بسهولة
في مثال المرفق برنامج مكتوب بلغة مايكروسي استخدمت اسي رقمها 74hc595
وهذه اسي تعمل كتالي
تمثل ds البيانات وهية اما صفر او واحد
SH_CP: البيانات يتم خزنها داخل اسي بعد عمل تزحيف لها ولكن لاتظهر على الاخراج
ST_CP اظهار البيانات على الاطراف اسي
يتم ارسال البيانات من اخير الى الاول لتظهر بشكل صحيح اي ان الاخير يصبح اولا وهكذا وسبب في ذلك هو ان اسي تعمل تشفيت للبيانات
Q7'=Q7
نعطي نبضة اي
SH_ CP=0; SH_CP=1;
ولاظهار البيانات نعطي نبضة
ST-CP=0; ST-CP=1;
والان نرجع للمثال
تمثل نضغط على الارقام من 0 الى 7 لتشغيل اي حمل وحمل هنا هو led بعدها اذا ضغطنا على رمز = يعني انتر يتم تشغيل جزء مراد تشغيلة واذا ضغطنا على رمز on/c اطفاء جزء مراد اطفاءة
وبنفس طريقة ممكن اضافة اسي اخر ليزيد عدد الاخراج الى 16 او مضاعفات 8 وبالطبع
يتم ربط اسي جديد بشكل التالي
Ds مع Q7'
SH_CP لاسي الاول مع SH_CP مع اسي الثاني وكذلك
ST_CP لاسي الاول مع ST_CP مع اسي الثاني
اما reset لاسي جديد فيتم ربطه مع البطارية
ملاحظة لاطفاء اسي نعطي نبضة التالية
Reset=0; reset=1;
Store=0; store=1;
طبعا بعد تعريف Reset و Store كما موضح بالمثال لاحظ تعريفات المتغيرات في بداية البرنامج
نستنتج من هذه الاسي التالي
عدد الادخال =3 وعدد الاخراج هو nx8 وn هو عدد الاسيات
ملاحظة
هناك اسي مشابة الاسي 74hc595 وهو 74hc165 وهو مخصص لزيادة عدد الإدخالات
اي هنا عدد الإدخالات = nx8 وعدد الاخراج =3 فقط
كود:
#define shift porta.f0
#define dir_shift trisa.f0
#define ds porta.f1
#define dir_ds trisa.f1
#define store porta.f2
#define dir_store trisa.f2
#define reset porta.f3
#define dir_reset trisa.f3
#define is ==
#define input 1
#define output 0
//=============================================================
char my_data[8], x=0 , kp=0 , num=0;
char keypadPort at PORTb;
void keypad1();
void ic_74hc595();
//==============================================================================
void pic_init()
{
Keypad_Init();
dir_shift = dir_ds=dir_reset=dir_store=output;
store=shift=reset=1;
ds=0;
}
void main()
{
pic_init();
while(1){
keypad1();
ic_74hc595();
}
}
void keypad1()
{
kp=0;num=22;
while(1){
while( kp is 0) kp= Keypad_Key_Click();
if ( kp is 1) num=7;
else if(kp is 2) num=4;
else if(kp is 3) num=1;
else if(kp is 4) kp=20;
else if(kp is 5) num=8;
else if(kp is 6) num=5;
else if(kp is 7) num=2;
else if(kp is 8) num=0;
else if(kp is 9) num=9;
else if(kp is 10) num=6;
else if(kp is 11) num=3;
else if(kp is 12) kp=12;
else if(kp is 16) kp=16;
else kp=255;
if( kp !=255){
if( kp is 12) {my_data[num]=1;return;}
if( kp is 20) {my_data[num]=0;return;}
if( kp is 16) { for(x=0;x<8;x++)my_data[x]=0;
return;
}
}
kp=0;
}
}
void ic_74hc595()
{
for(x=7;x>=0 && x!=255;x--)
{
if(my_data[x] is 1) ds=1;
else ds=0;
shift=0; shift=1;
}
store=0; store=1;
return;
}
ولتحميل مثال
http://arabsh.com/files/0d3e474e64f6...اخراج-rar.html