Eng.KouRosH
کاربر انجمن-
تعداد ارسال ها
2569 -
تاریخ عضویت
-
آخرین بازدید
تمامی مطالب نوشته شده توسط Eng.KouRosH
-
آموزش گام به گام برنامه نویسی میکروکنترلرهای avr به زبان بیسکام
Eng.KouRosH پاسخی برای Eng.KouRosH ارسال کرد در موضوع : میکروکنترلرهای AVR
1- سلام خوبي 2- سلام خوبم تو چطوري 1- عالي راستي امروز چي مي خاي بگي 2- امروز بايد دستور حلقه و پرش رو كه قبلا بهت نگفتم بهت بگم كه خيلي راحت هست 1- اماده ام بگو 2- اولين دستور GOSUB هستش توسط اين دستورشما مي توني بپري توي يك زير برنامه و دستورات داخل اون زيربرنامه رو انجام بدي دقيقا همان كاري كه دستور GOTO براي ما انجام مي داد اين دستور GOSUB هم براي ما انجام مي ده با يك تفاوت و اون هم اينكه در دستور GOSUB ما با دستور RETURN مي توانيم دوباره برگرديم GOSUB رو بخونيم كاري كه با دستور GOTO نمي تونستيم انجام بديم 1- يك مثال بزن كه نفهميدم 2- باشه اينم مثال : CONFIG PINB.0 = INPUT CONFIG PORTA = OUTPUT DO IF PINB.0 = 1 THEN GOSUB BENZ LOOP END BENZ: TOGGLE PORTA WAITMS 50 RETURN توسط برنامه بالا مي تونيم با زدن ميكرو سوييچ پورت A رو TOGGLE كنيم. يعني براي بار اول كه ميكروسوييچ رو ميزنيم پورت A يك مي شه براي بار دوم كه ميزني صفر ميشه براي بار سوم كه مي زني دوباره يك مي شه براي بار چهارم كه ميزني صفر ميشه و الي اخر. در خط اول ما پايه B.0 رو به عنوان ورودي پيكره بندي كرديم . در خط دوم پورت A رو براي خروجي پيكره بندي كرديم . در خط سوم ما اول حلقه رو با نوشتن دستور DO عنوان كرديم. در خط چهارم ما نوشتيم IF PINB.0 = 1 THEN GOSUB BENZ به معني كه اگر پايه B.0 ميكروكنترلر يك شد بپر برو توي زيربرنامه BENZ . در خط پنجم با دستور LOOP انتهاي حلقه رو مشخص كرديم . در خط ششم نوشتيم END كه برنامه ما هيچ وقت به اينجا نمي رسه . در خط بعدي ما يك زيربرنامه به اسم BENZ مشخص كرديم . خط هفتم نوشتيم TOGGLE PORTA يعني وضعيت پورت A رو هر چي كه هست معكوسش كن يعني اگه يك هستش بكنش صفر و اگه صفر هستش بكنش يك . در خط هشتم ما يك تاخر 50 ميل ثانيه اي گذاشتيم . در خط نهم نوشتيم RETURN كه در ادامه بهت كه توي اين برنامه وضيفش چيه. خوب ميكروكنترلر مياد از خط اول برنامه شروع ميكنه به خوندن خط اول خط دوم رو مي خونه . به خط سوم كه مي رسه يعني DO مي فهمه كه يك حلقه سر راهشه و توي اين حلقه يكسره دور ميزنه و خارج نمي شه تا وقتي كه اون شرطي كه گذاشتيم اجرا بشه يعني IF PINB.0 = 1 THEN GOSUB BENZ . حالا فرض مي كنيم كه ما ميكروسوييچ رو فشار داديم و با اين كارمون PINB.0 رو يك كرديم در اينجا ميكرو مياد دستور شرط رو يعني THEN GOSUB BENZ رو اجرا ميكنه يعني ميپره مي ره توي زيربرنامه BENZ و دستورات داخل اين زير برنامه رو اجرا ميكنه. خوب حالا داخل اين زير برنامه ما اين دستورات رو نوشتيم TOGGLE PORTA يعني وضعيت پورت A رو هر چي كه هستش معكوسش كن و در اينجا ميكرو مياد پورت A رو يك ميكنه و اگه شما به پورت A LED وصل كرده باشي مي بيني كه روشن مي شه دستور بعدي كه داخل اين زيربرنامه هست WAITMS 50 كه ميكرو با خوندن اين خط به مدت 50 ميلي ثانيه در اجراي برنامه تاخير ايجاد ميكنه . دستور بعدي كه ما داخل اين زيربرنامه نوشتيم RETURN هستش كه ميكرو بعد از گذشت 50 ميلي ثانيه كه اين دستور رو مي خونه برمي گرده توي حلقه . و دوباره توي اون حلقه دور مي زنه تا وقتي كه دوباره شرط اجرا بشه و دوباره بپره بره توي زيربرنامه. برنامه بالا رو اينطوري هم ميشه نوشت كه اين روش منطقي تره : 3- CONFIG PINB.0 = INPUT CONFIG PORTA = OUTPUT DO DEBOUNCE PINB.0 , 1 , BENZ , SUB LOOP END BENZ: TOGGLE PORTA RETURN برنامه بالا رو فقط تاخير 50 ميلي ثانيه اي شو حذف كردم . برنامه بالا رو تنها تغييري كه توش انجام دادم خط چهارمش هستش يعني DEBOUNCE PINB.0 , 1 , BENZ , SUB كه ما با نوشتن اين خط اين رو به ميكرو فهمونيدم كه اگر يك موقع PINB.0 ما يك شد بپر برو توي زيربرنامه BENZ . اون SUB هم نوشتيم كه به ميكرو بفهمونيم كه ما دستور GOSUB مي خايم كه اين پرش صورت بگيره و اگه ننويسيم ميكرو خودش پيش فرض با دستور GOTO ميپره توي زيربرنامه . خوب حالا فرض كن كه اين شرط يعني پايه B.0 يك شده در اينجا ميكرو ميپره ميره توي زيربرنامه BENZ و دستورات داخل اين زيربرنامه رو اجرا مي كنه و وقتي كه به دستور RETURN ميرسه مفهمه كه بايد بپره بره توي حلقه و خط DEBOUNCE PINB.0 , 1 , BENZ , SUB رو دوباره بخونه و داخل اين حلقه دوباره گير ميكنه تا وقتي كه پايه B.0 دوباره يك بشه و دوباره بپره بره توي زيربرنامه و روز از نو روزي از نو. دستور بعدي حلقه FOR –NEXT هستش كه با اين دستور مي توني يك حلقه شمارشي ايجاد كني اگه توجه كني تا حالا من يك حلقه DO-LOOP بهت گفتم كه يك حلقه نا محدود بود ولي اين حلقه FOR-NEXT يك حلقه محدود هستش يعني مياد توي يك حلقه ايجاد ميكنه البته تايك زمان مشخصي اين كار رو ميكنه كه اين زمان دست خودمون هستش كه چقدر باشه به مثال زير توجه كن : DIM A AS BYTE FOR A = 1 TO 10 STEP 1 CLS LCD A WAITMS 30 NEXT A END خوب بريم سر تحليل برنامه . خط اول كه ما يك متغيير به اسم A و از نوع بايت تعريف كرديم . در خط دوم ما نوشتيم كه FOR A = 1 TO 10 STEP 2 به اين معني كه متغيير A رو افزايش بده از عدد 1 تا عدد 10 . و دستور STEP 1 كه نوشتيم به اين معني هستش كه يكي يكي بشمار يا به عبارتي يك پله يك پله بشمار 1- ببين نفهميدم اين STEP 1 رو دوباره توضيح بده 2- يعني اين كه يكي يكي بشمار 1 و 2 و3 و4 و5 و6 تا عدد 10 . اگه ما به جاي STEP 1 مي داديم STEP 2 دو تا دوتا ميشمرد اينطوري 1 و 3 و5 و7 و9 خوب بريم سر ادامه وقتي كه ميكرو خط FOR A = 1 TO 10 STEP 2 رو مي خونه شروع مي كنه به افزايش متغيير A . بعد مياد خط بعدي كه نوشته CLS رو مي خونه و در اين جا LCD رو پاك ميكنه . بعد مياد خط LCD A رو ميخونه و مي فهمه كه بايد مقداري كه داره افزايش پيدا ميكنه رو نشون بده . خط بعدي نوشتيم WAITMS 30 كه يك تاخير 30 ميلي ثانيه اي در اجراي برنامه انجام ميده و كارش اين هستش كه بياد مدت زمان افزايش رو تند يا كند كنه يا به عبارتي اهسته يا سريع كنه . خط بعدي نوشتيم NEXT A كه ميكرو با خوندن اين خط دوباره برميگرده و خط دوم رو يعني خط FOR A = 1 TO 10 STEP 2 رو مي خونه . خط بعدي نوشتيم END كه برنامه ما فعلا به اين قسمت نمي رسه تا وقتي كه شمارش تموم بشه 1- من كه چيزي نفهميدم 2- بزار تحليلش كنم مي فهمي خوب حالا تحليل برنامه : ميكرو مياد از خط اول شروع ميكنه به خوندن و مي فهمه كه ما يك متغيير به اسم a و از نوع بايت تعريف كرديم . در خط دوم كه ما نوشتيم FOR A = 1 TO 10 STEP 1 ميكرو مياد شروع ميكنه به شمارش يا همون افزايش متغيير يك نكته رو بزار هميجا بگم كه فرقي نداره كه عددها چقدر باشه حتي مي تونيم بگيم كه از 10 شروع به شمارش كن تا مثال 110 هيچي محدوديتي وجود نداره البته حداكثر تا 255 ميتوني بدي . خوب بري سر دستوري كه نوشتيم . خوب بعد ميكرو مياد دفعه اول خود مقدار 1 رو ميزاره توي متغيير A بعد مياد با فرمان CLS ال سي دي رو پاك ميكنه و با دستور LCD A مياد مقدار متغيير A رو كه الان هست 1 رو روي ال سي دي نمايش مي ده بعد بادستور WAITMS 30 مياد يك تاخير 30 ميلي ثانيه اي در اجراي برنامه ايجاد مي كنه و در خط بعد تا كه دستور NEXT A رو مي خونه برمي گرده توي اون خط FOR A = 1 TO 10 STEP 1 و دوباره كه اين دستور رو خوند مقدار متغيير A رو يك واحد بيشتر مي كنه يعني 2 و دوباره با دستور CLS ال سي دي رو پاك مي كنه و با دستور LCD A مياد مقدار متغيير A رو كه الان هست 2 رو روي ال سي دي نمايش مي ده . اين روال همينطور ادامه داره تا اين كه مقدار متغيير A بشه 10 يا به عبارتي مساوي بشه با مقداري كه در پايان شمارش بهش داديم ( كه در اينجا عدد 10 رو داديم) و وقتي كه اين اتفاق افتاد ميكرو مياد خط زيري NEXT A رو مي خونه كه ما در اينجا دستور END رو گذاشتيم كه برنامه به پايان برسه ولي شما اگه حال كردي كه شمارش دوباره اغاز بشه و دوباره بشماره مي توني قبل از دستور FOR يك زيربرنامه تعريف كني و در بعد دستور NEXT A هم يك دستور پرش به اين زيربرنامه رو بزاري كه هر وقت كه شمارش به پايان رسيد ميكرو بپره بره توي اين زيربرنامه و شمارش رو از دوباره اغاز كنه مثل مثال زير DIM A AS BYTE MAIN: FOR A = 1 TO 10 STEP 1 CLS LCD A WAITMS 30 NEXT A GOTO MAIN END دستور بعدي WHILE – WEND هستش اين دستور همون كاري رو مي كنه كه دستور DO – LOOP انجام مي داد ولي با يك تفاوت اون هم اينكه براي داخل شدن به اين حلقه بي نهايت بايد شرط مورد نظري كه جلوي WHILE نوشته ميشه اول اجرا بشه تا اجازه داخل شدن به اين حلقه داده بشه . يك چيز ديگه هم كه هست اينه كه WHILE ابتداي حلقه هستش مثل همان DO كه ابتداي حلقه بود و WEND هم انتهاي حلقه مثل LOOP كه انتهاي حلقه بود به مثال زير توجه كن كه خيلي هم ساده هست. 1- يك سوال فرق بين دستور WHILE – WEND با دستور DO – LOOP چي هستش 2- در دستور DO – LOOP شما براي ورود به حلقه نياز به اجازه نداشتي ولي توي دستور WHILE – WEND نياز به كسب اجازه داري حالا اين اجازه كي صادر ميشه زماني كه شرطي رو كه جلوي WHILE گذاشتيم اجرا بشه . اگه بخاي به يك زبون ديگه حاليت كنم بايد بگم كه فرق اين دوتا دستور مثل ابتدايي و دانشگاه هستش شما توي ابتدايي براي بيرون رفتن از كلاس بايد از معلمتون اجازه مي گرفتي ولي توي دانشگاه اجازه نمي گيري و سرتو ميندازي پايين و مي ري بيرون و اگه يك زماني توي دانشگاه از استاد اجازه بگيري بقيه بهت مي خندن توي ميكرو هم همينطوره ممكنه كه متغييرا بهت بخندن. خوب بري يك مثال ساده هم برات بزنيم كه حال كني : DIM K AS BYTE K = 3 WHILE K = 3 CLS LCD "OK" WEND END خط اول ما يك متغيير به اسم K و از نوع بايت تعريف كرديم . خط دوم به متغيير K مقدار داديم . مقدار 3 داديم خط سوم با دستور WHILE ابتداي حلقه رو مشخط كرديم البته براي ورود به حلقه اين حلقه يك شرط گذاشتيم كه اين شرط هر چيزي ميتونه باشه كه اين شرط رو ما بايد جلوي دستور WHILE با يكم فاصله بنويسيم . شرطي كه نوشتيم K = 3 هستش يعني اگر كه مقدار K عدد 3 بود اجازه ورود به حلقه داده ميشه . خط چهارم كه داخل حلقه قرار داره CLS هستش كه مي دوني چي كار مي كنه خط پنجم هم LCD "OK" هستش كه اين دستور هم داخل حلقه قرار داره خط ششم WEND هسش يعني پايان حلقه خط هفتم هم END هستش كه تا زماني كه شرط بر قرار باشه برنامه به اين دستور نمي رسه تحليل اين برنامه هم خيل ساده هسش ميكرو مياد از خط اول شروع مي كنه به خوندن خط اول خط دوم رو مي خونه مي رسه به خط سوم اين جا رو گوش كن كه خيلي مهمه اگه شرط برقرار بود يعني مقدار K = 3 بود كه الان هست اجازه ورود به اين حلقه داده مي شه ولي اگه شرط برقرار نبود ميكرو ميره و خط بعدي WEND رو مي خونه كه ما اينجا حال كرديم كه اگه شرط برقرار نبود برنامه به END برسه وتموم بشه . دستور بعدي DELAY هستش كه اين دستور يك دستور تاخير در اجراي برنامه هستش همانند دستور هاي WAITMS – WAIT –WAITUS كه دستور DELAY به مدت 1000 ميكروثانيه در اجراي برنامه تاخير ايجاد ميكنه كه نياز هم به مثال نيست. فعلا همينا رو داشته باش تا بعد .- 60 پاسخ
-
- 14
-
-
آموزش گام به گام برنامه نویسی میکروکنترلرهای avr به زبان بیسکام
Eng.KouRosH پاسخی برای Eng.KouRosH ارسال کرد در موضوع : میکروکنترلرهای AVR
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" خوب اينم بقيه دستورات ال سي دي كه تموم شد. ادامه دستورات كه مربوط به دستور پرش و چندتا چيز ديگه هستش باشه براي بعد پايان قسمت هفتم- 60 پاسخ
-
- 11
-
-
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
ایول من داشتم بازی آنلاین میکردم -
چه چتری چه کشکی؟
- 5361 پاسخ
-
- 4
-
-
- مهندسان برق
- گپ و گفتگو
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
از کجا آوردی اینو؟طراحی کردی؟ -
معرفی آشنایی با کاربران مهندسی برق
Eng.KouRosH پاسخی برای Mehdi.Aref ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
ایوووووول -
معرفی آشنایی با کاربران مهندسی برق
Eng.KouRosH پاسخی برای Mehdi.Aref ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
کبیر نه داش بزرگ -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
تو خط تولید استفاده میشه؟ -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
شبیه مگس کش برقیاس -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
نگفتم سنسوره -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
یه راهنمایی کن خب -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
مث تو -
راستی بعضی سایت های خارجی هستن که این جور پروژه هارو میذارن البته میدونید که مث ایران واسه دانلود نمیذارن که همه کپ بزنن
-
ایشالله که درست میشه ...
-
معمولا اینجور پروژه هارو واسه فروش میذارن از نت نمیشه کمک گرفت.....از استادای میکرو کمک بگیر یه استاد داریم مغزه خیلی کارش درسته
-
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
قیافه اش به سنسور اینا میخوره مطمئنی برقیه -
انواع ترانسفورماتور در نیروگاه
Eng.KouRosH پاسخی برای ...YaSss ارسال کرد در موضوع : تولید انرژی الکتریکی
خواستم برم نیروگاه بعثت نذاشتن پارتی خفن میخواست- 17 پاسخ
-
- 2
-
-
درود والله کار نکردم ولی معمولا اینکارارو با PLC انجام میدن میکرو نویز زیاد میگیره ........
-
معرفی آشنایی با کاربران مهندسی برق
Eng.KouRosH پاسخی برای Mehdi.Aref ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
س ی اس ی ش نکن سبز -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
راست میگوید -
معرفی آشنایی با کاربران مهندسی برق
Eng.KouRosH پاسخی برای Mehdi.Aref ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
منم کوروشم از تبار هخامنشیان عاشق برق و تاریخ :hapydancsmil: -
واسه تبلیغات؟ خب موتورها بسته به باری که نیاز داری از میلی وات تا مگاوات و...هست باید بسته به کارت انتخاب کنی ......
- 1142 پاسخ
-
- 2
-
-
- مهندسی برق
- مطالب مهندسی برق
- (و 9 مورد دیگر)
-
نشان دهنده ی هفت قسمتی و ای سی درایور 7447
Eng.KouRosH پاسخی برای .sOuDeH. ارسال کرد در موضوع : میکروکنترلرهای AVR
یاد ساعتم افتادم -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
به مجموعه اي از تجهيزات فشار قوي كه ارتباط فيدرهاي مختلف رو به شين (Bus Bar) يا قسمت هاي مختلف باس بار رو در يك سطح ولتاژ معين انجام مي دهند سوئيچگير میگن البته تو ترجمه switchgear به معنی تابلو هم هست ولی بنظرم منظورش همون تجهیزات پست باشه!!!!!!! -
مسابقه ی حدس عکس برقی
Eng.KouRosH پاسخی برای آریوبرزن ارسال کرد در موضوع : مسابقات و گفتگوهای گروه برق
شماهم درست گفتی ولی کاملترشو دوستمون گفت
