راه اندازی lcd کاراکتری با بسکام (سوم)
در این قسمت از آموزش نحوه راه اندازی ال سی دی دو سطری 16 حرفی رو براتون گذاشتم که به طور کامل و خلاصه به بیان نکات راه انداز ی این ال سی دی میپردازیم که به عکسی از این ال سی دی را در زیر میبینید:
در ابتدا باید گفت که این نوع ال سی دی ها بسیار رواج دارند و در انواع پروژه های ساده و پیشرفته از این نوع lcd و خانواده این ال سی دی ها استفاده میکنند.
برای شروع کار با یک مثال شروع میکنیم :
مثال : میخواهیم وقتی سیتم را روشن میکنیم کلمه hello world در lcd نمایش و بعد از یک ثانیه به صورت یک تایمر شروع به شمارش کند.
در بسکام برای استفاده از ال سی دی باید دستورات فراخوانی استفاده از ال سی دی نوشته وتنظیمات مربوط به پایه های متصل به میکروکنترلر اعمال شود:
Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _ Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
در سطر اول دستورات بالا نوع ال سی دی را مشخص میکنیم
در سطر دوم پایه های ال سی دی راکه به پایه های میکرو باید وصل شود را تعیین میکنیم که سطر سوم ادامه سطر اول میباشد . به طور مثال پایه Rs ال سی دی به پایه C.0 و پایه E ال سی دی به پایه C.2 میکرو وصل میشود به همین صورت باید پایه های ال سی دی به پایه های میکرو وصل میشود که نحوه اتصال بین LCD ومیکرو به صورت زیر هست (اتصالات کامل نیست پایه های تغذیه و.. وصل نشده اند):
در تصویر بالا ال سی دی 14 پایه داره اما اگر به تصویر اول نگاه کنید 16 پایه دارد در ال سی دی بالا پایه های مربوط به تغذیه نور پشت زمینه وجود ندارد اما در واقعیت پایه های 15 مربوط بهVCC وپایه 16GND میباشد و اگر به این دو پایه ولتاژ اعمال شود نور پشت زمینه روشن میشود که به صورت اختیاری هست و میتوان از نور پشت زمینه استفاده نکرد.
پایه 1 و 5 LCD مربوط به GND و پایه 2 مربوط به VCC یا همان 5 ولت هست GND نیز همان صفر ولت هست. پایه 3 LCD مربوط به شدت روشنایی نوشته ها (CONTRAST) میباشد معمولا با اعمال ولتاژ VCC شدت روشنایی به صورت معمولی در بعضی ال سی دی ها تنطیم میشود اما ممکن است در ال سی دی شما تنظیم مناسبی وجود نداشته باشد ونوشته ها به صورت زیر نمایش داده شود:
که شدت روشنایی بالا و حالت ناخوش آیند دارد برای ینکه مدار شما برای هر نوع ال سی دی انعطاف مناسبی داشته باشد از مدار زیر برای این پایه استفاده کنید
در تصویر بالا تغذیه ال سی دی نیز اعمال شده هست در تصویر بالا ما برای تنظیم کنتراست یا شدت روشنایی نوشته از پتانسیومتر که المانی 3 پایه هست استفاده میکنیم
که پایه متغیر به پایه 3 LCD و پایه های ثابت به مثبت و منفی یا همان VCC و GND وصل میشود تفاوتی بین دو پایه موجود در پایه های ثابت وجود ندارد و به هر کدام میخواهید GND را وصل کنید و دیگری را به VCC وصل کنید مقدار پتانسیومتر 10کیلو اهم انتخاب شود مناسب هست
اما ادامه برنامه:
با دستور زیر میتوانید بلینک(BLINK) یا چشمک زدن را اشاره گر موجود در ال سی دی را خاموش یا روشن کنید:
cursor off
بادستور بالا اشاره گر خاموش میشود
cursor on
بادستور بالا اشاره گر روشن میشود
با دستور زیر میتوان به موقعیت سطر k ام و ستون h ام رفت وعملیات نوشتن را از موقعیت وارد شده در دستور شروع کرد:
locate k , h
توسط دستور زیر میتوان متن را در ال سی دی نمایش داد دقت کنید برای نمایش متن ، متن باید مابین دو “(کوتیشین) قرارمیگیرد ولی متغیر نیازی به کوتیشین ندارد:
lcd “hello world”
مثلا توسط دستور بالا عبارت hello world در ال سی دی نمایش میدهد البته دقت کنید که باید ابتدا موقعیت یا محل نوشتن متن تعیین شود:
lcd A
در دستور بالا اطلاعات موجود در متغیر a در ال سی دی نمایش داده میشود که ابتدا باید متغیر توسط دستور زیر تعریف شود:
Dim A As Byte
که متغیر a از نوع بایت بوده و مقدار0تا 255 دسیمال و 8بیت میتواند باشد
برنامه راه اندازی lcd کاراکتری با بسکام به صورت زیر هست:
$regfile = "m32def.dat" $crystal = 8000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _ Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Dim A As Byte Cursor Off Cls Locate 1 , 2 Lcd "hello world" A = 0 Do Cls Locate 1 , 1 waitms 1000 Lcd A A = A + 1 Loop End 'end program
سلام اقای عباس زاده یه سوال .سرعت شمارنده چقده یعنی هر چند ثانیه یه عدد اضافه میشه.
اقای حائری ییخشید کد رو اصلاح کردم یادم رفته بود تاخیر در برنامه بزارم لطفا کد رو کپی کنید و در بسکام کامپایل کنید
طبق اصلاح هر یک ثانیه یا هر 1000 میلی ثانیه یک واحد به متغیر افزوده میشه
عزیزی اقای عباس زاده مونده بودم توش. ولی بازم عزیزی و حرفه ای
سلام اقای عباس زاده یه کدی دارم درباره دما سنج میخوام ببینم جواب میده یا نه اگه همینو پروگرم کنم جواب رو کوتاه بدید اگه نمیشه دلیلش هم بنویسید
$regfile = “m16def.dat”
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = _
Portb.7 , Rs = Portb.2 , E = Portb.3
Config Lcd = 16 * 2
Cls
Cursor Off
Locate 1 , 1
Lcd “Dama Sanj”
Locate 2 , 1
Lcd “Crated By=milad haeri”
Wait 3
Cls
Dim T As Byte
Dim B As Byte
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
T = Getadc(0)
B = T / 10
Cursor Off
Locate 1 , 1
Lcd “Real Adc=” ; T
Locate 2 , 1
Lcd “temp=” ; B “c”
Waitms 350
Loop
Stop Adc
End
بله من که مشکلی ندیدم ولی بهتره این جند تا کد رو اضافه کنی
این کد رو سطر بعد کد Cursor Off که تو حلقه هست بنویس:
locate 1,10
lcd” ”
این کد رو هم قبل کد Locate 2 , 1 که تو حلقه هست بنویس:
locate 2,6
lcd” ”
این کدها باعث حذف جامانده های اطلاعات قبلی از ال سی دی میشه
در ضمن یک بار Cursor Off بنویسی در اول کافی هست
این نکته رو هم در نظر بگیر که باید خودت قلق دما رو بدست بیاری مثلا دما 20 درجه هست ولی 22 نشون میده که بهتره دو واحد از B کم کنی
ممنون
فکر کنم که توی حلقه بعد از خاموش کردن مکان نما باید یه cls بزارم درسته؟
نه همون کدهایی رو که برات نوشتم رو بزار
سلام اقای عباس زاده
یه سوال برای اینکه شرط بزارم که اگه مثلا متغیر B رسید به دمای پایین تر از 15 درجه فلان کارو بکنه چه کدی باید بنویسم
اقای حائزی لطفا در انجمن سوالتون رو مطرح کنید تا بتوانیم سریعتر پاسخگو باشیم
در صورت نبود موضوع مورد نظر ، موضوع جدیدی ایجاد نمایید
با تشکر
من هرچی این اجرا میکنم چیزی زو lcd نمیایش نمیده تو protues لطفا اگر کسی میدونه کمک کنه
داداچمون کد رو اشتباه قرار دادن
خط 19 cls رو پاک کن حل میشه
من با بسکام آشنا نیستم آقای عباس زاده هم نیستن سعی میکنم اصلاح کنم
سلام ممنون از سایت خوبتون.
من به ال سی دی خیلی نیاز دارم ولی نمیدونم چرا کار نمیکنه لصفا کمک کنید.
خیلی منون میشم
با سلام . ضمن تشکر از وبسایت خوبتون
فکر کنم توی شماتیکی که قرار دادید یک ایراد وجود داره و به اشتباه پایه 3 یا vee رو به vcc متصل کردید در حالی که در توضیحات خودتون ذکر کردید که باید به پایه متغیر پتانسیومتر متصل بشه.
هر دو صحیح است در این حالتی که در شماتیک موجود است بیشترین کنتراست ممکن رو lcd داره برای تنظیم کنتراست از پتانسیومتر استفاده میشه
توی شماتیک e رو به c1 وصل کردید ولی توی توضیحات گفتید به c2 متصل بشه در کل مقاله اشکال دار هست
سلام مهندس با چه کدلی میتونی کلمه ای رو از سمتی به سمت دیگع برد و برگشت داد یعنی تو حرکت باشه