عضویت     ورود  در قضاوت سه چيز نبايد دخالت كند : هوس ، كينه و قدرت . افلاطون پنجشنبه، 6 تير ماه ، 1398

کانال تلگرام


تبلیغات متنی


منوی سایت


جست و جو در بانك مقالات




مقالات جدید
تعداد شاخه ها: 30 عدد
تعداد مقالات: 758 عدد 1: آزمايشگاه الكترونيك - استاد محرري 
[دفعات مشاهده : 5509 بار]
 2: جزوه درس مخابرات 1 - دانشگاه فردوسي مشهد 
[دفعات مشاهده : 5539 بار]
 3: كتاب مهندسي تاسيسات / دكتر كلهر 
[دفعات مشاهده : 5396 بار]
 4: مجموع اعوجاج هارمونیک T.H.D 
[دفعات مشاهده : 5383 بار]
 5: كتاب "روش طراحي و تحليل مدارهاي الكترونيك" 
[دفعات مشاهده : 11966 بار]
 6: ادوات نوري 
[دفعات مشاهده : 5358 بار]
 7: كتاب اصول تلويزيون رنگي 
[دفعات مشاهده : 7049 بار]
 8: پروژه دزد گیر با سنسور تشخیص حرکت pir با قفل رمز الکترونیکی 
[دفعات مشاهده : 6582 بار]
 9: جزوه اندازه گیری الکتریکی 
[دفعات مشاهده : 5820 بار]
 10: سوالات کنکور کارشناسی ارشد 90 / گروه مهندسی برق 
[دفعات مشاهده : 7678 بار]
 11: آرشيو پروژه هاي 8051 
[دفعات مشاهده : 6495 بار]
 12: آرشيو پروژه هاي AVR‌ (ـ‌ 126 پروژه ) 
[دفعات مشاهده : 14349 بار]
 13: آموزش برنامه نويسي و كار با ماژول Sim300CZ با ميكروكنترلر AVR 
[دفعات مشاهده : 10472 بار]
 14: سوالات كنكور كارشناسي ناپيوسته 89 - گروه برق 
[دفعات مشاهده : 7898 بار]
 15: ارتباط میکروهای PIC با کمک پروتکل سریال I2C و نکات تکمیلی ماژول MSSP 
[دفعات مشاهده : 6003 بار]
 16: ساعت تقویم با کمک میکروکنترلر PIC و DS1307 
[دفعات مشاهده : 6625 بار]
 17: تایمرهای چند زمانه ( ساعت مرکزی ) با میکرو PIC 
[دفعات مشاهده : 5948 بار]
 18: ساعت تقویم شمسی مجهز به آلارم روزانه و هفتگی 
[دفعات مشاهده : 6887 بار]
 19: صفحه کلید وقفه ای با میکروکنترلر PIC 
[دفعات مشاهده : 5707 بار]
 20: کرنومتر دیجیتال با میکروکنترلر PIC با قابلیت ثبت 3 زمان 
[دفعات مشاهده : 5807 بار]
 21: طراحی و ساخت مدارات انتقال دیتا به وسیله ماژول های HMTR + پروژه چت متنی بیسیم 
[دفعات مشاهده : 8914 بار]
 22: سنسورهای حرارت 
[دفعات مشاهده : 7934 بار]
 23: کنترل وسایل برقی از طریق خط تلفن با میکروکنترلر PIC 
[دفعات مشاهده : 7970 بار]
 24: ارتباط سریال UART بین دو میکروکنترلر PIC 
[دفعات مشاهده : 6241 بار]
 25: گزارش کار آموزی : ماشین های ابزار کنترل عددی CNC 
[دفعات مشاهده : 6520 بار]
 26: کنترل وسایل به کمک ماژول HM-TR و میکرو AVR 
[دفعات مشاهده : 9070 بار]
 27: طراحی و ساخت کنترل از راه دور 1 کانال با کمک ماژول های ASK و آی سی های سری PT 
[دفعات مشاهده : 7512 بار]
 28: مجموعه رفرنس های آموزشی میکروکنترلرهای سری dsPIC 
[دفعات مشاهده : 7002 بار]
 29: مجموعه پروژه های میکروکنترلر AVR با کامپایلر بسکام 
[دفعات مشاهده : 12166 بار]
 30: طراحی و ساخت مدارات انتقال دیتا به وسیله ماژول های HM-T و HM-R با میکرو AVR 
[دفعات مشاهده : 9970 بار]


آخرين مطالب ارسال شده
· روش طراحي و تحليل مدارهاي الكترونيك[ 1 نظر شما چيه؟ - 39655 مشاهده ]
· اصول تلويزيون رنگي[ 0 نظر شما چيه؟ - 18236 مشاهده ]
· نرم افزار DigSilent[ 2 نظر شما چيه؟ - 21462 مشاهده ]
· AVR Tech Lib 2011[ 1 نظر شما چيه؟ - 24983 مشاهده ]
· مجموعه كنفرانس هاي سالينه ميكروچيپ / سال 2009 /[ 2 نظر شما چيه؟ - 22687 مشاهده ]
· آموزش كار با ماژول SIM300CZ با ميكرو AVR[ 4 نظر شما چيه؟ - 25058 مشاهده ]
· مجموعه فيلم هاي آموزشي نرم افزار Altium Designer[ 0 نظر شما چيه؟ - 39056 مشاهده ]
·  سوالات كنكور كارشناسي ناپيوسته 89 - گروه برق[ 0 نظر شما چيه؟ - 20043 مشاهده ]
· لينك دانلود مجله October 2010 / SERVO[ 0 نظر شما چيه؟ - 17101 مشاهده ]
· Catalog CA 01 (10/2009) / International version[ 0 نظر شما چيه؟ - 21399 مشاهده ]

[ موارد بیشتر در بخش اخبار و تازه ها ]


زبان
انتخاب زبان نمایش :



مطالب جديد


ارسال مقاله به سايت

 



...::: Ir-Micro.Com :::... :: View topic - آموزش avr به زبان بیسیک


آموزش avr به زبان بیسیک
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    ...::: Ir-Micro.Com :::... Forum Index -> برنامه نویسی و مباحث مربوط به AVR Printable Version
View previous topic :: View next topic  
Author Message
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 5 تير ماه ، 1387 22:49:38 Reply with quote Scroll Down to Next postGo to last Post of Page

سلام
من تصميم دارم باهمكاري شما دوستان كلاس اموزشي avr ؛به زبان سي وبيسيك رو بذارم
نحوه كار به اين صورت است كه :
-هر شب يه قسمت گفته ميشه و شما هر سوالي رو كه داشتيد در صفحه جدا گانه كه بعدا ايجاد ميشود قرار ميدهيد.
-مطالب گفته شده همراه مثال با فايل پروتوس ميباشد(7.2)
-....

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 5 تير ماه ، 1387 22:57:37 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
در ابتدا مواد مورد نياز براي كار با avr به زبان بيسيك در زير اورده شده است


[url=http://www.ir-micro.com/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=44&ttitle=شبیه_ساز_قدرتمند_Proteus_7.2_s p2]پروتوس 7.2[/url]




1 عدد كامپيوتر
و....

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 5 تير ماه ، 1387 23:59:52 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
درس اول اشنايي مختصر با محيط بسكام است
---------اولين منو منوي فايل مي باشد
كه داراي گزينه هاي زير است:
1-New با زدن اين گزينه يك صفحه جديد براي نوشتن برنامه جديد باز ميشود ؛ اين صفحه مجهز به ويرايشگر دستورات مي باشد ؛ يعني در صورتي كه دستوري درست وارد شود به رنگ ابي در ميايد ولي اگر دستور اشتباه باشد به رنگ معمولي (مشكي )است (اين مورد براي تعداد كمي از دستورات اجرا نمي شود) .
2-open با زدن اين گزينه مي توانيد برنامه اي را كه از قبل ذخيره كرده ايد باز كنيد.
3-Close با انتخاب اين گزينه صفحه اي كه براي نوشتن برنامه باز شده ؛ بسته ميشود.
4-Save و Save as اين دو گزينه براي ذخيره كردن پروژه به كار ميروند.
5-Print Preview وPrint اين دو گزينه براي چاپ كردن برنامه استفاده ميشوند با زدن گزينه Print Preview مي توانيد نسخه قابل چاپ را قبل از چاپ مشاهده كنيد.
6-Exit با زدن اين گزينه برنامه بسكام به طور كامل بسته مي شود ؛ اما اگر برنامه شما ذخيره نشده باشد ؛در مورد ذخيره برنامه از شما پرسيده ميشود.
7- در زير گزينه Exit چند گزينه ديگر وجود دارد كه اين گزينه ها براي دسترسي سريع به اخرين فايل هاي كه باز بوده اند مي باشد.
---------منوي بعدي منوي Edit مي باشد
كه داراي گزينه هاي زير است:
1-UndoوRedo اين دو گزينه براي دست يابي به اخرين تغييرات انجام شده مي باشد .
2-CopyوCutوPaste اين سه گزينه براي برداشتن يا كپي كردن قسمتي از متن به جاي ديگر ميباشد.
3- Findnext وFind اين دو گزينه براي پيدا كردن قسمتي از متن در برنامه مي باشد. نحوه كار به اين صورت است كه بعد از انتخاب گزينه Find پن جره جديدي باز مي شود كه بايد در قسمتText to find متن مورد نظر را تايپ كنيد بعد رويok كليك كنيد تا متن مورد نظر در برنامه انتخاب شود .Findnext متن هاي كه در خط هاي بعدي برنامه وجود دارد پيدا ميكند.
4-دو گزينه بعدي براي گذاشتن علامت در خطوط مختلف و پرش به انها مي باشد كه اهميت چنداني در برنامه نويسي ندارد.
5-IndentBlock وUnindentBlock اين دو گزينه متن انتخاب شده را به اندازه يك tab به چپ يا راست منتقل ميكند.
----------منوي بعدي منوي Program مي باشد
كه داراي گزينه هاي زير است:
1-Compile با انتخاب اين گزينه فايل هاي از قبيل هگز و گزارش و...ساخته ميشود .اگر در اين مرحله برنامه داراي خطا باشد پنجره اي باز ميشود كه در ان خطاها نمايش داده مي شوند ؛ با كليك كردن روي هر خطا خط مربوط كه داراي خطا است قرمز ميشود .
2-Syntax check با انتخاب اين گزينه برنامه از نظر غلط املايي چك ميشود (با زدن گزينه Compile ديگر نيازي به زدن اين گزينه نمي باشد).
3-Show result با انتخاب اين گزينه پنجرهاي باز ميشود كه در ان گزارش كلي از برنامه وجود دارد.
4-Simulate با انتخاب اين گزينه پنجره شبيه سازي باز ميشود و شما در اين پنجره كه داراي lcd و كيبرد و مبدل انالوگ به ديجتال و...ميباشدمي توانيد برنامه خود را شبيه سازي كنيد (به علت استفاده از پروتوس نيازي به اين محيط نمي باشد).
5-send to chip با انتخاب اين گزينه وارد محيط پروگرام كردن ميكرو مي شويد كه در قسمت هاي بعدي مفصلا توضيح داده مي شوند.
------------منوي بعدي منوي tools وoptions است كه داراي امكانات پر كار بردي مي باشد كه در مكان مورد نياز توضيح داده ميشود
اگر سوالي در مورد محيط بسكام و موارد گفته شده داشتيد در صفحه جديد بفرماييد.

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: جمعه، 7 تير ماه ، 1387 08:12:45 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

در زیر به بیان برخی از عباراتی که از این به بعد به کار میرود می پردازیم
1-vcc و:gnd منظور از این دو کلمه پایه های تغذیه می باشد که معمولا vcc ، 5ولت می باشد و gnd 0ولت است
شما می توانید این تغذیه را از پورت usb کامپیوتر خود بگیرید
2-پورت : هرمیکرو دارای چندین پورت می باشد و هر پورت دارای چندین پایه است (معمولا 8 پایه)برای مثال میکرو مگا 32 (atmega32)دارای 4 پورت a,b,c,d می باشد که هر پورت 8 پایه دارد وپورت a (porta)از پایه 33 تا 40 میکرو می باشد و پایه شماره 40 پین a.0 ( pina.0 ) و پایه 39 پین a.1 (pina.1)...وپایه 33 پین a.7 (pina.7)میباشد
3- کریستال:میکرو برای تنظیم زمان برای انجام کارها به یک نوسان ساز نیاز دارد که به این نوسان ساز کریستال گفته می شود حداکثر کریستال مورد استفاده برای avr ،8 مگاهرتز می باشد همچنین میکرو های avr دارای نوسان ساز داخلی می باشد ،که در صورت نیاز می توانید از ان استفاده کنید. کریستال به دو پایه xtal 1 و xtal2 متصل می شود >این پایه ها برای میکرو مگا 16 پایه های12 و 13 می باشد
مراحل نوشتن یک برنامه جدید:
بعد از باز کردن برنامه بسکام گزینه new را از منوی file انتخاب کنید صفحه جدیدی که باز می شود محل نوشتن برنامه می باشد
میکرو های avr به سه دسته زیر تقسیم می شوند که قی ترین دسته سری مگا avr می باشد
1-سری tinyxx :بزرگترین مزیت این گروه نسبت به دو گروه دیگر کوچک بودنسان می باشد
2- سری at90sxxxx
3- سری atmegaxxx:این سری از قوی ترین خانواده میکرو های avr می باشد که دارای امکانات زیادی می باشد
در زبان بیسیک همیشه اولین خط برنامه مر بوط به معرفی میکرو می باشد
$regfile="micro name"
که گزینه micro neme یکی از گزینه های زیر است
M8dif.dat (برای ای سی مگا Cool
M32def.dat (برای اس یس مگا32)
M16def.dat (برای ای سی مگا 16)
8515DEF.DAT (برای ای سی at90s8515)
....
خط بعدی معرفی کریستال می باشد
$crystal=x
که x کریستال مورد استفاده بر حسب هرتز است مانند
$crystal=8000000 (در اینجا کریستال 8مگا هرتز است)
بعد از معرفی کریستال نوبت به معرفی امکانات می باشد (امکانات شامل تایمر ها و adc (مبدل انالوگ به دیجتال)وورودی یا خرو جی قرار دادن پورت ها و....می باشد)
معرفی امکانات با دستور زیر می باشد
Config
بعد از معرفی یا پیکر بندی امکانات جانبی نوبت به استفاده از انها می باشد معمولا برای استفاده از امکانات باید ان را درون یک حلقه قرار میدهند
ودر نهایت برنامه با end به پایان می رسد
در زیر نکات اصلی برای برنامه نویسی اورده شده است
استفاده از پورت ها در محیط بسکام:
میکروهای avr در رنج وسیع با امکانات و تعداد پایه وپورت متفاوت ساخته می شود شما می توانید اطلاعات مر بوط به میکرو هایش avr را می توانید از سایت زیر در یافت کنید
در بسکام پور تهای میکرو های avr می توانند به عنوان ورودی یا خروجی قرار بگیرند که این نقش اصلی پورت می باشد
همچنین بعضی از پایه ها دارای کاربرد دوم نیز می باشند مثلا پورت a (porta ) در مگا 32 (mega32 )علاوه بر ورودی یا خروجی می تواند به عنوان وردی سیگنال انالوگ برای مبدل انالوگ به دیجتال قرار گیرد
در ادامه باکاربرد دوم سایر پایه ها اشنا خواهیم شد
برای قرار دادن یک پورت به عنوان ورودی از دستور زیر استفاده میکنیم
Config portx = input
که پورت x یکی از پورت های میکرو می باشد
و برای قرار دادن یک پورت به عنوان خروجی از دستور زیر استفاده میکنیم
Config portx = output
که پورت x یکی از پورت های میکرو می باشد مانند:
Config porta = outputپورت a به عنوان خروجی تعریف شده است
Config portb=input پورت b به عنوان ورودی تعریف شده است
همچنین شما می توانید یکی از پایه های پورت را به عنوان ورودی یا خروجی معرفی کنید مانند
Config pina.1=input پایه شماره 1 از پورت a به عنوان ورودی تعریف شده است
Config pinb.7=input پایه شماره 7 از پورت b به عنوان ورودی تعریف شده است
Config pinc.5=output پایه شماره 5 از پورت c به عنوان خروجی تعریف شده است
دستورات مربوط به پورت ها
دستور toggle این دستور یک بایت را برعکس میکند بایت میتواند یک پورت یا هر چیز دیگر باشد
دستور set این دستور یک بیت رایک میکند بیت میتواند یک پین از پورت یا هر چیز دیگر باشد
دستور reset این دستور یک بیت را صفر میکند بیت میتواند یک پین از پورت یا هر چیز دیگر باشد
....
دستورات تاخیر:
برای ایجاد تاخیر در برنامه از دستور wait استفاده میشود
دستور wait به سه شکل زیر است:
Waitus x این دستور برای ایجاد تاخیر میکرو ثانیه ای می باشد .x مقدار تاخیر میباشد که بین 1تا 65535 میکرو ثانیه می باشد.مانند
Waitus 500 تاخیر به مدت 500 میکرو ثانیه
Waitms x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که بین 1تا 65535 میلی ثانیه می باشد.مانند
Waitms 720 تاخیر به مدت 700 میلی ثانیه
Wait x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که عددی بیشتر از یک ثانیه می باشد.مانند
Wait 1000 تاخیر به مدت 1000 ثانیه
دستور DELAY :
این دستور در هر جا که استفاده شود یک تاخیر 1میلی ثانیه ایجاد می شود
توجه کنید که هر جا دستور wait به کار رود برنامه در انجا به اندازه زمان مورد نظر متوقف می شود
دستورات حلقه وپرش :
گاهی اوقات نیاز است برنامه مدام اجرا شود یه در هنگام اجرای برنامه به خط دیگری پرش شود
برای اجرای مداوم برنامه باید ان را درون یک حلقه قرار دهیم
انواع حلقه ها :
1- Do - loop شروع این حلقه با do وپایان ان با loop است
2- For –next
3- WHILE-WEND
دو مورد اخر در قسمت های بعدی گفته می شود
برای پرش از یک قسمت برنامه به قسمت دیگر می توان از دستور jmp یا goto استفاده کرد (از دستورات فوق به عنوان حلقه نیز می توان استفاده کرد مانند:
Q:
برنامه نوشته شده
Jmp q
مثال دوم:
W:
برنامه نوشته شده
Goto w
حال با توجه به توضیحات بالا برنامه یک مدار چشمک زن را با هم می نویسیم
(میکرو مورد استفاده مگا 16 (atmega16 ) و کریستال 8مگا هرتز است و8عدد led با مقاومت 330 اهم به پورت c (portc) متصل است)
مر حله اول معرفی میکرو می باشد
$regfile="m16def.dat" معرفی میکرو
مرحله بعد معرفی کریستال می باشد
$crystal=8000000 معرفی کریستال
(دو مرحله بالا در همه برنامه ها ثابت می باشد(وجود دارد))
مرحله بعد قرار دادن پورت c به عنوان خروجی می باشد (چون ما میخواهیم از میکرو جریان خارج کنیم پورت c را به عنوان خروجی قرار می دهیم)
Config portc =output
مرحله بعد ایجاد یک حلقه می باشد (برای ایجاد حلقه می توانید در اینجا از تمام موارد کفته شده در بالا استفاده کنید)
Do
مرحله بعد روشن کردن led ها می باشد(ما در اینجا انها را یک در میان روشن میکنیم)
Set portc.0 (روشن کردن led متصل شده به پایه 22 میکرو (portc.0))
reSet portc.1(خاموش کردن led متصل شده به پایه 23 میکرو (portc.1))
Set portc.2 (روشن کردن led متصل شده به پایه 24 میکرو (portc.2))
reSet portc.3(خاموش کردن led متصل شده به پایه 25 میکرو (portc.3))
Set portc.4(روشن کردن led متصل شده به پایه 26 میکرو (portc.4))
reSet portc.5(خاموش کردن led متصل شده به پایه 27 میکرو (portc.5))
Set portc.6(روشن کردن led متصل شده به پایه 28 میکرو (portc.6))
reSet portc.7 (خاموش کردن led متصل شده به پایه 29 میکرو (portc.7))
مرحله بعد ایجاد یک تاخیر زمانی است
Waitms 500 (تاخیر به مدت 500 میلی ثانیه)
مرحله بعد برعکس کردن وضعیت پایه های موجود است (برای اینکه led های رو شن خاموش شود و led های خا موش روشن شود)
Toggle portc(این دستور همانگونه که قبلا گفته شد یک بایت را برعکس میکند کهع در اینجا بایت مورد نظر 8پایه پوزت c است)
مرحله بعد ایجاد تاخیر زمانی است
Waitms 500
مرحله بعد نوشتن پایان حلقه می باشد
Loop (هنگامی که پردازنده میکرو این خط را میخواند به خط do پرش میکند)
و در نهایت باید به برنامه پایان داده شود
End (پایان برنامه) در فایل زیر 4 مثال همراه فایل پروتوس برای در س امروز موجود می باشد(از شماره 1 تا 4)
باری درک مطالب بالا 4فایل پروتوس نیز اورده شده که نوشتن برنامه برای انها به عهده شماست(از شماره 5 تا Cool(انقدر سعی کنید تا نتیجه بگیرید)
(بعد از کامپایل برنامه ، برنامه با پسوند .bas ذخیره میشود و فایلی که با پسوند .hex است روی میکرو ریخته می شود)


Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: دوشنبه، 10 تير ماه ، 1387 17:59:45 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

Lcd کاراکتری
این نوع lcd از دارای چند سطر وستون می باشد که نام گذاری انها برمبنای سطر وستون می باشد
در زیر چند نوع lcd نام برده شده است
16*1 که دارای یک سطر و 16 ستون می باشد
16*2 که دارای 2 سطر و 16 ستون می باشد
16*4 که دارای 4 سطر و 16 ستون می باشد
20*2 که دارای 2 سطر و 20 ستون می باشد
20*4 که دارای 4 سطر و 20 ستون می باشد
40*2 که دارای 2 سطر و 40 ستون می باشد
40*4 که دارای 4 سطر و40 ستون می باشد
تمام lcd های کاراکتری دارای 16 پایه می باشد که در زیر اورده شده است
پایه شماره 1 : VSS ، این پایه ،پایه گراند lcd است و باید به زمین مدار وصل شود
پایه شماره 2 : VDDاین پایه پایه VCC LCD است که باید به 5ولت وصل شود
پایه شماره 3 : VEE این پایه روشنایی پیکسل های LCD را تعیین میکند
پایه شماره 4 : RS در lcd دو رجیستر به نام دستورالعمل وداده وجود دارد اگر rs =0 باشد lcd برای گرفتن دستورالعمل اماده می شود در غیر این صورت برای داده .مثلا دستور cls یک دستور العمل است و qwer که باید روی lcd نوشته شود یک داده است
پایه شماره 5 :RW این پایه دو وضعیت دارد ، rw =1 برای خواندن از lcd و rw=0 برای نوشتن در lcd
پایه شماره 6 : E با این پایه می توان LCD را انتخاب کرد
پایه شماره 7 : DB0 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی صفر)
پایه شماره 8 : DB1 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی یک)
پایه شماره 9 : DB2 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی دو)
پایه شماره 10 : DB3 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی سه)
پایه شماره 11 : DB4 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی چهار)
پایه شماره 12 : DB5 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی پنج)
پایه شماره 13 : DB6 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی شش)
پایه شماره 14 : DB7 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی هفت)
پایه شماره 15 : این پایه و پایه شماره 16 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
پایه شماره 16 : این پایه و پایه شماره 15 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
راه اندازی LCD در محیط بسکام:
Lcd میتواند ازدو طریق 8سیمه و 4سیمه به میکرو متصل شود
در مد چهار سیمه فقط میتوان روی lcd نوشت ولی در مد هشت سیمه میتوان اطلاعاتی را که قبلا روی lcd نوشته شده است را خواند و به میکرو ارسال کرد
به طور کلی از خطوط دیتای 0تا 3 برای خوانده از lcd و از خطوط4تا7 برای نوشتن در lcd نوشته میشود در حالت نوشتن در lcd باید پایه RS پایین نگه داشته شود (صفر شود) ودر حالت خواندن از LCD باید پایه RS 1 شود )5ولت وصل شود)
از انجا که با وجود حافظه میکرو و راحت شدن کار برنامه نویسی نیازی به خواندن از LCD نمی باشد ،از پایه DB 0 تا DB3 استفاده نمی شود و پایه RW نیز به GND (صفر ولت متصل میشود)
اولین مرحله برای راه اندازی LCD معرفی کردن نام ان است:
برای این کار بعد از معرفی میکرو وکریستال با استفاده از دستور زیر می توان LCD ارمعرفی کرد:
CONFIG LCD = LCDNAME
که LCDNAME یکی از نام های با لا میباشد مثلا معرفی LCD 2*16
Config lcd =16*2
مرحله بعد معرفی پایه های از میکرو است که lcd به انها وصل میشود
Config Lcdpin = Pin , Db4 = Pinx.y , Db5 = Pinx.y , Db6 = Pinx.y , Db7 = Pinx.y , Rs = Pinx.y , E = Pinx.y
X نام پورت است که یکی از پورت های a یا b یا c یا یd ... می باشد و y شماره پایه هست که از 0 تا 7 می باشد برای مثال در زیر lcd کاراکتری 16*2 به پورت c (portc) متصل است
Code:
$regfile="m16def.dat"
$crystal=8000000
Config Lcd = 16*2
Config lcdpin=pin , db4=pinc.0,db5=pinc.1,db6=pinc.2,db7=pinc.3,rs=pinc.4,e=pinc.5


در این مثال که از میکرو مگا16(atmega16)استفاده شده ، اتصال میکرو وlcd به قرار زیر است:

پایه شماره 1 : VSS ، این پایه باید به زمین مدار وصل شود
پایه شماره 2 : VDDاین پایه باید به 5ولت وصل شود
پایه شماره 3 : VEE این پایه با یک مقاومت (مقدار مقاومت بستگی به روشنایی مورد نظر شما دارد)به vcc وصل میشود
پایه شماره 4 : RS این پایه به پورت c پین شماره 4 یا پین c.4 متصل میشود (پایه 26 میکرو مگا16)
پایه شماره 5 :RW این پایه به gnd متصل میشود
پایه شماره 6 : E این پایه به پورت c پین شماره 5 یا پین c.5 متصل میشود(پایه 27 میکرو مگا16)
پایه شماره 7 : DB0 این پایه به جایی متصل نمی شود
پایه شماره 8 : DB1 این پایه به جایی متصل نمی شود
پایه شماره 9 : DB2 این پایه به جایی متصل نمی شود
پایه شماره 10 : DB3 این پایه به جایی متصل نمی شود
پایه شماره 11 : DB4 این پایه به پورت c پین شماره 0 یا پین c.0 متصل میشود(پایه 22 میکرو مگا16)
پایه شماره 12 : DB5 این پایه به پورت c پین شماره 1 یا پین c.1 متصل میشود(پایه 23 میکرو مگا16)
پایه شماره 13 : DB6 این پایه به پورت c پین شماره 2 یا پین c.2 متصل میشود(پایه 24 میکرو مگا16)
پایه شماره 14 : DB7 این پایه به پورت c پین شماره 3 یا پین c.3 متصل میشود(پایه 25 میکرو مگا16)
پایه شماره 15 : این پایه و پایه شماره 16 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
پایه شماره 16 : این پایه و پایه شماره 15 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود
توجه کنید که اگر پایه VEE به 5ولت متصل شود پیکسل های LCD دارای بیشترین رو شنای و اگر به گراند وصل شود دارای کمترین روشنایی می باشند
اتصال پایه های 15 و16 اختیاری است
بعد از راه اندازی LCD نوبت کار کردن با ان است .
برای نوشتن روی LCD از دستور زیر استفاده می شود :
LCD " X"
که X می تواند هر چیز ی باشد (البته در محدوده کارکتر های اسکی )مانند
Code:
LCD  "*1NAFAR*"
یا
LCD  "+ ir-micro+"
یا
Lcd  "[email protected]#$qwe/*-+?:<"
برای پاک کردن lcd تز دستور cls استفاده می شود .مانند
Lcd ")(*&&^%$%$#@"
Wait 1
Cls
Code:
Lcd "asdfgfghk"

با دستور زیر می توان در سطر ها و ستون های دیگر lcd نوشت
Locate x,y
که x ادرس سطر و y ادرس ستون می باشد
مانند
Code:
Locate 1,2
Lcd"qwert"
Locate 2,1
Lcd "123456"
Locate  2,8
Lcd "mnbv"
توجه کنید برای یک lcd ، مثلا 16*2 حداکثر x ،2 و حداکثر y ، 16 است
Lcd دارای یک مکان نما می باشد که با دستور زیر میتوان ان را روش ن یا خاموش یا چشمک زن یا ثابت قرارداد
Cursor On با این دستور مکان نما روشن می شود (در حالت عادی مکان نما روشن است )
Cursor off با این دستور مکان نما خاموش می شود
Cursor blink با این دستور مکان نما چشمک می زند
Cursor noblink با این دستور مکان نما دیگر چشمک نمی زند
با دستور زیر می توانید کاراکتر های روی lcd را به چپ یا راست شیفت دهید
shiftlcd left این دستور کارکترها را به اندازه یک tab به چپ منتقل میکند
shiftlcd right این دستور کارکترها را به اندازه یک tab به راست منتقل میکند
نوشتن فارسی روی lcd :
Lcd های کاراکتری دارای یک حافظه می باشد که درون ان کدهای کارکتر های اسکی وجود دارد اما فارسی در ان وجود ندارد اما در lcd حافظه موقتی وجود دارد که در ان می توان تا 8 کارا کتر دلخواه را قرار داد
برای ساخت کاراکتر دلخواه مراحل زیر را دنبال کنید:
از منوی tools گزینه lcd designer را انتخاب کنید پنجره جدیدی باز می شود که شما می توانید در ان کاراکتر دلخوا هخود را ایجاد کنید.
بعد از ایجاد کاراکتر دلخواه روی ok کلیک کنید ،پنجره بسته می شود و یک خط به برنامه شما اضافه می شود مانند زیر
4,31,20,4, 4, 4, 4, Deflcdchar ?,1
به جای علامت سوال باید یکی از اعداد 0تا 7 می باشد گذاشته شود .
بعد از ساخت کاراکتر جدید بادستور زیر می توانید ان را روی lcd نشان دهید
Lcd chr(?)
به جای علامت سوال باید شماره کاراکتر که یکی از اعداد 0تا 7 می باشد گذاشته شود .
مانند مثال زیر:
Code:
$regfile="m16def.dat"
$crystal=8000000
Config Lcd = 16*2
Config lcdpin=pin , db4=pinc.0,db5=pinc.1,db6=pinc.2,db7=pinc.3,rs=pinc.4,e=pinc.5
4,31,20,4, 4, 4, 4, Deflcdchar 0,1
Locate 1,1
Lcd chr(0)
End
در فایل زیر 10 مثال همراه فایل پروتوس برای درس امروز موجود می باشد(از شماره 1 تا 6)
برای درک مطالب بالا 4فایل پروتوس نیز اورده شده که نوشتن برنامه برای انها به عهده شماست(از شماره 7 تا 10)(انقدر سعی کنید تا نتیجه بگیرید)

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: جمعه، 14 تير ماه ، 1387 08:32:04 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلامحالا که با کارکرد lcd وپورت ها اشنا شدید نوبت به معرفی سایر دستورات زبان بیسیک که مربوط به avr است می باشد
در اینجا دستورات به 8 قسمت تقسیم شده که در زیر ارده شده است :
1- بدنه یک برنامه در محیط بسکام
2- اعداد و متغییر ها در بسکام
3-دستور ات حلقه و پرش
4-دستورات ایجاد تاخیر
5-زیر برنامه ها و فراخوانی تواب
6-توابع ریاضی و محاسباتی
-توابع تبدیل کده ا و متغییر هل به یکدیگر
8-ریجسترها و ادرس های حافظه

1- بدنه یک برنامه در محیط بسکام:
$REGFILE = micro name
برای شروع یک برنامه در محیط BASCOM ابتدا باید میکرو مورد نظر تعریف گردد . microname نام میکرو مورد استفاده است که می تواند یکی از موارد زیر باشد .
regfile = “ At12def.dat “
$regfile = “ At15def.dat “
$regfile = “ At22def.dat “
$regfile = “ At26def.dat “

$regfile = “ 2323def.dat “
$regfile = “ 2333def.dat “
$regfile = “ 2343def.dat “
$regfile = “ 4414def.dat “
$regfile = “ 4433def.dat “
$regfile = “ 4434def.dat “
$regfile = “ 8515def.dat “
$regfile = “ 8535def.dat “

$regfile = “ M8535.dat “
$regfile = “ M8515.dat “
$regfile = “ M8def.dat “
$regfile = “ M103def.dat “
$regfile = “ M16def.dat “
$regfile = “ M163def.dat “
$regfile = “ M161def.dat “
$regfile = “ M32def.dat “
$regfile = “ M323def.dat “
$regfile = “ M603def.dat “
$regfile = “ M64def.dat “
$regfile = “ M128def.dat “
که از سطر اول به ترتیب:
معرفی میکروی تاینی دوازده 12 ATtiny
معرفی میکروی تاینی پانزده 15 ATtiny
معرفی میکروی تاینی بیست و دو 22 ATtiny
معرفی میکروی تاینی بیست وشش 26 ATtiny


معرفی میکروی AT90S2323
معرفی میکروی AT90S2333
معرفی میکروی AT90S2343
معرفی میکروی AT90S4414
معرفی میکروی AT90S4433
معرفی میکروی AT90S4434
معرفی میکروی AT90S8515
معرفی میکروی AT90S8535

معرفی میکروی ATMEGA8535
معرفی میکروی ATMEGA8515
معرفی میکروی ATMEGA8
معرفی میکروی ATMEGA103
معرفی میکروی ATMEGA16
معرفی میکروی ATMEGA163
معرفی میکروی ATMEGA161
معرفی میکروی ATMEGA32
معرفی میکروی ATMEGA323
معرفی میکروی ATMEGA603
معرفی میکروی ATMEGA64
معرفی میکروی ATMEGA128
برای مشخص کردن فرکانس کریستال استفاده شده برحسب هرتز از دستور زیر استفاده می نماییم .
$CRYSTAL = X
X فرکانس کریستال استفاده شده بر حسب هرتز است .
مثال
$CRYSTAL = 14000000 ’14MHZ external osc
$CRYSTAL = 8000000 ’8MHZ external osc
$CRYSTAL = 1000000 ’1MHZ internal osc
گاهی نیاز است یادداشتهایی برای اطلاعات بیشتر در برنامه اضافه شود .
‘ یا REM
یادداشتها و نوشته های بعد از این دستور غیر فعال بوده و در برنامه برای یادداشت به کار می رود و کامپایل نخواهد شد و همچنین به رنگ سبز در می آیند .
همچنین می توان از دو علامت برای شروع ‘( و از ‘) برای اتمام متن یادداشتی استفاده نمایید .
مثال
REM END PROGRAM
Or
‘ F=14MHZ
دستور END
این دستور دراخرین خط برنامه قرار می گیرد و هنگامی که برنامه به این خط می رسد،تمام وقفه ها غیر فعال شده و یک حلقه بی نهایت تولید و برنامه خاتمه می یابد .

مثال
LCD "QWER"
END ‘ end program execution and disable all interrupt
در کل بدنه یک برنامه در محیط بسکام به صورت زیر است
در ابتدا باید میکر و معرفی شود
بعد باید کریستال برحسب هرتز معرفی شود
بعد باید امکانات رها اندازی شود (امکاناتی از قبیل ADC ,LCD و...)
بعداز ان نوبت به استفاده از امکانات می رسد
و در نهایت پایان برنامه.
مانند مثال زیر
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Lcd "1NAFAR"
End

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: جمعه، 14 تير ماه ، 1387 09:57:45 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

2- اعداد و متغییر ها در بسکام :
دستور زیر بعد یک متغیر را نشان میدهد . با این دستور می توانید متغیرهایی که در برنامه به کار برده می شوند تعریف کنید .
DIM X AS data type
X نام متغیری که در برنامه بکار برده میشود . Data type نوع داده است که می تواند طبق موارد زیرSTRING ,WORD ,LONG ,INTEGER ,BYTE, BITیا SINGLE باشد .
در صورت استفاده از متغیر STRING , بیشترین طول آن نیز باید نوشته شود
BIT این متغییر میتواند صفر یا یک باشد
BYTE این متغییر میتواند از0 تا 255 تغییر کند و فقط شامل اعداد صحیح مثبت می شود
WORD این متغییر میتواند از0 ت65535 تغییر کند و فقط شامل اعداد صحیح مثبت می شود

INTEGER این متغییر میتواند از-32767 تا +32767 تغییر کند و فقط شامل اعداد صحیح مثبت و منفی می شود

LONG این متغییر میتواند از-214783648 تا +214783647 تغییر کند و فقط شامل اعداد صحیح مثبت و منفی می شود
SINGLE این متغییر میتواند از-45^10*1.5 تا 38^10* 3.4تغییر کند و فقط شامل اعداد صحیح واعشاری مثبت و منفی می شود
STRING این متغییر میتواند از0 تا 245 بایت تغییر کند تغییر کند و باری حروف وعلائم استفاده می شود
مثال
DIM B AS BIT ‘BIT can be 0 or 1
DIM A AS BYTE ‘BYTE range from 0 - 255
DIM K AS INTEGER
DIM MICRO AS WORD
DIM HASAN AS LONG
مثال
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
Dim Ali As Word
Dim Wqew As Byte
A = 10
Wqew = 5
Locate 1 , 1
Ali = A + Wqew
Lcd Ali
Locate 2 , 1
Ali = A * Wqew
Lcd Ali
End



نکته در صورتی که در یک متغییر بیشتر از بعدش مقدار قرار دهید با خطا مواجه میشوید
مثال
DIM A AS BYTE
A=300
مورد بالا غلط می باشد چون بایت می تواند از 0 تا 255 تغییر کند ومقدار 300 بیشتر از بعد بایت است

دستور CONST
برای تعریف یک ثابت از این دستور استفاده می شود :
CONST SYMBOL= NUMCONST
CONST SYMBOL= STRINGCONST
CONST SYMBOL= EXPRESSION
SYMBOL نام ثابت و NUMCONST مقدار عددی انتساب یافته به SYMBOL , STRINGCONST رشته انتساب یافته به SYMBOL و EXPRESSION میتواند عبارتی باشد که نتیجه آن به SYMBOL انتساب یابد .

مثال
CONST S = “TEST”
CONST A = 5
CONST B1 =&B1001
CONST X = (B1 * 3 ) + 2
دستور ALIASاز این دستور برای تغیر نام متغیر استفاده می شود .

مثال
DIM Q AS BIT
Q ALIAS PORTB.1
حال شما می توانید بجای PORTB.1 از متغیر Q استفاده نمایید .
SET Q ‘is equal with SET PORTB.1
دستور INSTR
این دستورمحل و موقعیت یک زیر رشته را در رشته دیگر مشخص می کند .
Var =Instr (start , String ,Subset )
Var =Instr (String ,Subset )
Var عددی است که مشخص کننده محل SUBSTR در رشته اصلی STRING می باشد و زمانیکه زیر رشته مشخص شده در رشته اصلی نباشد صفر برگردانده می شود .START نیز عددی دلخواه است که مکان شروع جستجو زیر رشته در رشته اصلی را مشخص می کند . در صورتیکه START قید نشود تمام رشته از ابتدا جستجو می شود . رشته اصلی تنها باید از نوع رشته باشد ولی زیر رشته (SUBSTR ) می تواند رشته و عدد ثابت هم باشد .
مثال
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 15
Dim Z As String * 5
Dim Bp As Byte
Cls
S = "This is a test "
Z = "is"
Bp = Instr(s , Z )
Lcd Bp
Bp = Instr(4 , S , Z )
Lcd Bp
End
دستور INCR و دستور DECR
INCR X
DECR X
دستور INCR یک واحد به متغییر عددی X می افزاید و دستور DECR یک واحد از ان کم میکند

مانند
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
Dim B As Long
Dim Bp As Byte
Do
Incr A
Decr B
Locate 1 , 1
Lcd B
Locate 2 , 1
Lcd A
WAITMS 500
Loop
End

دستور CHECKSUM
این دستور مجموع کد دسیمال اسکی رشته X را برمی گرداند که البته اگر مجموع کد اسکی رشته از عدد 255 بیشتر شود مقدار 256 از مجموع کم می شود .

مثال
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 10                                        ' Dim Variable
S = "test"
Locate 1 , 1                                                ' Assign Variable
Lcd Checksum(s)                                             ' print value (192 )
S = "testNext "
Locate 2 , 1                                                ' assign variable
Lcd Checksum(s)                                             ' Print value 127 (127=383 - 256 )
End

دستورات HIGH و LOW
LOW این دستور (LSB (least significant byte یک متغیر را برمی گرداند .
HIGH این دستور( MSB (most significant byte یک متغیر را برمی گرداند .
Var = HIGH ( s)
MSB متغیر S در Var قرار می گیرد .

Var = LOW ( s)
LSB متغیر S در Var قرار می گیرد
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim I As Integer
Dim Z As Byte
Dim Q As Byte
Cls
I = &h1001
Z = Low(i)                                                 ' is 1
Locate 1 , 1
Lcd Z
Q = High(i)                                                 'IS 16
Locate 2 , 1
Lcd Q
End

دستور LCASE و دستور UCASE
دستور LCASE : این دستور تمام حروف رشته مورد نظر را تبدیل به حروف کوچک می کند .
(Target = Lcase (source
تمام حروف رشته source کوچک شده و در رشته target جای داده می شود .
دستور UCASE: این دستور تمام حروف رشته مورد نظر را تبدیل به حروف بزرگ می کند .
(Target = Ucase (source
تمام حروف رشته source بزرگ شده و در رشته target جای داده می شود .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 12
Dim Z As String * 12
Dim Q As String * 12
S = "Hello World "
Q = "QWERTGFDD"
Z = Ucase(s )                                               'Z = HELLO WORLD
Locate 1 , 1
Lcd Z
Z = Lcase(q)
Locate 2 , 1
Lcd Z
End

دستور RIGHT و دستور LEFT
دستور RIGHT:با این دستورقسمتی از یک رشته را جدا می کنیم .
(Var = RIGHT (var1 , n
از سمت راست رشته var1 به تعداد کاراکتر n , رشته ای جدا شده و در رشته var قرار می گیرد .
دستور LEFT: با این دستور کاراکترهای سمت چپ یک رشته را به تعداد تعیین شده جدا می کند .
(Var = LEFT(var1 , n
از سمت چپ رشته var1 به تعداد کاراکتر n , رشته ای جدا شده و در رشته var قرار می گیرد .
مانند
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 15 , Z As String * 15
Cls
S = "abcdefg"
Z = Left(s , 5)                                             'Z = abcde
Locate 1 , 1
Lcd Z
Z = Left(s , 1)                                             'Z = a
Locate 1 , 8
Lcd Z
Z = Right(s , 5)                                            'Z = CDEFG
Locate 2 , 1
Lcd Z
Z = Right(s , 2)                                            'Z = FG
Locate 2 , 8
Lcd Z


End

دستور LEN :
این دستور طول یا بعبارتی تعداد کاراکترهای یک رشته را برمیگرداند .
(Var = Len(string
طول رشته string در متغیر عددی VAR قرار می گیرد . رشته string نهایتا می تواند 255 بایت طول داشته باشد . توجه داشته باشید که فضای خالی (SPACE BAR) خود یک کاراکتر به حساب می آید .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 12
Dim A As Byte
Cls
S = "test"
A = Len(s)
Locate 1 , 1                                                ' 4
Lcd Len(s)
S = "test  "
A = Len(s)
Locate 2 , 1
Lcd A                                                       '6
End

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: جمعه، 14 تير ماه ، 1387 10:53:31 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

دستور LTRIM:
این دستور فضای خالی یکرشته را حذف می کند .
(Var = LTRIM( Q
فضای خالی رشتهQ برداشته می شود و رشته بدون فضای خالی در متغیر رشته ای var قرار می گیرد .
مانند
Code:
$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 10
Dim A As String * 10
Cls
S = "Q    Q  1"
Locate 1 , 1
A = Ltrim(s)
Lcd A                                                       'QQ1
S = "Q  Q Q"
Locate 2 , 1
Lcd Ltrim(s)                                          'QQQ
End

دستور SWAP:
SWAP var1 , var2
با اجرای این دستور محتوای متغیر var1 در متغیر var2 و محتوای متغیر var2 در متغیر var1 قرار می گیرد .

دو متغیر var1 وvar2 بایستی از یک نوع باشند .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
Dim B As Byte
Cls

A = 10
B = 20
Swap A , B                                                 'swap them
Locate 1 , 1
Lcd A                                                       'A=20
Locate 2 , 1
Lcd B                                                       'B=10
End

دستور MID :
با این دستور می توان قسمتی از یک رشته را برداشت و یا قسمتی از یک رشته را با قسمتی از یک رشته دیگر عوض کرد .
VAR=MID(VAR1,ST[,L])
1- قسمتی از رشته var1 با شروع از کاراکتر stام و طول L برداشته شده و در متغیر var قرار می گیرد.
MID(VAR,ST[,L])=VAR1
2- رشته var1 در رشته var با شروع از کاراکتر St ام و طول L قرار می گیرد .
در صورت قید نکردن گزینه اختیاری L ,بیشترین طول در نظر گرفته می شود .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 10
Dim Z As String * 10
Cls
S = "adswer"
Z = Mid(s , 2 , 3)
Locate 1 , 1
Lcd Z                                                       'lcd "dsw"
Z = "5685"
Mid(s , 2 , 3) = Z
Locate 2 , 1
Lcd S                                                       'lcd "a568er"
End

دستور space :
برای ایجاد فضای خالی ازاین دستور استفاده می شود .
Var = SPACE (x )
X تعداد فضای خالیست که بعنوان رشته در متغیر رشته ای var جای می گیرد .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim S As String * 10
Dim Z As String * 10
Cls
S = Space(5)
Z = "qwer"
Locate 1 , 1
Lcd "(" ; S ; Z ; ")"                                       'lcd(     qwer)
End

دستور format :
این دستور یک رشته عددی را شکل دهی می کند .
xt = Format (var , “form”)
varرشته ای است که شکل دهی شود و نتایج در x قرار می گیرد .form نوع شکل دهی است .
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim S As String *10, I As Integer
S = " 123 "
S = Format(s , "      ")
Locate 1 , 1                                                '5 Space
Lcd S                                                       's = "  123"                                        'Two Space First , Then 123
S = "12345"
S = Format(s , "000.000")
Locate 1 , 8
Lcd S                                                       's = "012.345"
S = Format(s , " + ")
Locate 2 , 1
Lcd S                                                       's = "+12345"
End

دستور fusing
از این دستور برای روند کردن رشته های عددی استفاده می شود .
target = Fusing (source , “mask”)
source رشته موردنظر برای شکل دهی و نتایج در target قرار می گیرد .mask نوع شکل دهی است . عمل mask حتما باید با علامت # شروع شود و حداقل باید یکی از علامات # یا & را بعد از ممیز داشته باشد. با استفاده از # عدد روند می شود و در صورت استفاده از & روندی صورت نمی گیرد
مانند
Code:

$regfile = "m32def.dat".
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim S As Single
Dim A As Byte
Cls
S = 10
A = 3
S = S / A
Locate 1 , 1
Lcd S 'lcd "3.33333333333333"
Locate 2 , 1
Lcd Fusing(s , "#.##") 'lcd "3.33
Locate 2 , 8
Lcd Fusing(s , "#.####") 'lcd "3.3333

End

نکته :
برای نشان دادن اعداد به فرم باینری از &b و برای نشان دادن اعداد به فرم هگز از &h استفاده می شود
مانند
0110010&b
&h01ff
در اینجا تمامی دستورات مر بوط به اعداد ومتغییر ها که در زبان بیسیک برای میکرو avr است گفته شد
در درسهای بعدی با این دستورات به صورت کاربردی اشنا می شوید.

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 05:38:04 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

3-دستور ات حلقه و پرش
گاهی نیاز است که یک قسمت از برنامه چندین بار اجرا شود یا در حین اجرای برنامه در یک خط به خط دیگری رجوع شود، برای این کار از دستورات حلقه و پرش که چندین نوع است استفاده میشود
دستور jmp
label: l
برنامه
JMP label
با این دستورات می توان به برچسب label پرش کرد .برچسب label باید با علامت : (colon) پایان یابد و می تواند تا 32 کارکتر طول داشته باشد .
مانند
Code:

$regfile = "m16def.dAt"
$crystal = 8000000
Config Porta = Output
Q:
Set Porta.0
WAitms 600
Reset Porta.0
Waitms 600
jmp q
End

دستور goto
این دستور دقیقا همانند دستور jmp است
مانند
Code:

$regfile = "m16def.dAt"
$crystal = 8000000
Config Porta = Output
Q:
Set Porta.0
WAitms 600
Reset Porta.0
Waitms 600
Goto Q
End

دستور do-loop
فرم کلی دستورات DO … LOOP بصورت زیر می باشد .
DO
برنامه
LOOP
این حلقه یک حلقه بینهایت است که با EXIT DO می توان از درون حلقه خارج شد و اجرای برنامه در خط بعد از حلقه ادامه یابد .
همچنین با دستور زیر میتوان تعداد دفعات اجرای ان را معین کرد
do
برنامه
Loop Until A = x
که A یک متغییر از جنس دلخواه و x تعداد دفعات تکرار است
در مثال زیر در هر بار تکرار حلقه یک واحد به A اضافه می گردد و هرگاه مقدار A به 10 رسید خط بعد از حلقه اجرا می گردد
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Porta = Output
Dim A As Byte

Do
Incr A
Set Porta.0
WAitms 600
Reset Porta.0
Waitms 600
Loop Until A = 10
Toggle Porta
End


دستور FOR-NEXT
فرم کلی دستورات FOR .. NEXT بصورت زیر می باشد .
[FOR var = start TO end [STEP VALUE
برنامه
NEXT var
Var بعنوان یک کانتر عمل می کند که start مقداراولیه آن و end مقدار پایانی است و هر دو می توانند یک ثابت عددی یا متغیر عددی باشند . Value مقدار عددی step را نشان می دهد که می تواند مثبت یا منفی باشد . وجود نام var بعد از NEXT الزامی نیست .
مانند
Code:

$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
Dim B As Byte
Dim C As Integer

For A = 1 To 10 Step 2
Locate 1 , 1
Lcd  A
Next A
For C = 10 To -5 Step -1
Locate 1 , 6
Lcd C
Next
For B = 1 To 10
Locate 2 , 1
Lcd B
Next

End

دستور WHILE-WEND

WHILE condition
statements
WEND
دستورالعمل While-Wend تشکیل یک حلقه تکرار می دهد که تکرار این حلقه تا زمانی ادامه می یابد که عبارت بکاربرده شده نتیجه را FALSE کند و یا مقدار صفر بگیرد . دستورالعمل while بصورت ورود به حلقه به شرط می باشد , بنابراین While ممکن است در حالتهایی اصلا اجرا نشود .
بخش statement تا وقتی که حاصل condition صفر یا FALSE نشده است تکرار خواهد شد .
مانند
Code:

$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
A = 1
While A <10
Locate 1 , 1
Lcd A
Incr A
Waitms 600
Wend

End

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 05:50:43 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

4-دستورات ایجاد تاخیر:
دستور wait
برای ایجاد تاخیر در برنامه از دستور wait استفاده میشود
دستور wait به سه شکل زیر است:
Waitus x این دستور برای ایجاد تاخیر میکرو ثانیه ای می باشد .x مقدار تاخیر میباشد که بین 1تا 65535 میکرو ثانیه می باشد.مانند
Waitus 500 تاخیر به مدت 500 میکرو ثانیه
Waitms x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که بین 1تا 65535 میلی ثانیه می باشد.مانند
Waitms 720 تاخیر به مدت 700 میلی ثانیه
Wait x این دستور برای ایجاد تاخیر میلی ثانیه ای می باشد .x مقدار تاخیر میباشد که عددی بیشتر از یک ثانیه می باشد.مانند
Wait 1000 تاخیر به مدت 1000 ثانیه
دستور DELAY :
این دستور در هر جا که استفاده شود یک تاخیر 1میلی ثانیه ایجاد می شود
توجه کنید که هر جا دستور wait به کار رود برنامه در انجا به اندازه زمان مورد نظر متوقف می شود
مانند
Code:

$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Qwer:
Lcd "fjghfgf"
Waitms 400
Cls
Lcd "123678"
Wait 1
Cls
Lcd "fkjjkb"
Waitus 1000
Cls
DelAy
Goto Qwer
End

در صورتی که کریستال معرفی شده در برنامه با کریستال استفاده شده یکی نباشد دستورات تاخیر به درستی اجرا نمی شود مثلا ممکن است به جای1 ثانیه 3 ثانیه تاخیر ایجاد شود

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 06:27:42 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

5-زیر برنامه ها و فراخوانی توابع
معرفی تابع DECLARE FUNCTION
از این دستور برای معرفی تابع در ابتدای برنامه استفاده می شود . زمانی که بخواهیم تابعی را معرفی کنیم بایستی تابع معرفی شده باشد . در صورت استفاده از تابع می بایستی یک داده برگردانده شود .
DECLARE FUNCTION TEST[( [BYREF/BYVAL]var as type1)] As type2
TEST نام تابع موردنظر است . انتقال داده بصورت BYVAL باعث می شود که یک کپی از متغیر به تابع فرستاده شود و در محتوای آن هیچ تغیری ایجاد نشود .ولی در حالت BYREF آدرس متغیر ارسال و تغیرات در آن اثر می گذارد و داده برگشتی در صورت انجام عملیات بر روی آن با مقدار اولیه خود برابر نخواهد بود . در صورت عدم استفاده از گزینه [BYREF/BYVAL] بصورت پیش فرض داده بصورت BYREF فرستاده می شود. Type1 نوع داده ارسال شده وtype2 نوع داده برگشتی است . که هر دو می توانند داده نوع BYTE , INTEGER, WORD , LONG ,STRING باشند .
مثال

در مثال زیر I بصورت BYVAL فرستاده شده است بنابراین یک کپی از مقدار I به زیر تابع فرستاده می شود و هیچ تغیری در محتوای آن ایجاد نمی شود. S بصورت BYREF فرستاده می شود و تغیر در آن صورت می گیرد .فراخوانی تابع MYFUNCTION باK و Z از نوع داده INTEGER و STRING است و مقدار برگشتی از نوع INTEGER است که در متغیر T قرار می گیرد . شما می توانید در محدوده تابع یک متغیر محلی تعریف کنید .
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Declare Function Myfunction (Byval I As Integer , S As String )As Integer
Dim K As Integer , Z As String*10, T As Integer
K = 5 : Z = "123 " : T = Myfunction(k , Z )
LocAte 1 , 1
Lcd T                                                       '25
Locate 1 , 7
Lcd Z                                                       'Bascom
Locate 2 , 1
Lcd K                                                       '5
End
Function Myfunction (Byval I As Integer , S As String )As Integer
         local P As Integer
Functions:
         P = I * 5
         I = 5
         S = "Bascom "
         T = P
          Myfunction = T

End Function

معرفی زیر برنامه DECLARE SUB
از این دستور برای معرفی زیر برنامه استفاده می شود . زیر برنامه ای که قصد فراخوانی آن را داریم بایستی در ابتدای برنامه یا حداقل قبل از فراخوانی آن معرفی شده باشد .
DECLARE SUB TEST[( [BYREF/BYVAL] var as type)]
زیر برنامه برخلاف تابع مقداری برنمی گرداند .در زمان ارسال داده بصورت BYREF آدرس داده به زیر برنامه فرستاده می شود و در محتوای آن تغیر ایجاد می شود .ولی در حالت BYVAL یک کپی از داده فرستاده می شود و به هیچ وجه در محتوای آن تغیری ایجاد نمی شود .TEST نام زیربرنامه و VAR نام متغیر ارسالی به زیر برنامه و TYPE نوع آن است که می تواند داده نوع BYTE , INTEGER, WORD ,STRING باشند .
برای نوشتن زیر برنامه ابتدا نام آنرا توسط دستور زیر تعریف کرده و سپس شروع به نوشتن زیربرنامه می کنیم .
SUB Name [ ( var1 ) ]
NAME نام زیربرنامه که باید توسط دستور Declare معرفی شده باشد و با دستور End Subپایان می یابد .
مانند
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim A As Byte , B1 As Byte , C As Byte
Declare Sub Test ( A As Byte )
A =1 : B1 = 2 : C = 3
Lcd A ; B1 ; C                                              '123 will print
Call Test (B1)

End

Sub Test(a As Byte )
Locate 2 , 1
             Lcd A ; B1 ; C                                 '123 will print
End Sub

تابع فراخوانی CALL
توسط این دستور زیر برنامه یا تابعی را فراخوانی می کنیم .
CALL TEST( VAR1 , VAR2 , …)
VAR1 , VAR2 متغیرهایی که به زیر برنامه انتقال می یابند , هستند . می توان زیر برنامه را بصورت زیر نیز فراخوانی کرد .
TEST VAR1 , VAR2
لازم بتذکر است که نام زیر برنامه قبل از فراخوانی آن , باید توسط دستور Declare فراخوانی شود. اگر بخواهیم عدد ثابت را به زیر برنامه انتقال دهیم بایستی حتما با آرگومان BYVAL آن را انتقال دهیم .
مانند
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte , B As Byte
Declare Sub Test ( B1 As Byte , Byval B2 As Byte )
A =65
Call Test ( A , 5 )
Test A , 5
Locate 1 , 1
lcd A                                                     ' will print A = 10
End

Sub Test(b1 As Byte , Byval B2 As Byte )
B1 = 10
B2 = 15
Locate 1 , 8
Lcd B1
Locate 2 , 1
Lcd B2

End Sub

بکارگیری متغیر محلی یا LOCAL
از این دستور برای تعریف متغیر محلی در زیربرنامه استفاده می کنیم .
LOCAL VAR As Type
VAR نام متغیر و type نوع داده است که می توانند STRING , WORD , INTEGER , BYTE , SINGLE , LONG باشند نوع داده های ERAM , SRAM , XRAM و آرایه ها نمی توانند محلی تعریف شوند.
یک متغیر محلی یک متغیر موقت است که فقط در هنگام فراخوانی زیر برنامه مربوطه برای آن فضا در نظر گرفته می شود و با برگشت از زیر برنامه عمر متغیر (LIFE TIME ) به اتمام می رسد .

لازم بتذکر متغیرهای بیتی نمی توانند بصورت محلی تعریف شوند .مانند
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Declare Sub Test2
Do
Call test2
Loop
End

Sub Test2
     Local A As Byte
     Incr A
     Lcd A
End Sub


دستور GOSUB
این دستور به زیربرنامه پرش می کند و اجرای برنامه را از آدرس برچسب ادامه می دهد .
GOSUB label
LABEL نام برچسبی زیر برنامه است که به آن پرش می شود .توسط دستور RETURN می توان از SUB برگشت کرد و اجرای برنامه بعد از دستور GO SUB ادامه می یابد .
Code:
  $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim X As Byte
Gosub R

End

R:
X = X + 2
Lcd X
Return

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 19:49:20 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

6-توابع ریاضی و محاسباتی
از عملگرهای ریاضی زیر می توان در محیط BASCOM استفاده کرد و عملیات ریاضی خود را انجام داد.
* علامت ضرب
/ علامت تقسیم
+ علامت جمع
- علامت تفریق
. علامت ممیز
> علامت بزرگتر از
< علامت کوچکتر از
= علامت مساوی
^ علامت توان
<= علامت کچکتر یا مساوی
=> علامت بزرگتر یا مساوی
<> علامت مخالف
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim Q As Byte
Dim W As Byte
Dim E As Byte
Dim R As Byte
Dim T As Byte
Q = 2
W = Q + 3
E = W * Q
R = E ^ E
T = E - r
Lcd T                                                       't=10
End

تابع ABS :
VAR =Abs (VAR2
این دستور به معنای ریاضی|VAR = |VAR2 (قدرمطلق) است .
مانند
Code:

 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Integer , C As Integer
A = -100
C = Abs(a)                                                  'c=|a|
Lcd C                                                       'C= 100


End

تابع EXP :
Target = Exp (source)
Target برابر با e بتوان source است . Target متغیری از نوع داده SINGLE است .
مانند
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim X As Single
X= Exp( 1.1)
Locate 1 , 1
lcd X                                                     'x = 3.004166124
X = 1.1
X = Exp(x)
Locate 2 , 1
lcd X                                                     'x = 3.004166124
End

تابع LOG :این دستور لگاریتم طبیعی یک داده از نوع SINGLE را برمی گرداند .

(Target = Log (source
لگاریتم متغیر یا ثابت source از نوع داده single گرفته می شود .ودر متغیر target قرار می گیرد .
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim X As Single
X = Log(100)
Locate 1 , 1
Lcd X                                                       'x = 4.6051
X = Log(1000)
Locate 2 , 1
Lcd X                                                       'x = 6.9077
End

تابع RND :
این دستور یک عدد را تصادفی برمی گرداند .
(VAR= RND (limit
عدد تصادفی بین 0 و limit بدست آمده و در متغیر var قرار می گیرد . با هربار استفاده از این دستور عدد مثبت تصادفی دیگری بدست خواهد آمد .
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim X As Byte
Do
X = Rnd(100)
Lcd X
Waitms 500
Loop

End

توابع مثلثاتی:
)var=sin\cos\tan(source
این دستور سینوس یا کسینوس یا تانژانت ثابت یا متغیر source را در متغیر var از نوع SINGLE قرار می دهد . تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim X As Single
X = Cos(90)
Locate 1 , 1
Lcd X
X = Sin(90)
Locate 1 , 8
Lcd X
X = Tan(90)
Locate 2 , 1
Lcd X
End

توابع مثلثاتی هایپربولیک
(Var = COSH\sinh\tAnh( source
این دستور کسینوس یا سینوس یا تانژانت هایپربولیک ثابت یا متغیر source را در متغیر var از نوع SINGLE قرار می دهد . تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim X As Single
Dim Q As Single
Q= .512
X = Cosh(q)
Locate 1 , 1
Lcd X
X = Sinh(q)
Locate 1 , 8
Lcd X
X = Tanh(q)
Locate 2 , 1
Lcd X
End

معکوس توابع مثلثاتی(Arc)
Var = A \sin\cos\TN( source
این دستور آرک سینوس یا کسینوس یا تانژانت ثابت یا متغیر source را در متغیر var از نوع SINGLE قرار می دهد . تمام دستورات مثلثاتی با رادیان کار می کنند و ورودی این دستور بایستی رادیان باشد .
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim X As Single
Dim Q As Single
Q= .512
X = Acos(q)
Locate 1 , 1
Lcd X
X = Asin(q)
Locate 1 , 8
Lcd X
X = Atn(q)
Locate 2 , 1
Lcd X
End

تابع RAD2DEG
Var =RAD2DEG( single
برای تبدیل رادیان به درجه از این دستوراستفاده می شود .
رادیان single به درجه تبدیل می شود و در متغیر VAR از نوع داده SINGLE قرار می گیرد
تابع DEG2RAD
Var =DEG2RAD( single
برای تبدیل درجه به رادیان از این دستوراستفاده می شود .
زاویه single به رادیان تبدیل می شود و در متغیر VAR از نوع داده SINGLE قرار می گیرد
مانند
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5

Dim X As Single
Dim Q As Single
Q = 180
X = Deg2rad(q)
Locate 1 , 1
Lcd X
Q = Rad2deg(x)
Locate 2 , 1
Lcd Q

End

تابع ROUND
Var =ROUND( x
متغیر یا داده X از نوع SINGLE روند شده و در متغیر VAR از نوع داده SINGLE قرار می گیرد .
مانند
Code:

 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim X As Single
Dim Q As Single
X = 2.8
Q = 5.2
Locate 1 , 1
Lcd Round(x)
Locate 2 , 1
Lcd Round(q)
End





Wink

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 20:33:33 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

7-توابع تبدیل کده ا و متغییر هل به یکدیگر
دستور ASC
Var = ASC (string
این دستور اولین کاراکتر یک متغیر از نوع داده STRING را به مقدار اسکی آن تبدیل می کند .


دستور HEX
Var = Hex (x)
این دستور یک داده از نوع BYTE,INTEGER , WORD , LONG را به مقدار هگزادسیمال تبدیل می کند .
مقدار HEX متغیر یا ثابت X در متغیر VAR جای می گیرد .


دستور HEXVAL
Var = HexVal (x)
این دستور یک داده هگزدسیمال را به مقدار عددی تبدیل می کند .
مقدار عددی داده هگزدسیمال X که می تواند LONG , WORD , INTEGER , BYTE باشد در متغیر VAR جای می گیرد

دستور MAKEBCD
Var1 = MAKEBCD (Var2)
این دستور متغیر یا ثابت var2 را تبدیل به مقدار BCD اش می کند و در متغیر var1 جای می دهد .
دستور MAKEDEC
Var1 = MAKEDEC (Var2)
برای تبدیل یک داده BCD نوع INTEGER , WORD , BYTE به مقدار DECIMAL از این دستوراستفاده می شود .مقدار دسیمال متغیر یا ثابت var2 در متغیر var1 جای می گیرد .


دستور MAKEINT
Varn = MAKEINT (LSB , MSB)
این دستور دو بایت را به هم متصل می کند و یک داده نوع WORD یا INTEGER می سازد که LSB بایت کم ارزش و MSB بایت پر ارزش متغیر دو بایتی Varn را تشکیل می دهد .
Varn = (256*MSB )+LSB

دستور STR
Var = STR (X )
با این دستور می توان یک متغیر عددی ( X) را به رشته (VAR) تبدیل کرد .


دستور VAL
Var = VAL (S )
با این دستور می توان یک رشته (S) را به متغیر عددی (VAR) تبدیل کرد .

دستور STRING
Var = STRING (m , n )
این دستور کد اسکی m را با تعداد تکرار n تبدیل به رشته کرده و در متغیر var قرار می دهد . در صورت قرار دادن m =0 یک رشته بطول 255 کاراکتر تولید می شود و.قرار دادن n = 0 قابل قبول نیست .

دستور BIN2GREY
Var1 = BIN2GREY (Var2 )
متغیر var2 که می تواند داده ای از نوع WORD , INTEGER , BYTE , LONG باشد به کد گری تبدیل شده و در متغیر VAR1 قرار می گیرد .

دستور GREY2BIN
Var1 = grey2bin (Var2 )
کد گری var2 به مقدار باینری تبدیل شده و در متغیر var1 که می تواند داده ای از نوع WORD , INTEGER , BYTE , LONG باشد قرار می گیرد .


مثال برای موارد بالا
Code:
 $regfile = "m16def.dAt"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , _
Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Dim A As Byte
Dim S As String * 10
S = "ABC"
A = ASC(s)

Locate 1 , 1
Lcd A

S = Hex(a)
Locate 1 , 8
Lcd S

A = Hexval(a)
Locate 2 , 1
Lcd S

A = 50
A = Makebcd (A)
Locate 2 , 8
Lcd A

End

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 18 تير ماه ، 1387 20:40:34 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
دستورات گفته گردید
حالامو قع کار کردن با اوناست
مورد بعد راه اندازی 7 سگمنت است
(دستورات حافظه در بخش های بعدی)

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 19 تير ماه ، 1387 12:56:16 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

7سگمت
این قطعات برای نمایش اعداد و حروف انگلیسی و بعضی ار علائم به کارمیرد
دراینجا ابتدا کار با 7سگمنت معمولی گفته میشود و دربحث بعدی 7سگمنت مالتی پلکس
در زیر عکس این قطعه را مشاهده میفرمایید

این قطعات از 8 led تشکیل می شود که 7تا از انها نمایشگر هستند ویکی به عنوان ممیز به کار میرود
این led ها ازداخل پایه های کاتد یا اند انها به هم متصل است که به نوع اول کاتد مشترک و به نوع دوم اند مشترک گفته میشود
در زیر می خواهیم عدد 8 را روی 7سگمنت کاتد نمایش دهیم:
برای نمایش عدد 8 باید همه led ها رو شن شوند پس برای 7 سگمنت کاتد مشترک باید انها را 1 کنیم (5ولت بدهیم) و برای 7 سگمت اند مشترک باید انها را 0 کنیم (زمین )

مثل همیشه اولین خط برنامه معرفی کریستال و میکر است
Code:
$regfile = "m16def.dAt"
$crystal = 8000000

در مرحله بعد پورتی که 7سگمنت به ان وصل میشود به عنوان خروجی تعریف میگردد(در اینجا 7سگمنت به پورت d وصل میشود)
Code:
config PORTD= OUTPUT

مرحله بعد قراردادن کد 7سگمت درپورت d است
Click to view this image at its original size
Click on the image to view it at its original size
در شکل بالا نححو بدست اوردن کد برای عدد 8 وجود دارد
از انجا که 7 سگمت مورد استفاده کاتد مشترک است ،پس
Code:
Portd = &B1111111

و اخرین خط برنامه دستور END است
Code:
END

مثال 2
میخاهیم اعداد 0 تا 2 را با تاخیر یک ثانیه روی 7 سگمنت نمایش دهیم
مانند برنامه قبلی کریستال ومیکرو را معرفیمیکنیم و پورت D را به عنوان خروجی قرار میدهیم
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portd = Output

مرحله بعد قرار دادن کد اعداد برای 7 سگمنت است
اولین عدد 0 است برای عدد صفر تمام LED ها به جز G رو شن هستند پس کد 0 برای 7 سگمنت می شود B1111110&
پس:
Code:
Portd = &B1111110

قرار دادن تاخیر زمانی به مدت 1 ثانیه
Code:
Wait 1

عدد بعدی1است برای عدد 1، LED هاBو Cرو شن هستند وبقیه خاموش .پس کد 1 برای 7 سگمنت می شود B0110000&
Code:
Portd = &B0110000

قرار دادن تاخیر زمانی به مدت 1 ثانیه
Code:
Wait 1

عدد بعدی2است برای عدد 2، LED هاA,B,D,,E,Gرو شن هستند و بقیه خاموش .پس کد 2 برای 7 سگمنت می شود B1101101&
Code:
Portd = &B0110000

قرار دادن تاخیر زمانی به مدت 1 ثانیه
Code:
Wait 1

end
در زیر یک نرم افزار برای ساخت کد 7 سگمنت وجود داره که میتونید دانلود کنید


در ضمن ما میتونید کد های باینری رو به هگز تبدیل کنید کد هگز رو روی پورت قرار بدین
مثلا
b&1010101=h&55
portd=H&55

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 19 تير ماه ، 1387 13:41:24 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

7سگمنت و جدول lookup
در رو ش اول برنامه یه خورده طولانی می شد،امایه رو ش دیگه وجود داره که برنامه رو ساده و کمتر میکنه و ان استفاده از جدول lookup هست
توسط این جدول می توان مقدار دلخواهی را از جدولی برگرداند.
var = LOOKUP(value , label )
Label برچسب جدول و value اندیس داده دلخواه است . داده برگشتنی از جدول در متغیر var قرار می گیرد .value =0 اولین داده در جدول را برمی گرداند وvalue =n داده nام را از جدول برمیگرداند . تعداد اندیس ها و مقدار داده برگشتی به ترتیب نهایتا می تواند 255و 65535 باشد .
میخواهیم عدد 8 را ببا استفاده از این جدول روی 7 سگمنت نمایش دهیم
همانند برنامه های قبلی ابتدا میکرو وکریستال معرفی میگردد پورتی که 7 سگمنت به ان متصل میشود به عنوان خروجی تعریف می شود
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portd = Output

بعد از مراحل اولیه با دستور زیر مقدار جدول را در پورت d قرار میدهیم


Code:
Portd = Lookup(0 , Q)


End
Q:
Data &B1111111

برنامه شمارنده 0تا 9 با جدول lookup وچکونکی کار ان
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portd = Output
Dim Q As Byte
Do

Waitms 1
Portd = Lookup(q , W)
Incr Q
Loop Until Q = 9
End
W:
Data &B1111110 , &B0110000 , &B1101101 , &B1111001 , &B0110011 , &B1011011 , &B1011111 , &B1110000 , &B1111111 , &B1111011

سه خط اول پیکربندی امکانات است
درخط چهارم یک متغییر از جنس بایت معرفی میشود
خط پنجم شروع حلقه do -loop است

در خط ششم یک تاخیر یک ثانیه اجاد میشود
در خط هفتم مقدار qام خوانده شده از جدول w در پورت d قرار میگیرید ،دراینجا چون مقدارq=0 است پس اولین عدد جدولw درپورت d قرار میگیرد (&b1111110) (که بر روی 7سگمت عدد صفررا نشان میدهد)
در خط هشتم یک واحد به متغییر معرفی شده اضافه میگردد(q=q+1) (0+1=1)
خط نهم پایان حلقه do -loop میباشد که یک شرط نیز دران به کار برده شده ، این شرط میگوید هرگاه مقدار q =9 شد حلقه تمام شود وبرنامه از خط بعد از حلقه شروع شود (دراینجا بعد از حلقه پایان برنامه است )
اما درحالتی که q مخالف 9 است برنامه به خط do پرش میکند درانجا یک احد دیگر به q افزوده میشود (q=2) و بعد ازتاخیر یک ثانیه دومین عدد از جدول lookup در پورت d گذاشته میشود (&b0110000)(که عدد یک را روی 7 سگمنت نمایش میدهد )
برنامه تا انجا اجرا میشود که مقدارq=9 شده و برنامهپایان یابد
خط دهم ، خط پایان برنامه است
خط های یازده و دوازده جدول lookup هستند که مقدیر در انها قرار میگیرد

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 19 تير ماه ، 1387 17:52:55 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
برای راه اندازی 7سگمت یه راه دیگه هم وجود داره که نسبت به دو روش قبلی ساده تره و اون استفاده از ایسی 7447 است
ای سی 7447 یه ایسی مبدل کد bcd به کد 7سگمنت هست . برای مثال اگه به وردی این ایسی کد bcd عدد 5 رو بدید در خروجی کد 7 سگمنت مربوط به عدد 5 ظاهر میشه(در این روش مقدار عدد مستقیما روی پورت قرارمیگیرد )
Code:
مانند
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portd = Output
Dim Q As Byte
W:
Do
Portd = Q
Incr Q
Waitms 500
Loop Until Q = 9
Q = 0
jmp w
End

اینم عکس مدار

Click to view this image at its original size
Click on the image to view it at its original size
از اینجا به بعد تا میتونید تمرین کنید و هر مشکلی که داشتید سوال کنید

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 19 تير ماه ، 1387 20:51:54 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
در بحث قبلی با روش های راه اندازی 7 سگمنت تکی اشنا شدید ، در این قسمت میخواهیم چند 7سگمنت را به میکرو متصل کنیم.
فرض کنید میخواهیم عدد 8321 را روی چهار عدد 7سگمنت نمایش دهیم برای این کار چندین راه وجود دارد
1 -چهار 7سگمنت به طور جداگانه به پورتهای میکر وصل شود وهر عدد روی هرکدام از انها نمایش داده شود
مانند برنامه و شکل زیر
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Porta = Output
Config Portb = Output
Config Portc = Output
Config Portd = Output
Portd = &B0110000
Portb = &B1111111
Porta = &B1111001
Portc = &B1101101
End

Click to view this image at its original size
Click on the image to view it at its original size
از روش بالا به دلیل استفاده از پایه های میکرو و دلایل دیگر چندان استفاده نمی شود
2- روش رفرشی یا تازه سازی:
در این روش خطوط دیتای 7سگمنتها به هم متصل گردیده وفقط یک پورت برای دیتای 7سگمنتها(در صورت استفاده از 7447 ، 4پایه)و n پایه برای کنترل n سون سگمنت مورد استفاده قرار میگیرد .
مانندشکل زیر
Click to view this image at its original size
Click on the image to view it at its original size
این روش براساس خطای چشم انسان کارمیکند (در صورتی 25 تصویر(یا بیشتر) پشت سر هم در یک ثانیه پخش شود انسان انها را پیوسته می بیند) بدین صورت که در هرواحد زمانی فقط یکی از 7سکمنت ها روشن است و کد مربوط به ان ارسال می شود ، این کار با سرعت زیادی انجام می شود که افراد متوجه چشمک زدن اعداد نمیشوند
برای مثال می خواهیم عدد8321 رو روی 7 سگمنت مالتی پلکس نشان دهیم
اول عدد 8 را روی 7سگمنت اول نشان می دهیم برای این کار پایه گراند انرا (که به میکرو متصل است )0میکنیم و کد مربوط به عدد 8 برای 7سگمنت را می فرستیم (پایه گراند بقیه 7سگمنتها 1می گردند)
دوم عدد 3 را روی 7سگمنت دوم نشان می دهیم برای این کار پایه گراند انرا (که به میکرو متصل است )0میکنیم و کد مربوط به عدد 3 برای 7سگمنت را می فرستیم (پایه گراند بقیه 7سگمنتها 1می گردند)
سوم عدد 2 را روی 7سگمنت سوم نشان می دهیم برای این کار پایه گراند انرا (که به میکرو متصل است )0میکنیم و کد مربوط به عدد 2 برای 7سگمنت را می فرستیم (پایه گراند بقیه 7سگمنتها 1می گردند)
چهارم عدد 1 را روی 7سگمنت چهارم نشان می دهیم برای این کار پایه گراند انرا (که به میکرو متصل است )0میکنیم و کد مربوط به عدد1 برای 7سگمنت را می فرستیم (پایه گراند بقیه 7سگمنتها 1می گردند)
و کلیه مارد بالا مدام تکرار می گردند
مانند برنامه و مدار زیر
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portc = Output
Config Portd = Output

Do

Portd = &B0000000
Waitms 1
Reset Portc.3
Reset Portc.2
Reset Portc.0
Set Portc.1

Portd = &B0000110
Waitms 1
Reset Portc.0
Reset Portc.3
Reset Portc.1
Set Portc.2


Portd = &B0010010
Waitms 1
Reset Portc.1
Reset Portc.0
Reset Portc.2
Set Portc.3

Portd = &B1001111
Waitms 1
Reset Portc.1
Reset Portc.2
Reset Portc.3
Set Portc.0

Loop
End


Click to view this image at its original size
Click on the image to view it at its original size

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: شنبه، 22 تير ماه ، 1387 17:32:30 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
با استفاده از جدول lookup میتونید برنامه رو کمتر و ساده تر کنید
برای مثال می خواهیم عدد 8321 رو روی 4 عدد 7 سگمنت نشان دهیم
مانند همه برنامه های خطوط اول معرفی میکرو و کریستال پیکر بندی امکانات و معرفی مغییر ها است
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portc = Output
Config Portd = Output

بعد حلقه
Code:
Do
Reset Portc.1
ReSet Portc.2
ReSet Portc.3
Set Portc.0
Portd = Lookup(0 , W)
Waitms 300
ReSet Portc.1
ReSet Portc.3
ReSet Portc.0
Set Portc.1
Portd = Lookup(1 , W)
Waitms 300
ReSet Portc.3
ReSet Portc.2
ReSet Portc.1
Set Portc.2
Portd = Lookup(2 , W)
Waitms 300
ReSet Portc.1
ReSet Portc.3
ReSet Portc.2
Set Portc.3
Portd = Lookup(3 , W)
Waitms 300
Loop

و در اخر پایان برنامه و جدول lookup

Code:
End
W:
Data &B0000000 , &B0000110 , &B0010010 , &B1001111

(مدار این برنامه مانند دار مثال قیلی میبا شد )
تحلیل برنامه :
بعد از خط do پین های c.1,c.2,c.3 صفر میشوند و پین c.0 یک می شود تا 7سگمنت اول روشن شود وبقیه خاموش شوند(در انجا از 7سگمنت اند مشترک استفاده شده است)
بعد از رو شن شدن 7 سگمنت اول کد مربوط به عدد هشت (&B0000000)توسط جدول lookup در پورت d گذاشته می شود
بعد یک تاخیر زمانی کوتاه (1میلی ثانیه )(در اینجا برای دیده شدن عمل رفرش مقدار تاخیر 300 میلی ثانیه گرفته شده است)
پین های c.1,c.2,c.0 صفر میشوند و پین c.1 یک می شود تا 7سگمنت دوم روشن شود وبقیه خاموش شوند
بعد از رو شن شدن 7 سگمنت دوم کد مربوط به عدد سه (&B0000110)توسط جدول lookup در پورت d گذاشته می شود
و این کار برای اعداد 2 و 1 نیز تکرار میگردد
وقتی برنامه به خط loop رسید به do پرش میکند این مراحل مدام تکرار میگردد

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: شنبه، 22 تير ماه ، 1387 18:18:42 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

استفاده از ای سی7447 برای راه انداز 7سگمنت چندتایی
استفاده از ای سی 7447 ساده ترین روش برای راه اندازی 7سگمنتها می باشد، چون علاه براین که تعداد پایه های کمتری ازمیکرو رو اشغال میکنه ،باعث میشه تا نوشتن برناهم راحت و سریع بشه
مثال:
می خواهیم عدد 8321 رو با استفاده از 7447 ری 7سگمنت نمایش بدیم
Code:
$regfile = "m16def.dAt"
$crystal = 8000000
Config Portc = Output
Config Portd = Output
Do
Reset Portc.1
ReSet Portc.2
ReSet Portc.3
Set Portc.0
Portd = 8
Waitms 1
ReSet Portc.1
ReSet Portc.3
ReSet Portc.0
Set Portc.1
Portd = 3
Waitms 1
ReSet Portc.3
ReSet Portc.2
ReSet Portc.1
Set Portc.2
Portd = 2
Waitms 1
ReSet Portc.1
ReSet Portc.3
ReSet Portc.2
Set Portc.3
Portd = 1
Waitms 1
Loop
End

برنامه خیلی ساده شد ،برای نمایش هر عدد فقط کافی اون رو روی پورتی که 7447 بهش وصله بریزی،ای سی میکرو کد bcd عدد مربوط رو روی 4 پایه اول پورت قرار میده و 7447 این کد ها را به کد 7سگمنت تبدیل میکنه
اینم مدار


Click to view this image at its original size
Click on the image to view it at its original size

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: دوشنبه، 31 تير ماه ، 1387 23:26:53 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
کار با 7 سگمنت به پایان رسید
در زیر 4 تا ساعت با 7 سگمنت وجود داره که می تونه مشکلات شما رو حل کنه اما اگه مشکلی بود در قسمت پاسخ به سولات بیسیک بپرسید .


در قسمت بعد با عنواع lcd کار خواهیم کرد .

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 1 مرداد ماه ، 1387 10:45:39 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
قبلا در مورد lcd کارکتری بحث شد ،در زیر این در مورد lcd گرافیکی بحث میشود.
lcd های گرافیگی در نمونه های مختلف در بازار وجود دارد ، این lcd ها دارای پایه های زیر میباشد.
1 -vss : پایه تغذیه lcd که به 0 ولت متصل میشود.
2 -vdd : پایه تغذیه lcd که به 5 ولت متصل میشود.
3 - d0 تا d7 Sadدیتا پورت ) (dataport) این 8 پایه مربوط به دیتای lcd میباشد (lcd اطلاعات را از طریق این 8 پایه رد وبدل میکند)که به یکی از پورت های میکرو که در برنامه مشخص می شود متصل میشود .

4 -controlport : که شامل پایه های زیر است و به یکی از پورت های میکرو که در برنامه مشخص میشود متصل میشوداین پایه ها برای کنترل lcd به کار میروند .
- rst : پایه ریست (باز نشانی) lcd که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
- ce :این پایه برای فعال کردن چیپ lcd است که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
- cd : این پایه مشخص کننده ارسال کد یا دیتا است (بدین صورت که اگر این پایه 1 باشدlcd کد را میگیرد و اگر 0 باشد lcd دیتا را میگیرد (دیتا فرمانها می باشد و کد متن هاو اشکال است ))، که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
- wr :این پایه برای نوشتن در lcd است ، که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
- rd : این پایه برای خوانده از lcd است ، که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
- fs : این پایه برای مشخص کردن فونت lcd است ، که به یکی از پایه های میکرو که در برنامه مشخص میشود متصل میگردد
5 - con یا vo :پایه کنترل کنتراست lcd است که با توجه به نوع lcd به vcc یا -vcc هر ولتاژدیگر متصل میشود
با توجه به مطالب بالا پیکر بندی lcd گرافیکی در بسکام به صورت زیر است
Config GRAPHLCD = type , DATAPORT = port, CONTROLPORT=port , CE = pin , CD = pin , WR = pin, RD=pin, RESET= pin, FS=pin, MODE = mode
type : نام lcd است که متواند یکی از موارد زیر باشد :
240 * 64, 128* 128, 128 * 64 , 160 * 48 , 240 * 128......
Config GRAPHLCD =64*240
port : یکی از پورت های دلخواه میکرو است مانند
DATAPORT = portd, CONTROLPORT=portb
pin : یکی از پایه های دلخواه پورتی است که در قسمت CONTROLPORT مشخص شده است
مثال:
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
mode :مشخص کننده تعداد ستون متنی lcd است که میتواند 6 یا 8 باشد
شرح پایه ها در مثال با لا مطابق زیر است:

Code:
شماره پایه*******محل اتصال**************نام پایه بر  روی lcd
1***************GND ******************** GND
2***************GND ********************GND
3***************5V**********************+5V
4**********9V- *******************-9V potmeter
5************ WR********************PORTC.0
6************RD*********************PO RTC.1
7 ************CE****************** **PORTC.2
8 ************C/D********************PORTC.3
9***********NC ***************** not conneted
10***********RESET******************PORTC.4
 11-18********* D0-D7*******************porta       
19***********FS ********************PORTC.5
20 ******* NC ******************not connected

دستورات مربوط به lcd گرافیکی:
دستور lcd
با این دستور میتوان متن یا کارکتری را بر روی lcd نمایش داد
مانند:
Lcd "MCS Electronics"
Lcd "Mdgdgsdsscs"
دستور locate :
با این دستور میتوان متن یا کاراکتری را در مکان دلخواه بر روی lcd گرافیکی نمایش داد
مانند:
Code:
Locate 16 , 1
 Lcd "write this to the lower line"
Locate 16 , 5
 Lcd "fgghfhghfhgjhj"
   

دستور cls :
با این دستور تمام lcd پاک میشود
با استفاده از دستورCls Text می توان قسمت متنی lcd را پاک کرد
و با دستور Cls graph می توان قسمت گرافیکی را پاک کرد
مانند
Code:
$regfile = "m16def.dat"
$crystal = 8000000
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
Cls
Wait 1
Locate 1 , 1
Lcd "1nafar"
Locate 2 , 1
 Lcd "/*-+234#$%^^&*()"
Locate 3 , 1
 Lcd "1234567890123456789012345678901234567890"
Locate 16 , 1
 Lcd "qwertyuiop"
Wait 2
Lcd "jkfjgfghfdh"
Locate 2 , 20
 Lcd "546g5h574gh"
Locate 3 , 13
 Lcd "hgf547g56jn4h57nj4gf45jh74fg8jm"
Locate 30 , 1
 Lcd "qwertyuiop"
 Wait 2
Cls Text
End

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 1 مرداد ماه ، 1387 11:49:09 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

دستور pset X , Y, value
این دستور یک پیکسل را در مختصات x,y به ازای255 = valueروشن و به ازای0= valueخاموش میکند
مانند:
Pset 10 , 20 , 255
Pset 5, 127 , 255
Pset 10 , 20 , 0
Pset 5, 127 , 0
حداکثر مقدار x,y بستگی به تعداد پیکسل lcd گرافیکی دارد برای مثال در lcd 240*128 حداکثر مقدار x=239 , y=127 است
دستور CURSOR ON / OFF BLINK / NOBLINK
Lcd گرافیکی مانند lcd کاراکتری دارای یک مکان نما می باشد که با دستور زیر میتوان ان را روشن یا خاموش یا چشمک زن یا ثابت قرارداد
Cursor On با این دستور مکان نما روشن می شود (در حالت عادی مکان نما روشن است )
Cursor off با این دستور مکان نما خاموش می شود
Cursor blink با این دستور مکان نما چشمک می زند
Cursor noblink با این دستور مکان نما دیگر چشمک نمی زند
دستور LINE(x0,y0) – (x1,y1), color
با این دستور میتوان در lcd یک خط کشید که(x0,y0) پیکسل شروع خط و(x1,y1) پیکسل پایان خط است وcolor=255 خط با رنگ مشکی و color=0 خطی با رنگ سفید رسم خواهد کرد
مانند:
Code:
       $regfile = "m165def.dat"
$crystal = 8000000
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
Cls
Cursor Blink
Wait 1
Cursor On
Wait 1
Cursor Off
Locate 1 , 1
Lcd "MCS Electronics"
Locate 2 , 1 : Lcd "T6963c support"
Locate 3 , 1 : Lcd "1234567890123456789012345678901234567890"
Locate 16 , 1 : Lcd "write this to the lower line"
Wait 2
Cls Text
Line(0 , 0) -(239 , 127) , 255                              '
Line(0 , 127) -(239 , 0) , 255
Line(0 , 0) -(240 , 0) , 255
Line(0 , 127) -(239 , 127) , 255
Line(0 , 0) -(0 , 127) , 255
Line(239 , 0) -(239 , 127) , 255
Wait 3
Cls Graph
End

دستورCIRCLE(x0,y0) , radius, color
این دستور یک دایره بر روی lcd میکشد،(x0,y0)مرکز دایره و radius شعاع دایره می باشدوcolor=255 دایره با رنگ مشکی و color=0 دایره با رنگ سفید (دایره را پاک میکند) رسم خواهد کرد
دستور SHOWPIC x, y , label
این دستور یک عکس را بر روی lcd گرافیکی نمایش میدهد
دیگر دستورات مانند lcd کارکتری است ...
مراحل نمایش عکس بر روی lcd گرافیکی:

Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 1 مرداد ماه ، 1387 12:47:45 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

اگر عکس مورد نظر رنگی است ان را به محیط فتوشاپ برده و در انجا ان را به عکس سیاه وسفید تبدیل کنید سپس ان را با برنامه point و با پسوند .BMP و در اندازه استاندارد ذخیره کنید (اندازه صفحه نمایش LCD ).
سپس از منوی TOOLS گزینه Graphic Converter را انتخاب کنید ، در پنجره باز شده گزینه load را بزنید و در پنجره باز شده عکس مورد نظر که با پسوند .BMP ذخیره کردید ،باز کنید.
بعد گزینه save را بزنید و فایل را با نام دلخواه وبا پسوند BGF در کنار برنامه ذخیره کنید .
با استفاده از دستور SHOWPICE x, y , labelعکس را در مختصاتx, y نمایش دهید .
label نام برچسبی است که عکی مورد نظر در ان قرار میگیرد
برچسب $bgf "mcs.bgf" اشاره به عکس مورد نظر که در کنار برنامه اصلی قرار گرفته .
مثال:


Back to top
View user's profile Send private message Visit poster's website
1nafar
کاربر ماهر
کاربر ماهر

Joined: Mar 18, 2008
Posts: 1053




Location: www.1nafar.com
55594.32 امتیاز

Items

Status: Offline

PostPosted: سه شنبه، 1 مرداد ماه ، 1387 22:37:47 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

استفاده از کلید وکیبرد کی پد و ... برای avr در محیط بسکام:
استفاده از کلید :
برای اتصال کلید به avr در محیط بسکام روش های مخطلفی وجود دارد که در زیر به بیان هر یک میپردازیم .
استفاده از دستور شرطی if:
کلید ها دارای دو پایه می باشد که یک پایه ان به یکی از پایه های میکرو و دیگری به vccیاgnd متصل میشود با استفاده از دستور شرطی if میتوان فشرده شدن کلید را چک کرد
مثال : در این مثال یک سرکلید به vccو سر دیگر به پورت c پایه 4متصل شده است
Code:
If Portc.4 = 1 Then
Set Porta.0
end IF

در مثال با اگر کلید فشرده شودportc.4 به vcc متصل میگردد(1میشود)
شرط به این قرار است که اگر portc.4 یک شد porta.0 نیز یک شود در غیر این صورت porta.0 صفر بماند
استفاده از دستورDEBOUNCE l
این دستور به فرم زیر است :
DEBOUNCE Pinx.y , state , label
که Pinx.y پایه است که قرار است چک شود (کلید به ان متصل است)و اگر state اجرای دستور را در ازای صفر یا یک بودن پایه مشخص میکند وlabel برجسبی است که در صورت تطابقstate با مقدار ولتاژ پایه به ان پرش میشود .
مانند :
در این مثال یک سرکلید به vccو سر دیگر به پورت c پایه 4متصل شده است
Debounce Pind.0 , 1 ,q
در صورتی که کلید فشرده شود به برجسب q پرش میشود
در این مثال یک سرکلید به gndو سر دیگر به پورت c پایه 4متصل شده است
Debounce Pind.0 , 0 ,q
در صورتی که کلید فشرده شود به برجسب q پرش میشود
مثال:
Code:
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcd = 16 * 2
Config Portc = Input
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Debounce Pinc.0 , 1 , A
If Portc.1 = 1 Then
Lcd "qwer"
End If
End
A:
Lcd "12345"
Return

همیشه پین یا پورتی که کلید به ان متصل میشود به عنوان ورودی تعریف میشود
Code:
Config Portx = Input
Config Pinx.y = Input

Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    ...::: Ir-Micro.Com :::... Forum Index -> برنامه نویسی و مباحث مربوط به AVR All times are GMT + 3.5 Hours
Goto page 1, 2, 3  Next
Page 1 of 3
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum

 
 Jump to:   

Related topics
 Topics   Replies   Author   Views   Last Post 
No new posts آموزش فارسی LAB VIEW 7 85 OBEYD 77192 چهارشنبه، 24 دي ماه ، 1393 09:02:51
OBEYD View latest post
No new posts راه اندازی ال سی دی 16*2 با دو عدد میکرو ام 8 7 mehran_1387 11334 جمعه، 18 مرداد ماه ، 1387 10:56:32
1nafar View latest post
No new posts Thermometer (2x16 lcd)1 دماسنج با 8051 و 2*16 lcd 1 honeyl 11783 سه شنبه، 4 تير ماه ، 1387 01:37:40
bleedingme View latest post
No new posts نرم افزار حرفه اي پروگرامر سري 89 شرکت Atmel به نام Flip 2.2 0 m0jtaba 6499 شنبه، 27 بهمن ماه ، 1386 15:06:57
m0jtaba View latest post
No new posts Identification Code براي S7 V5.2 1 Misaghsepehr 6330 جمعه، 21 دي ماه ، 1386 17:25:13
arsaam View latest post
 


Powered by phpBB © 2001, 2008 phpBB Group

Ported to Platinum 7.6.b.4 V2 by sadeghkhafan

فروشگاه تخصصی برق و الکترونیک ایران میکرو
www.iran-micro.com
PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL.
Powered by Platinum 7.6.b.4 v2
Powered by Platinum 7.6.b.4 v2 Persian

مدت زمان ایجاد صفحه : 1.83 ثانیه