اموزش ميكروكنترلر AVR به زبان ساده(Basic)-قسمت هفتم
جمعه 3 آذر 1391 7:25 PM
قسمت هفتم :
1- سلام چطوري
2- سلام ممنون چي كار مي كني
1- قربانت هيچكار . امروز اومدم كه بقيه ميكرو رو بهم ياد بدي
2- چشم . حالا كجا بوديم
1- توي قسمت جمع و تفريق و ...
2- اها يادم اومد جمع رو گفتم بقيش موند . باشه . عمليات بعدي تفريق هستش كه بايك مثال بهت مي گم كه چطوري بايد عمل كني
DIM G AS BYTE
G = 6 – 2
CLS
LCD G
END
مثال بالا يك مثال خيلي ساده هستش . ما در خط اول يك متغيير تعريف كرديم به نام G در خط دوم بهش مقدار 6-2 رو داديم كه يعني 4 . در خط بعدي با فرمان CLS ال سي دي را پاك كرديم تا اماده نوشتن بشه . در خط بعدي با فرمان LCD G از ميكرو خواستيم تا مقدار متغيير G را روي LCD نمايش دهد كه ميكرو براي ما عدد 4 را نمايش مي دهد يعني حاصل عبارت 6-2 را نشان مي دهد . در خط اخر هم با دستور END برنامه رو به پايان رسونديم . اين برنامه بالا رو اگه دوست داشتي مي توني با شبيه ساز خود BASCOM نگاه كني .
يك مثال ديگه:
DIM L AS BYTE
DIM N AS BYTE
L = 12 - 3
N = 2 – 2
CLS
LCD L
WAITMS 100
CLS
LCD N
END
خوب توي برنامه بالا ما اومديم دو تا متغيير به نام هاي N و L از نوع بايت تعريف كرديم . در خط سوم به متغيير L مقدار 12 – 3 داديم . در خط بعدي به متغييرN مقدار 2-2 داديم .در خط بعدي با فرمان CLS ال سي دي را پاك كرديم و در خط بعد با فرمان LCD L به ميكرو دستور دايم كه مقدار متغيير L را كه هست 12 – 3 يعني 9 رو نمايش بده و ميكرو مقدار 9 را براي متغيير L نمايش ميده . در خط بعد ما يك تاخير در برنامه گذاشتيم . در خط بعدي با فرمان CLS ال سي دي را مجددا پاك كرديم و در خط بعدي با فرمان LCD N به ميكرو دستور داديم كه مفدار متغيير N رو كه هست 2-2 يعني 0 رو به ما نشون بده كه ميكرو مقدار 0 رو روي LCD نمايش ميده و در خط اخر هم برنامه به پايان مي رسه.
يك مثال ديگه هم رو حساب معرفت ميزنم :
DIM L AS BYTE
DIM N AS BYTE
DIM AHMAD AS BYTE
L = 12 - 3
N = 10 – 2
AHMAD = L + N
CLS
LCD L
WAITMS 100
CLS
LCD N
WAITMS 100
CLS
LCD AHMAD
END
اين برنامه رو خودت مي دوني كه چي به چيه ولي بازم خودم مي گم . ببين ما سه تا متغيير تعريف كرديم هر سه تا هم از نوع بايت هستن به نام هاي L و N و AHMAD . به متغيير هاي L و N مقدار داديم و به متغيير AHMAD مقداري كه داديم اين بود كه اقاي ميكروكنترلر حاصل متغيير هاي L و N رو با هم جمع كن و حاصل را مقدار متغيير AHMAD قرار بده خوب مقدار متغيير L هست 12 – 3 يعني 9 و مقدار متغيير N هست 10 – 2 يعني 8 . ما با دستور AHMAD = N + L اين فرمان را داديم كه مقدار متغيير AHMAD هست 9 + 8 يعني 17 .
خوب بقيه دستورات هم به اين شكل هستش فقط به جاي علامت جمع و تفريق كافيه علامت هاي ضرب و تقسي رو بزاري كه علامت تقسيم هستش /
و علامت ضرب هستش *
همينطور ايناها رو با هم جمع و تفرق و يا ضرب و تقسيم كن تا كامل دستت بياد يا يك شرط بزار كه مثال اگه مقدار عبارت
4 – 1 شد عدد 3 برو فلان كار رو انجام بده يا خيلي كاراي ديگه ميتوني انجام بدي.
1- خوب درس بعدي چيه ؟
2- راستشو بخاي من قبل از اين كه بخوام تايمر و كانتر رو بهت بگم بايد يك سري از چيزهايي رو كه قبلا نگفتم بهت بگم مثلا بعضي از دستورات مربوط به LCD رو نگفتم بعضي از دستورات پرش رو نگفتم كه بايد همون اول مي گفتم
1- خوب چرا همون اول نگفتي
2- خوب ترسيدم كه باهم قاطي كني بلايي كه سرخودم تو كلاس اومده .استاد ميومد چند تا دستور شبيه به هم رو كه همش يك كار رو انجام مي داد باهم مي گفت بقيه هم قاطي مي كردن
1- مثلا چي
2- مثلا همين دستور GOTO كه پرش به يك زيربرنامه هستش رو با دستور GOSUB هم مي شه انجام داد كه هر دوتاش يك كار رو انجام ميدن . يا بعضي از دستورات مربوط به LCD رو مثلا خاموش روشن كردن LCD – خاموش روشن شدن كرسر
و چند تا دستور ديگه .
1- اينا خيلي سخته
2- نه بابا از دستورات جمع و تفرق اسون تره . بعد كه اينا رو گفتم مي ريم سر تايمر و كانتر.
اول بريم سر بقيه دستورات LCD : خوب ما از ال سي دي فقط دو دستور CLS و LCD رو با هم مرور كرديم دستوررات بعدي به اين شرح هستش :
دستور CONFIG LCD : توسط اين دستور مي شه اندازه LCD رو مشخص كرد . مثال :
DIM A AS BYTE
A = 10
CONFIG LCD = 16 * 2
CLS
LCD A
END
خوب برنامه بالا خيلي راحته ما يك متغيير تعريف كرديم بعد بهش مقدار داديم . بعد اندازه LCD رو مشخص كرديم . وبعد مقدار متغيير رو روي LCD نمايش داديم.در نهايت برنامه رو به پايان رسونديم .
1- هر اندازه اي كه خاستيم مي تونيم بديم ؟
2- نه اندازه ها بايد استاندارد باشه و بايد يكي از انواع اندازه هاي زير باشه :
16 * 1 - 16 * 2 - 16 * 4 - 20 * 2 - 20 * 4 - 40 * 2 - 40 * 4
درضمن اين اندازه ها رو مي توني از داخل نرم افزار كه قبلا توضيح دادم هم تنظيم كني
دستور بعدي DISPLAY هستش كه جلوي اين دستور بايد يكي از دو گزينه ON يا OFF قرار بگيره . توسط اين دستور ميشه ال سي دي رو روش يا خاموش كرد . مثال :
DIM AHMAD AS BYTE
AHMAD = 3
CLS
LCD AHMAD
WAITMS 100
DISPLAY OFF
END
خوب در اين برنامه ما يك متغيير به نام AHMAD از نوع بايت تعريف كرديم . بعد در خط دوم به متغيير AHMADمقدرا 3 رو داديم . در خط بعدي با دستور CLS ال سي دي رو پاك كرديم . در خط بعدي توسط دستور LCD AHMAD دستور داديم كه مقدار متغيير AHMAD رو روي ال سي دي نمايش بده . در خط بعدي يك تاخير 100 ميلي ثانيه اي در برنامه ايجاد كرديم بعد از گذشت اين مدت زمان ميكرو خط بعدي رو مي خونه كه نوشته DISPLAY OFF و توسط اين دستور LCD خاموش ميشه. ودر خط اخر هم برنامه به پايان مي رسه. در ضمن هر وقت كه خاستي LCD رو كه با دستور DISPLAY OFF خاموش كرده بودي دوباره روشنش كني بايد با دستور DISPLAY ON اين كار رو بكني.
دستور بعدي CURSOR هستش كه جلوي اين دستور يكي از چهار گزينه زير بايد قرار بگيره :
ON : كه اگه ON جلوي CURSOR قرار بگيره CURSOR فعال ميشه
OFF : كه اگه OFF جلوي CURSOR قرار بگيره CURSOR خاموش ميشه
BLINK : اگر BLINK جلوي CURSOR قرار بگيره CURSOR چشمك ميزنه
NOBLINK : كه اگه NOBLINK جلوي CURSOR قرار بگيره CURSOR چشمك نمي زنه
1- خوب حالا اين CURSOR چي هستش
2- CURSOR يا به فارسي كرسر همون خطي هستش كه وقتي داري مثلا با برنامه WORDPAD تايپ مي كني هي چشمك مي زنه توي LCD هم اين كرسر قرار داره كه مي تونه خاموش يا روشن يا چشمك زن باشه كه دست خودمونه كه چه بلايي سرش بياريم .
مثال :
DIM A AS BYTE
A = 100
CURSOR BLINK
CLS
LCD A
END
خوب ما يك متغيير تعريف كرديم به نام A و از نوع بايت . در خط دوم مقدار داديم .در خط سوم توسط دستور
CURSOR BLINK كرسر را از نوع چشمك زن انتخاب كرديم . در خط چهارم با دسترو CLS ال سي دي رو پاك كرديم . در خط بعد با دستور LCD A مقدار متغيير A رو روي ال سي دي نمايش داديم. در خط اخر هم توسط دستور END برنامه رو به پايان رسونديم.
دستور بعدي SHIFLCD هست كه بعد از اين دستور بايد از يكي از دو فرمان LEFT يا RIGHT استفاده كرد . توسط اين دستور مي توان كل صفحه نمايش رو به اندازه يك واحد به چپ يا راست منتقل كرد . مثال :
CLS
LCD "AHMAD"
SHIFTLCD RIGHT
END
اين يك برنامه ساده هستش كه ما اول اومديم توسط دستور CLS ال سي دي رو پاك كرديم بعد توسط دستور
LCD "AHMAD" اومديم ثابت AHMAD رو روي ال سي دي نمايش داديم در خط بعد توسط دستور
SHIFTLCD RIGHT اومديم كل صفحه ال سي دي رو يك واحد به سمت راست انتقال داديم .
1- اين ثابت AHMAD رو كه گفتي يعني چي ؟
2- هر چيز كه در داخل " " قرار بگيره ميشه يك ثابت
1- يك سوال ديگه اگه ما خواستيم كه دو يا چند واحد كل صفحه ال سي دي رو به سمت راست يا چپ هدايت كنيم بايد چكار كنيم؟
2- به ازاي هر چند واحد كه خاستيم كل صفحه ال سي دي رو به سمت راست هدايت كنيم بايد دستور SHIFTLCD رو زير هم بنويسيم. مثلا مي خايم 4 واحد به سمت راست هدايت بشه از روشي كه گفتيم بايد به صورت زير عمل كنيم:
CLS
LCD "AHMAD"
SHIFTLCD RIGHT
SHIFTLCD RIGHT
SHIFTLCD RIGHT
SHIFTLCD RIGHT
END
كه ميكرو به ازاي هر دفعه كه دستور SHIFTLCD رو مي بينه يك واحد كل صفحه ال سي دي رو به سمت راست هدايد مي كنه
1- اگه اين دستور SIFTLCD رو هزار بار زير هم بنويسم چي ميشه
2- مگه مرض داري ولي خوب در نهايت بعد چند بار اون نوشته روي ال سي دي از LCD خارج ميشه.
دستور بعدي LOCATE هستش كه جلوي اين دستور بايد مقدار بدي كه در ادامه مي گم چه مقداري بايد بدي . توسط اين دستور مي توني مكان نوشته اي كه مي خاي روي ال سي دي نوشته بشه رو انتخاب كني يا تغيير بدي مثلا شايد حال كردي كه يك كلمه رو وسط ال سي دي نمايش بدي يا پايين سمت چپ يا هر جاي ال سي دي كه حال كردي نمايش بدي اونجاست كه اين دستور به كارت مياد. ببين هر ال سي دي بسته به اين كه اندازه ان چند در چند باشه تعدادي ستون افقي و تعدادي ستون عمودي داره مثلا در ال سي دي 16 * 2 تعداد ستون افقي 16 و تعداد ستون عمودي 2 هستش يا در ال سي دي 40 * 4 تعداد ستون افقي 40 و تعداد ستون عمودي 4 هست . خوب حالا كه فهميدي اندازه هايي كه براي ال سي دي مشخص مي كنن چه مفهومي داره مي توني اون مقداري رو كه گفتم بايد جلوي دستور LOCATE بنويسي رو به دست بياري كه بايد به ترتيب زير عمل كني :
LOCATE 1 , 1
در بالا من يك نمونه مكان نما رو نوشتم البته هر مقداري كه خواستي مي توني بدي به شرط اين كه مقدار رو خيلي زياد ندي چون ممكنه اون كلمه اي كه قرار روي ال سي دي نوشته بشه از ال سي دي بره بيرون . عدد اولي رو كه نوشتم به اين منظور بوده كه مقدار مكان عمودي رو مشخص كردم . عدد دومي كه جلوش نوشتم مقدار پيشروي كلمه به جلو در سمت ستون هاي افقي هستش . اين اعداد براي هر نوع ال سي دي ممكنه فرق كنه مثلا در ال سي دي نوع 16 * 2 به علت اين كه تعداد ستون هاي عمودي ما 2 تا بيشتر نيست براي مقدار دهي به دستور LOCATE ما مجاز نيستيم كه براي ستون عمودي بيشتر از 2 و براي ستون افقي بيشتر از 16 بدهيم . ويا در ال سي دي 16 * 1 فرق ميكنه و به علت اينكه ما يك عدد ستون عمودي داريم نمي توانيم براي مقدار دهي به دستور LOCATE براي ستون عمودي بيشتر از 1 بدهيم و براي مقدار دهي براي ستور افقي بيشتر از 16 بدهيم .
1- خوب حالا فكر كن كه من ازسر كنجكاوي بيشتر از اين عدد هاي مجاز دادم چه اتفاقي ميوفته؟
2- اتفاق خاصي نميوفته فقط شما چيز روي ال سي دي نمي بيني
مثال :
CONFIG LCD = 16 * 2
DO
CLS
LOCATE 2 , 1
LCD "AHMAD"
WAITMS 50
CLS
LOCATE 1 , 1
LCD "AHMAD"
WAITMS 50
LOOP
END
برنامه بالا مياد يك بار كلمه ثابت AHMAD رو يك بار در قسمت پايين ال سي دي نمايش مي ده و يك بار بالاي ال سي دي .
خوب حال تحليل برنامه :
در خط اول ما اومديم به ميكرو فهمونديم كه اقاي ميكروكنترلر ال سي دي كه ما داريم استفاده مي كنيم از نوع 16 * 2 هستش
در خط دوم ما با دستور DO ابتداي حلقه رو مشخص كرديم
در خط سوم با دستور CLS ال سي دي رو پاك كرديم
در خط چهارم با دستور LOCATE 2 , 1 مكان يا نقطه اي از ال سي دي رو كه مي خاي چيز رو روش نمايش بديم رو مشخص كرديم كه با نوشتن عدد 2 اين رو به ميكرو فهمونديم كه بايد در خط دوم عمودي يعني پايين ال سي دي بنويسي . و با نوشتن عدد 1 بعد از عدد دو اين رو به ميكرو فهمونديم كه بايد در اول ستون افقي ال سي دي چيزي بنويسي.
در خط پنجم با دستور LCD "AHMAD" كلمه AHMAD رو در خط پايين اول ال سي دي نمايش داديم
در خط ششم با دستور WAITMS 50 يك تاخير 50 ميلي ثانيه اي در اجراي برنامه ايجاد كرديم.
در خط هفتم با دستور CLS دوباره ال سي دي رو پاك كرديم .
در خط هشتم با دستور LOCATE 1 , 1 دوباره يك ادرس مكان براي جايي كه ميكرو بايد روي ال سي دي نمايش بدهد داديم كه هردو رو عدد 1 داديم يعني اول ال سي دي
در خط بعدي با دستور LCD "AHMAD" دوباره كلمه AHMAD رو روي ال سي دي نمايش داديم با اين تفاوت كه مكاني كه اين دفعه ال سي دي كلمه AHMAD رو نمايش ميده فرق كرده و اول ال سي دي داره نمايش مي ده نه اين كه در خط پايين
در خط بعدي با دستور WAITMS 50 يك تاخير 50 ميلي ثانيه اي در اجراي برنامه ايجاد كرديم
در خط بعدي هم با دستور LOOP انتهاي حلقه رو مشخص كرديم كه برنامه ما در اين حلقه دور مي زنه و كارش رو از اول شروع مي كنه و به END هيچ وقت نمي رسه و برنامه به پايان نمي رسه.
يك نكته اي رو كه بايد بگم و تو هم سوال نكردي اين هستش كه هميشه بايد دستور LOCATE بين CLS و LCD نوشته بشه مثل زير
CLS
LOCATE 2 , 1
LCD "AHMAD"
خوب اينم بقيه دستورات ال سي دي كه تموم شد.
ادامه دستورات كه مربوط به دستور پرش و چندتا چيز ديگه هستش باشه براي بعد
پايان قسمت هفتم