آیا میدانید قورباقه براي قورت دادن غذا بايد چشمش را ببندد
افتخار در خشک کردن قطره ي اشک است نه در جاري ساختن سيل خون. از بايرون
Logo

حل تمرینات و پروژه های درس میکروکنترلر
کار با LCD کاراکتری یا متنی به زبان C

به نام خدا

 در این قسمت ما به آموزش LCD های کاراکتری خواهیم پرداخت. و توضیح می دهیم که چگونه LCD را به میکرو کنترلر متصل کنیم و چگونه آن را در زبان C معرفی کنیم و با استفاده از دستورات به صورت نرم افزاری با آن ارتباط برقرار کنیم.

ابتدا پایه های LCD :

 

پایه های LCD
 پایه نام   عملکرد
 1 VSS   زمین
 2  VCC 5V+
 3  VEE  کنترل درخشندگی (می توانید با یک مقاومت 1 کیلو آن را زمین کنید)
 4  RS اگر این پایه 0 باشد اطلاعات روی DB0-DB7 به عنوان فرمان و اگر 1 باشد به عنوان کاراکتر پذیرفته می شود
 5  R/W  اگر این پایه 0 باشد LCD برای نوشتن آماده می شود و اگر 1 باشد برای خواندن آماده می شود
 6  E  فعال سازی LCD که با یک لبه پایین رونده می باشد
 7  DB0  خطوط دیتا
 8  DB1  
 9  DB2  
 10  DB3  
 11  DB4  
 12  DB5  
 13  DB6  
 14  DB7  
 15  A  5V+  از پایه 15 و 16 برای روشن کردن LED پس زمینه استفاده می شود
 16  K  زمین

 



کد های فرمان LCD:

 کد HEX عملکرد فرمان 
0X01  پاک کردن صفحه نمایش
0X02  بازگشت مکان نما به سطر و ستون 0و0  HOME
0X04 انتقال مکان نما به چپ 
0X05  جابجایی صفحه نمایش به راست
0X06  انتقال مکان نما به راست
0X07 جابجایی صفحه نمایش به چپ
0X08  صفحه نمایش و مکان نما خاموش
0X0A  صفحه نمایش خاموش و مکان نما روشن
0X0C  صفحه نمایش روشن و مکان نما خاموش
0X0E  صفحه نمایش روشن و مکان نما روشن
0X0F صفحه نمایش روشن و مکان نما در حالت چشمک زن 
0X10 جابجایی مکان نما به چپ
0X14  جابجایی مکان نما به راست
0X18  حرکت کل صفحه نمایش به چپ
0X38 سازمان دهی 8 بیتی و ماتریس 5×7
0X28  سازمان دهی 4 بیتی و ماتریس 5×7
0X10  حرکت کل صفحه نمایش به راست
0XC0 مکان نما به آغاز خط دوم انتقال می یابد

 

//www.picpars.com 
#include <mega8.h> // معرفي ميکر 
#include <stdio.h> //فراخواني دستورات استاندارد ورودي خروجي 
#include <delay.h> // فراخواني تابع تاخيري 
#include <lcd.h> // فراخواني دستورات ال سي دي 
#define xtal 8000000 
#asm // شروع دستورات اسمبلي 
.equ __lcd_port=0x18; PORTB //معرفي پورت ال سي دي 
#endasm // پايان دستورات اسمبلي 
unsigned char i; 
/*********www.picpars.com**********/ 
void main(void){ // تابع اصلي 
char buffer[10]; // در اين متغيير اطلاعات به صورت رشته قرار ميگيرند 
lcd_init(16); // ال سي دي با 16 ستون 

while(1){ 
i++; // 
lcd_clear(); // پاک کردن ال سي دي 
sprintf(buffer,"PICPARS.COM %d",i); //آماده کردن اطلاعات به صورت رشته 
lcd_puts (buffer); // ارسال اطلاعات به ال سي دي 
delay_ms(200); // تاخير 200 ميلي ثانيه 
} 
} 

 

 این برنامه یک نمونه ساده از برنامه هایی است که با ال سی دی کاراکتری ارتباط دارد. در این برنامه یک متغییر با اسم i تعریف شده که این متغیر در حلقه while قرار دارد و با یک تاخیر 200 میلی ثانیه یک واحد به این متغییر اضافه می شود و روی LCD نمایش داده می شود. توضیح دستوارت را در اینجا می دهیم و تا آخر هر جا از LCD استفاده کردیم اصول کلی آن به صورت زیر می باشد.

 از دستور asm# برای نوشتن دستورات به زبان اسمبلی استفاده می شود که در اینجا ما از یک دستور اسمبلی برای معرفی کردن پورت B برای LCD به صورت بالا استفاده می کنیم که اگر شما از codewizard استفاده کنید این قسمت برای شما ایجاد خواهد شد و endasm# هم برای خاتمه دادن به دستورات اسمبلی می نویسیم.

lcd_init(16); از این دستور برای تعیین کردن تعداد ستون های LCD استفاده می شود. که در اینجا LCD را برای 16 ستون سازماندهی می کند.

char buffer: این متغییر که به صورت یک آرایه 10 تایی تعریف شده و حتما نوع آن باید از char باشد، برای ذخیره سازی موقت اطلاعات به صورت رشته می باشد به این صورت که ما اگر بخواهیم نوشته ای را همراه با یک متغییر روی LCD نمایش بدهیم چون محتوای متغییر ما (در اینجا عدد می باشد) عدد است باید این عدد را به صورت رشته درآوریم و همراه با آن text مان برای LCD بفرستیم که این تبدیل عدد به رشته را دستور sprintf انجام می دهد و بعد این رشته را در متغیر buffer قرار می دهد.

sprintf: فرم نوشتن این دستور به این صورت می باشد که ابتدا یک متغیر برای ذخیره سازی و بعد رشته (همان نوشته یا پیغام) و بعد هم متغیر i که حاوی یک عدد است. "PICPARS.COM %d" در اینجا d% یعنی اینکه متغیر i در مبنای دسیمال نمایش داده شود که در جدول زیر تمام این علایم را توضیح داده ایم. پس این دستور این رشته را در متغیر buffer به این صورت PICPARS.COM 1 ذخیره می کند.

lcd_puts(buffer): این دستور محتوای متغییر buffer را برای LCD ارسال می نماید.

lcd_clear(); این دستور کل صفحه نمایش را پاک می کنید و نویسه را در مختصات 0و0 قرار می دهد.

 فرمت کاراکتر های ارسالی:

کاراکتر  نوع اطلاعات ارسالی 
 c%  یک تک کاراکتر
 d%  عدد صحیح علامت دار در مبنای 10
 i%  عدد صحیح علامت دار در مبنای 10
 e%  نمایش عدد ممیز شناور به صورت علمی
 E%  نمایش عدد ممیز شناور به صورت علمی
 f%  عدد اعشاری
 s%  عبارت رشته ای واقع در حافظه SRAM
 u%  عدد صحیح بدون علامت در مبنای 10
X% به فرم هگزا دسیمال با حروف بزرگ
 x%   به فرم هگزا دسیمال با حروف کوچک
 P%  عبارت رشته ای واقع در حافظه FLASH
 %%  نمایش علامت ٪

 

 دستورات استفاده شده در LCD:

_lcd_ready()

این دستور منتظر می ماند تا LCD آماده دریافت اطلاعات شود. این دستور باید حتما قبل از دستور زیر اجرا شود.

_lcd_write_data()

به کمک این دستور می توان در رجیستر دستور العمل LCD فرمان هایی نوشت که در جدول کد های فرمان LCD این فرمان ها توضیح داده شده اند.

مثال:

//www.picpars.com
#include <mega8.h>
#include <stdio.h>
#include <delay.h>
#include <lcd.h>
#define xtal 8000000
#asm .equ __lcd_port=0x18; PORTB
#endasm
unsigned char i=20; /*********www.picpars.com**********/
void main(void){
char buffer[10];
lcd_init(16);
sprintf(buffer,"PICPARS.COM %d",i);
lcd_puts (buffer);
while(1){ delay_ms(200);
_lcd_ready(); //آماده دريافت دستور
_lcd_write_data(0x1c); // کل صفحه نمايش به چپ انتقال داده شود
}
 }

در این مثال ابتدا عبارت PICPARS.COM 20 روی LCD نمایش داده می شود و سپس کل صفحه نمایش با تاخیر 200 میلی ثانیه به سمت چپ منتقل می شود.(مانند تابلو روان)

 اصول کار LCD های ماتریسی به صورت می باشد و طرز استفاده از دستورات به همین صورت می باشد. امیدوارم که این توضیحات کافی باشد. در صورتی که سوالی در مورد این قسمت دارید می توانید در همین صفحه در قسمت نظرات آن را مطرح نماید.

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.





لینک ثابت این صفحه:   


© کپی برداری از مطالب این سایت تنها با ذکر منبع مجاز می باشد

در صورت داشتن هر گونه سوال، نظر و پیشنهاد راجب این مطلب می‌توانید در قسمت نظرات همین صفحه مطرح نمائید. همچنین با شرکت در نظر سنجی های سایت، ما را در بهبود بخشیدن به مطالب یاری کنید.


آموزش ميكرو كنترلر AVR آموزش سی آموزش C آموزش AVR به زبان سی C کاراکتری متنی ماتریسی کاراکتر برنامه نویسی آموزش کد ال سی دی اتصال ال سی دی به میکرو میکروکنترلر lcd micro avr config character picpars.com

ارسال شده در مورخه : پنجشنبه، 16 ارديبهشت ماه، 1389 توسط مدیریت بازدید [11573]   پرینت

مرتبط باموضوع :

 اتصال کیبورد 4*4 به میکروکنترلر AVR  [ پنجشنبه، 16 ارديبهشت ماه، 1389 ] 15832 مشاهده
 شمارنده دو رقمی با سون سگمنت زبان C و AVR  [ چهارشنبه، 13 مرداد ماه، 1389 ] 7400 مشاهده
 دستورات break و switch و goto و continue و ... قسمت 4  [ يكشنبه، 8 فروردين ماه، 1389 ] 4230 مشاهده
 آموزش گام به گام برنامه نویسی AVR به زبان C  [ يكشنبه، 31 ارديبهشت ماه، 1391 ] 147 مشاهده
نام شما:
ایمیل شما:

در مورخه : پنجشنبه، 30 ارديبهشت ماه، 1389 (IP آدرس : )
خیلی استفاده کردم. ممنون که زکات علمتون رو می دین و خیرش رو به ما می رسونین. از اینکه مجبور نشدم از کسی بپرسم و همینجا یاد گرفتم خیلی عالی بود. شاد باشید
ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : شنبه، 22 خرداد ماه، 1389توسط
(مشخصات کاربر rsaboor | ارسال پیغام شخصی) (IP آدرس : )
سلام، از اینکه این چنین با حوصله آموزش می دهید واقعا از شما ممنونم، من تا به حال با LCD کار نکردم به خاطر همین متوجه نشدم که در دستور .equ __lcd_port=0x18; PORTB 0X18 را چرادر پورت LCD ریختید آیا رجیستر خاصی را با این کار مقدار دهی می کنید؟ ممنون می شوم اگر جوابم را بدهید.
جوابیه ها

نام شما:
ایمیل شما:

در مورخه : شنبه، 12 تير ماه، 1389توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )
سلام ببخشید که اینقدر دیر جواب شما رو دارم میدم."درگیر امتحانات بودم" ای وی ار برای هر پورتیش یه آدرسی توی رم خودش داره که در اینجا چون ما به زبان اسمبلی نوشتیم پس باید آدرس پورت هم به صورت اسمبلی بدیم. 0x18 آدرس پورت B هستش این آدرس ها ثابت هستند مثلا توی mega16 ما 4 تا پورت داریم که هر کدومشون آدرس مربوط به خودش رو داره.
ارسال جوابیه ]

ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : چهارشنبه، 22 دي ماه، 1389 (IP آدرس : )
سلام ممنون از اطلاعات خوبتون اگه ممکنه توضیح بدهید آیا میشود مثلا کاراکترهای ارسالی را که lcd چاپ کرده یکی یکی پاک کرد و به عقب برگشت ؟ آیا دستوری هست ؟
ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : يكشنبه، 4 ارديبهشت ماه، 1390 (IP آدرس : )

سلام . فوري فوري فوري

ممنون از مطالب آموزنده و مفيدي كه در سايت گذاشتيد.خواستم بدونم كه ورژن پروتيوس شما چنده؟ نتونستم با برنامه خودم بازش كنم.خطاي ورژن ميداد.

ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : يكشنبه، 25 ارديبهشت ماه، 1390 (IP آدرس : )

خیلی ممنون از مطالب بسیار مفیدی که برای استفاده عموم قرار دادید

اجرکم عند الله ان شاءالله

ارسال جوابیه ]

نام شما:
ایمیل شما:

در مورخه : شنبه، 14 خرداد ماه، 1390 (IP آدرس : )

خیلی استفاده کردم. ممنون از لطفتون

ارسال جوابیه ]

نام شما: صابر
ایمیل شما: saber.m_70@yahoo.com

در مورخه : دوشنبه، 7 آذر ماه، 1390 (IP آدرس : )

سلام  از دستور sprintf فقط برای کاراکتر ها استفاده می شود

 

جوابیه ها

نام شما: مدیریت
ایمیل شما:

در مورخه : دوشنبه، 7 آذر ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

sprintf کلا برای شما یک رشته با فرمت دلخواه شما آماده می کند و آن را در یک متغیر آرایه ای از نوع char قرار می دهد.

ارسال جوابیه ]

ارسال جوابیه ]

نام شما: مسعود
ایمیل شما:

در مورخه : جمعه، 9 دي ماه، 1390 (IP آدرس : )

خدا بهت عجر بده

ارسال جوابیه ]

نام شما: امیررضا
ایمیل شما:

در مورخه : دوشنبه، 19 دي ماه، 1390توسط
(مشخصات کاربر amirrezaez | ارسال پیغام شخصی) (IP آدرس : )

عالی بود

ارسال جوابیه ]

نام شما: سعید
ایمیل شما: hamidinezhad@gmail.com

در مورخه : پنجشنبه، 29 دي ماه، 1390توسط
(مشخصات کاربر saeidhp | ارسال پیغام شخصی) (IP آدرس : )

سلام 

آیا میشه با میکروکنترلرهای AVR یه LCD رو بدون درایورش (برد زیر LCD) راه اندازی کرد ؟

میکروی خاصی باید باشه یا با تمامی میکروهایی که قابلیت راه اندازی lcd رو دارند میشه این کارو کرد ؟

با تشکر

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:

در مورخه : پنجشنبه، 29 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی) http://www.picpars.com (IP آدرس : )

سلام

کار نشد نداره! ولی چنین کاری بسیار پیچیده و خسته کننده هست. اگر توجه کرده باشید تعداد پین های خیلی زیادی به lcd وصل میشه و به عنوان مثال برای یک LCD 2*16 دو عدد چیپ برای راه اندازی اون استفاده شده. اگر همه ابن موارد را نادیده بگیرم باید تعداد توابع خیلی زیادی براش تعریف کنیم، یعنی برای هر کد فرمان توابع خاص خودشو بنویسید و از هم مهمتر باید به پروتکل دریافت اطلاعات و همچنین پروتکلی که با آن پیکسل های یک خانه  از یک کاراکتر را بدانیم و ...

به نظرم وقت خودتو صرف چین کاری نکنی بهتر...

ارسال جوابیه ]

ارسال جوابیه ]

نام شما: سعید
ایمیل شما: hamidinezhad@gmail.com

در مورخه : شنبه، 1 بهمن ماه، 1390توسط
(مشخصات کاربر saeidhp | ارسال پیغام شخصی) (IP آدرس : )

من شنیدم Atmega168 قابلیت درایو lcd رو داره که ظاهرا میشه این کارو انجام داد ولی یکی از دوستان میگفت با تمام میکروها میشه این کارو انجام داد که ظاهرا طبق دستورالعمل شما باید انجام بشه 

شما در مورد کدنویسی Atmega168 یا میکروکنترلرهای دیگه ای که قیمت ارزان تری دارند و قابلیت درایو lcd دارند اطلاعاتی دارید ؟

 

ارسال جوابیه ]

نام شما: سعید
ایمیل شما: saeed.nayyeri@yahoo.com

در مورخه : سه شنبه، 8 فروردين ماه، 1391 (IP آدرس : )

سلام ممنون از مطالب خوبتون میشه در مورد ال سی دی گرافیکی هم توضیح بدین و چه طور در کدویژن تعریفش کنیم و دستوراتی که داره و چطور استفاده کنیم ممنون خیلی لازم دارم هیچی هم پیدا نکردم

 

ارسال جوابیه ]

نام شما: sh.j
ایمیل شما: sh.j1383@yahoo.com

در مورخه : جمعه، 25 فروردين ماه، 1391 (IP آدرس : )

سلام

مطالب این سایت کلا خوبه. ممنون

میشه راهنماییم کنید که چه طور میشه lcd رو فارسی کرد؟یعنی چه طور  میشه تمامی نوشته های روی اون فارسی بشه؟

 

ارسال جوابیه ]

نام شما: nazanin
ایمیل شما: nazanin_yady_67@yahoo.com

در مورخه : دوشنبه، 28 فروردين ماه، 1391 (IP آدرس : )

salam

khaste nabashid

etelaatetun kheili mofide

ama man daneshjoye sakhtafzar hastam va dar uni kheili bahamun in mabahes kar nashode

hala man baraye poroje nahaeim ke lcd ravan hast be moshkel bar khordam

ba ketabe aghaye kahe shoro kardam ke zaban beisic hast va kheili sakht

ghatat ham tahie kardam

micro ham atmega16 gereftam

mikhasatam bebinam kasy mitone komakam kone barnamash va namaye sakhtafzarisho behem bege

man zamane ziady nadaram

lotfan komakam konid

agar be emeil ham javab bedid mamnon misham

montazeream

ارسال جوابیه ]

نام شما: EHSAN
ایمیل شما: EABOLGHASEMI@YAHOO.COM

در مورخه : شنبه، 30 ارديبهشت ماه، 1391 (IP آدرس : )

سلام حواهش می کنم در صورت امکان توضیحاتی در مورد برنامه مورد استفاده در اسلوسکوپ ای وی ار برام بفرستید . من از این پروژه به عنوان پایان نامه کارشناسی استفاده کردم و استاد ازم توضیح در مورد برنامه نوشته شده میکرو خواسته .شوکه

ارسال جوابیه ]

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]
  • امتیاز بدهید
  • انتخاب ها
  • اشترک گذاری
آیا این مطالب مورد رضایت شما واقع گردید؟ لطفا با رای دادن به این مطلب ما را در بهبود بخشیدن به مطالب کمک کنید. با اینکار به سایر دوستان‌تان نیز کمک خواهید کرد.


 فایل پی دی اف فایل پی دی اف

 گرفتن پرينت از اين مطلب گرفتن پرينت از اين مطلب

 ارسال به دوستان ارسال به دوستان

 گزارش این پست به مدیر سایت گزارش این پست به مدیر سایت

پروژه های آماده
فرکانس متر صنعتی 0تا 500 ولت 20KHz

ورودی این فرکانس متر قادر است با ولتاژهای 12 تا 500 ولت AC کار کند. ماکزیمم فرکانس اندازه گیری 20KHz می باشد. همچنین با تعیین نرخ نمونه برداری می توانید فرکانس را تا دو رقم اعشار اندازه گیری نمائید. جزئیات...


عناوین مطالب
عناوین مطالب را در موضوعات مربوطه جستجو کنید!
یک موضوع انتخاب کنید:



لینک باکس مهم‌ترین‌ ها
  • پروژه‌ها
  • برترین‌ها
  • پر بازدید
  • بیشترین نظرات
cash10-H8

سالنامه فارسی
ش ی د س چ پ ج
  12345
6789101112
13141516171819
20212223242526
2728293031

دوشنبه

1

1 خرداد ماه، 1391
21/05/2012


رویداد ها:
روز بزرگداشت ملاصدرا - روز بهره وری و بهینه سازی مصرف

جستجو در تقویم ...
cash40-D1

آمار کاربران

نظرسنجی
نظر شما در مورد کیفیت سایت چیست؟

خیلی عالیه
میتونه بهتر باشه
جای کار داره
خوب نیست
نظری ندارم!



شما میتوانید در این مورد نظر مکتوب خود را بنویسید: مشاهد نتایج و ثبت نظر

نظرسنجی ها

تعداد آراء: 679    نظرات: 42

تبادل لینک
PicPars با تمامی وب سایتها و وبلاگها تبادل لینک میکند. ابتدا لینک ما در وب خود ثبت کنید و سپس لینک خود را از اینجا برای ما ارسال کنید. در اولین فرصت لینک شما در سایت ثبت می شود.

پیشنهاد ما

سفارش طراحی پروژه
مرورگر پیشنهادی ما
نرم افزار دانلود فایلها
برنامه فشرده سازی







امتیاز به سایت
امتیاز به این صفحه
با یک امتیاز مثبت از طریق Gmail تان از سایت حمایت کنید