
تابع شیفت متن در کامپایلر بیسیک (Bascom-avr)
در مواردی پیش می آید که ما قصد نشان دادن یک متن را بر روی السیدی های کاراکتری داشته باشیم ولی اگر متن طولانی باشد ما با مشکل مواجه خواهیم شد…
ظاهرا ما می توانیم با شیفت دادن متن مشکل را حل کنیم.
1 |
sub shift_text(byref text_str as string,byval row_var as byte,byval time_delay as byte) |
توضیحات:
در کد زیر برای شیفت دادن متن بر روی السیدی کاراکتری یک تابع ایجاد شده است
تابع سه پارامتر می گیرد پارامتر اول نام متغیر متن ، پارامتر دوم تعیین محل سطر قرار گیری متن و می تواند مقداری بین یک تا دو و اگر از السیدی های ۴ *۱۶ استفاده می کنید این رقم می تواند تا مقدار چهار نیز مقدار دهی شود ، و پارامتر سوم یا اخر هم تاخیر شیفت بر حسب میلی ثانیه می باشد که می توانید مقداری بین ۱ تا ۲۵۵ را وارد کنید
نمونه کد بیسیک برای کامپایلر بسکام:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
$regfile = "m8def.dat" : $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0 Config Lcd = 16 * 2 Cursor Off config PORTD=OUTPUT '//////////////////////////////www.mculibrary.ir//////////////////////////////// $hwstack = 40 $swstack = 80 $framesize = 80 '//////////////////////////////www.mculibrary.ir//////////////////////////////// declare sub shift_text(byref text_str as string,byval row_var as byte,byval time_delay as byte) '//////////////////////////////www.mculibrary.ir//////////////////////////////// dim str_shift as string*200 '//////////////////////////////www.mculibrary.ir//////////////////////////////// str_shift="Mitavanid kod khod ra baraye shift dadan bar roye lcd 16x2 inja vared konid..." '//////////////////////////////www.mculibrary.ir//////////////////////////////// do shift_text str_shift,1,50 cls wait 1 loop '//////////////////////////////www.mculibrary.ir//////////////////////////////// '// sub shift_text '//////////////////////////////www.mculibrary.ir//////////////////////////////// sub shift_text(byref text_str as string,byval row_var as byte,byval time_delay as byte) local str_16_char as string*17 local i1 as byte,i2 as byte local len_str as byte local value as byte Waitms 5 i1=1 str_16_char=left(text_str,16) locate row_var,1 lcd str_16_char len_str=len(text_str) Do if len_str<17 then exit do if i1>14 and i1< len_str then i2=i1-14 str_16_char=mid(text_str,i2,16) locate row_var,1 lcd str_16_char endif value=len_str+10 if i1>value then i1=0 exit do endif waitms time_delay incr i1 loop end sub |
نمونه کد C برای کامپایلر کدویژن:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#include <mega8.h> #include <alcd.h> #include <delay.h> ///////////////////////////////www.mculibrary.ir//////////////////////////////// void shift_text(unsigned char *text_str,unsigned char row_var ,unsigned char time_delay); ///////////////////////////////www.mculibrary.ir//////////////////////////////// void main(void) { unsigned char str_shift[]={"Mitavanid kod khod ra baraye shift dadan bar roye lcd 16x2 inja vared konid..."}; DDRD=0xFF; lcd_init(16); lcd_clear(); while(1) { shift_text(str_shift,0,50); lcd_clear(); delay_ms(1000); } } //////////////////////////////www.mculibrary.ir//////////////////////////////// // void shift_text //////////////////////////////www.mculibrary.ir//////////////////////////////// void shift_text(unsigned char *text_str,unsigned char row_var ,unsigned char time_delay) { unsigned char str_16_char[17],i1=0,i2=0,i3=0,len_str,value=0; for(i2=0;i2<16;i2++) { str_16_char[i2]=*(text_str+i2); } str_16_char[16]=0; i1=1; lcd_gotoxy(0,row_var); lcd_puts(str_16_char); len_str=0; while(*(text_str+len_str)!=0) { len_str++; } while(1) { if(len_str<17) break; if(i1>14 & i1<len_str-1) { i2=i1-14; for(i3=0;i3<16;i3++) { str_16_char[i3]=*(text_str+i3+i2); } lcd_gotoxy(0,row_var); lcd_puts(str_16_char); } value=len_str+10; if(i1>value) { i1=0; break; } delay_ms(time_delay); i1++; } } |
عملکرد تابع در گیف زیر قابل مشاهده است:
سورس کد و شبیه ساز bascom-avr
- برای شبیه سازی نیاز به پروتیوس ورژن 8.10 به بالا دارید.
سورس کد و شبیه ساز codevision-avr
- برای شبیه سازی نیاز به پروتیوس ورژن 8.10 به بالا دارید.
بسیار عالی بود ممنون از مطالب پر محتوا 👏👏👏🌹🌹🌹
خواهش می کنم...موفق و موید باشید.