آموزش بسکام از صفر تا بینهایت(جلسه هفتم)(نویسنده: احمد فهیمی)
جلسه هفتم
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"
خوب اینم بقیه دستورات ال سی دی که تموم شد.
ادامه دستورات که مربوط به دستور پرش و چندتا چیز دیگه هستش باشه برای بعد
پایان قسمت هفتم