PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تابلو تعویض بازیکن



5aztv8
07-08-2008, 15:01
سلام

من میخام یه تابلو مثل تابلو های تعیض بازکنان فوتبالو بسازم . شناتیک مدار تو لینک زیره ولی برنامرو که مینویسم 7448 نمیتونه روی سگمنتهانشون بده
من اومدم باتون های b1 و b2 رو گذاشم برای افزایش و کاهش s1 و s2 و...


کسی آموزشی درمورد اتصال سون سگمنت به avr داره؟؟؟من برنامرو دارم با C مینوسم




You can see links before reply

kavir
07-08-2008, 15:28
سلام
You can see links before reply

1nafar
08-08-2008, 13:57
سلام
من به زبان C خیلی وارد نیستم اما اگه با بیسیک خواستی من در خدمتم
چند تا لینک پایین تر من اصول کار 7سگمنت رو گفتم (به زبان بیسیک)

5aztv8
08-08-2008, 14:15
اینکه ورژن 2ش با بیسیک نوشته شده :x

آقا کسی نیست اصول اتصال و برنامه نویسی سون سگمنت یه avr رو بگه :x البته با زبان C

kavir
08-08-2008, 15:06
سلام
اول نوع سون سگمنت رو کد های اون رو در بیار مثلا برای اتصال یک سون سگمنت تکی به میکرو پایه های(a,b,c,d,e,f,g ) وصل میکرو کن یعنی ابتدا کد ها رو در بیار بدین صورت که این پایه هایی که گفتم وصل یک پورت کن و دیتا روی اون بفرست مثلا برای عدد یک که پایه ها وصل پورت b باشه portb=0x0a برای مثال گفتم
بعدش اگه خواستید به صورت مالتی پلکس وصل کنید باید ابتدا پایه های مشترک رو وصل میکرو کنید البته به کمک یک ترانزیستور که برای کار بااون ابتدا پایه مشترک سون سگمنت اول رو فعال کنید بعدش دیتا رو روی پورتی که پایه هایی که بالا گفتم وصل کردید بفرستید (در ضمن تمای پایه های a,c,c,d,e,f,g به هم وصل می شوند) بعد از مدت زمان تاخیر مثلا 4 میلی ثانیه سون سگمنت دوم را فعال کنید بدین صورت که مانند حالت قبل پایه مشترک را فعال کنید و دیتا رو روی آن بفرستید
و از تاخیر استفاده کنید و به همین صورت در ضمن برای نمایش باید توی یک حلقه باشه دلیل تاخیر هم اینه که با استفاده از خطای چشم می تونید به صورت مالتی پلکس استفاده کنید
نکته اینکه اگه یک عدد مثل 1234 خواستید نشان بدید باید با تقسیم متوالی عدد ها رو جدا کنید و به صورت تک به تک نشون بدید
مثال زیر برای wina avr هست ولی مثل همین در CV هم استفاده کنید به جای تاخیر از تاخیر خود CV استفاده کنید
این یک تابع Disp داره که شما همونطور که گفتم عددی که می خواین رو سون سگمنت نشون بدید رو جدا کنید و مثل تابع زیر عمل کنید
اگه مثال CV هم می خواید بگید تا براتون بذارم

[align=left:f02c15db75][code]-----------------------------------------------------------------*/
#include<avr>

/*----------------------------------------------------------------
-------------CONNECTION BETWEEN 7 segment AND ATMEGA32-----------
-----------------------------------------------------------------*/
#define DATA_DDR DDRC
#define DATA_PORT PORTC
#define Pin_a 0
#define Pin_b 1
#define Pin_c 2
#define Pin_d 3
#define Pin_e 4
#define Pin_f 5
#define Pin_g 6
#define Pin_Dec 7
#define DATA_MASK 0XFF




/*----------------------------------------------------------------
-----------------FUNCTIONS---------------------------------------
-----------------------------------------------------------------*/
void Init_Ports(void);
void Display(int a);
void delay_ms(unsigned char time_ms);



/*----------------------------------------------------------------
-----------------FUNCTIONS TO INITIALIZE PORTS--------------------
-----------------------------------------------------------------*/
void Init_Ports(void)

{
DATA_DDR = DATA_MASK; //for setting data pin's for output
}

/*----------------------------------------------------------------
-----------------FUNCTIONS TO DISPLAY VALUES----------------------
-----------------------------------------------------------------*/
void Display(int a)
{
switch(a)
{
case 0:
DATA_PORT|=_BV(Pin_g);
DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_b)|_BV(Pin_c)|_BV(Pin_d)|_BV (Pin_e)|_BV(Pin_f));
break;

case 1:

DATA_PORT|=(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e)|_BV(P in_f)|_BV(Pin_g));
DATA_PORT&=~(_BV(Pin_b)|_BV(Pin_c));
break;

case 2:


DATA_PORT|=(_BV(Pin_c)|_BV(Pin_f));
DATA_PORT&=~(_BV(Pin_b)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_a)|_BV (Pin_g));
break;


case 3:
DATA_PORT|=(_BV(Pin_e)|_BV(Pin_f));
DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_a)|_BV(Pin_b)|_BV (Pin_g));
break;


case 4:
DATA_PORT|=(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e));
DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_b)|_BV(Pin_f)|_BV(Pin_g));
break;

case 5:
DATA_PORT|=(_BV(Pin_b)|_BV(Pin_e));
DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_f)|_BV (Pin_g));
break;

case 6:
DATA_PORT|=(_BV(Pin_a)|_BV(Pin_b));
DATA_PORT&=~(_BV(Pin_c)|_BV(Pin_d)|_BV(Pin_f)|_BV(Pin_g)|_BV (Pin_e));
break;

case 7:
DATA_PORT|=(_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_f)|_BV(P in_g));
DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_b));
break;

case 8:
DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_d)|_BV(Pin_e)|_BV(Pin_c)|_BV (Pin_b)|_BV(Pin_f)|_BV(Pin_g));
break;

case 9:
DATA_PORT|=(_BV(Pin_d)|_BV(Pin_e));
DATA_PORT&=~(_BV(Pin_a)|_BV(Pin_c)|_BV(Pin_b)|_BV(Pin_f)|_BV (Pin_g));
break;

}}

/*----------------------------------------------------------------
--------FUNCTION TO GENERATE DELAY IN MILLISECONDS----------------
-----------------------------------------------------------------*/
void delay_ms(unsigned char time_ms)
{
unsigned short delay_count = F_CPU / 400;

unsigned short cnt;
asm volatile ("\n"
"L_dl1%=:\n\t"
"mov %A0, %A2\n\t"
"mov %B0, %B2\n"
"L_dl2%=:\n\t"
"sbiw %A0, 1\n\t"
"brne L_dl2%=\n\t"
"dec %1\n\t" "brne L_dl1%=\n\t":"=&w" (cnt)
:"r"(time_ms), "r"((unsigned short) (delay_count))
);
}[/align:f02c15db75]