سلام - دستور زیر که معمولا در تابلوروان استفاده میشه به زبان سی چطوری میشه :
به عنوان مثال : Rotate Scan ,Left,1
سلام - دستور زیر که معمولا در تابلوروان استفاده میشه به زبان سی چطوری میشه :
به عنوان مثال : Rotate Scan ,Left,1
سلام
اینجوری نمیشه مهندس ، شما دقیق بگو چه کار میخوایی انجام بدی.
توی زبان c وجود ارایه های دو بعدی کار رو راحت کرده . اگه میخوایید از این دستور توی تابلو روان استفاده کنید ، بهترین حالت استفاده از ارایه ها هست
سلام
جناب 1Nafar این سوال تا حالا بارها و بارها پیش اومده ، و منظور این دوستمون هم برای تابلو روان هست ، لطف کنید و بگید که دقیقا چطور میشه با آرایه های دو بعدی عملی شبیه به دستور Rotate رو انجام داد.
.
سلام خدمت شما و آقای 1nafar :
منظور من از این دستور استفاده در تابلوروان است به عنوان مثال میخوام برنامه زیر رو به زبان سی بنویسم اگه ممکنه در تبدیل این برنامه به زبان سی کمک کنید چون این سوال خیلی از دوستانی است که با تابلو روان کار می کنند .:
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Config Portc = Output
Config Portd = Output
Dim Scan As Byte
Dim Refresh As Byte
Dim Index As Byte
Dim S As Byte
Dim M As Byte
Dim E As Byte
Dim A As Byte
Do
' +-------------------------------------------+
' | Scrolling "Lachini" text to Left |
' +-------------------------------------------+
For S = 0 To 79
E = S + 4
For Refresh = 1 To 7
Scan = &H01
For Index = S To E
A = Index
Portd = Lookup(a , Lachini)
Portc = 1
Portc = 0
A = Index + 5
Portd = Lookup(a , Lachini)
Portc = 2
Portc = 0
A = Index + 10
Portd = Lookup(a , Lachini)
Portc = 4
Portc = 0
A = Index + 15
Portd = Lookup(a , Lachini)
Portc = 8
Portc = 0
Portb = Scan
Rotate Scan , Left , 1
Waitus 250
Portb = &H00
Next Index
Next Refresh
Next S
Lachini:
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H7F , &H01 , &H01 , &H01 , &H01 ' "L"
Data &H02 , &H15 , &H15 , &H15 , &H0F ' "a"
Data &H0E , &H11 , &H11 , &H11 , &H02 ' "c"
Data &H7F , &H08 , &H10 , &H10 , &H0F ' "h"
Data &H00 , &H11 , &H5F , &H01 , &H00 ' "i"
Data &H1F , &H08 , &H10 , &H10 , &H0F ' "n"
Data &H00 , &H11 , &H5F , &H01 , &H30 ' "i"
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00
مدار یک تابلو روان با چهار عدد آی سی 74573 و 4 عدد دات ماتریس 5در 7 است .
من خودم با زبان سی تابلو روان کار نکردم و فقط با بسکام اونم با یه ماتریس کار کردم ، ولی هسته ی اصلی کار رو تا حدود زیادی فهمیدم.
حالا اینکه چطور میشه این برنامه رو به زبان C تبدیل کرد نمی دونم! اما اگه جناب 1Nafar بگن که چطور میشه بجای دستور Rotate از آرایه های دو بعدی استفاده کرد خیلی جالب میشه و مشکل خیلیها حل میشه. چون من این مشکل رو در سایتهای دیگه هم دیدم که عنوان شده بود.
.
سلام – میشه از دوستان خواهش کنم اگه کسی واقعا میتونه جواب بده " اینکه میگید من با بسکام کار کردم و سی بلد نیستم " جواب من نیست !!!
از آقای 1nafar خواهش میکنیم که خودشون دست بکار بشن با تشکر از ایشان..........
چرا می زنی مهندس؟!
من که حرف بدی نزدم. زدم؟
.
سلام
فکر نمى کنم پیدا کردن دستورى که بتونه اىن کار رو انجام بده سخت باشه!
ميشه اگر سطر يا ستون با ىک فعال ميشه scan=1 کرد و بعد از دستور شيفت معمولى استفاده کرد و بعد از اونم يک if گذاشت که اگر scan برابر اخرين مقدار خود شده بود اونو به اولىن مقدار كه ۱ هست برگردونه. و اگر هم سطر يا ستون با صفر فعال ميشد مثل قبل عمل کرد و در انتها scan رو نات کرد.
با سلام
من سورس كد شما رو نگاه كردم شما تو متن برنامه متغيري به نام scan رو به صورت يك بايت تعريف كردين كه معادلش تو زبان C ميشه : ; unsigned char scan
اما برسيم سر اصل مطلب ، اگر اشتباه نكنم داره دستور شما اين كار رو انجام ميده كه محتواي متغير scan رو يك واحد به سمت چپ شيفت ميده كه معادل اين عمل در زبان C ميشه :
(شرمنده هر كاري كردم نتونستم فرمت دستور رو به صورت صحيح تايپش كنم دست آخر مجبور شدم پيوستش كنم)
فكر كنم با اين دستور مشكلت حل شه .
ویرایش توسط Division : 11-03-2010 در ساعت 01:59
سادگی نهایت کمال است
یه مدتی میشه که نیستم... ولی به زودی بر می گردم...
سلام
این که مثل همون پست قبلی شد فقط یک if می خواد چون اینطوری بعد از 8 بار scan=0 میشه چون با این دستور صفر وارد میشه. ( البته تو بسکام که اینطوری بود.) پس روش درسته.
سادگی نهایت کمال است
یه مدتی میشه که نیستم... ولی به زودی بر می گردم...
سلام - برنامه صفحه قبل تابلوروان به زبان بیسسک همین تاپیک رو به زبان سی نوشتم با توجه به توضیحات شما دوستان اما متاسفانه جواب نمیده :
اینم برنامه :
#include<mega16.h>
#include<delay.h>
unsigned char scan;
int refresh ,index;
int s,e,a;
flash unsigned char text[136]={
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x82 , 0xFE , 0xFE , 0x82 , 0x02 , 0x06 , 0x0E , 0x00 , //L//
0x3E , 0x7E , 0xD0 , 0x90 , 0xD0 , 0x7E , 0x3E , 0x00 , //A//
0x38 , 0x7C , 0xC6 , 0x82 , 0x82 , 0xC6 , 0x44 , 0x00 , //C//
0xFE , 0xFE , 0x10 , 0x10 , 0x10 , 0xFE , 0xFE , 0x00 , //H//
0x00 , 0x00 , 0x82 , 0xFE , 0xFE , 0x82 , 0x00 , 0x00 , //I//
0xFE , 0xFE , 0x60 , 0x30 , 0x18 , 0xFE , 0xFE , 0x00 , //N//
0x00 , 0x00 , 0x82 , 0xFE , 0xFE , 0x82 , 0x00 , 0x00 , //I//
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
};
void main(void)
{
DDRA=0xff;
DDRC=0xff;
DDRD=0xff;
while(1)
{
for(s=0;s<=127;s++)
{
e=s+7;
for(refresh=1;refresh<=7;refresh++)
{
scan=0x01;
for(index=s;s<=e;index++)
{
a=index;
PORTD=text[a];
PORTC=1;
PORTC=0;
a=index+8;
PORTD=text[a];
PORTC=2;
PORTC=0;
a=index+16;
PORTD=text[a];
PORTC=4;
PORTC=0;
a=index+24;
PORTD=text[a];
PORTC=8;
PORTC=0;
PORTA=scan;
scan=(1<<scan);
delay_us(250);
PORTA=0x00;
}
}
}
}
}
اگه ممکنه دوستان کمی روی این برنامه کارکنن با تشکر ...................
اینجور که معلومه شما تو دستور شفتی که نوشتید عدد 1 رو scan بار شیفت دادید!! ( برعکس نوشته شده )
سلام - خب حالا کجا باید دست بوره ؟ scan ......
سلام - خب حالا کجا باید دست بخوره ؟ scan ...... یا..
باید جای scan و 1 رو عوض کنی یعنی از چپ با راست اول scan باشه بعد 1