در این قسمت ادامه دستورات کامپایلر PIC Simulator IDE شرح داده می شود. این دستورات مربوط به ارتباط میکروکنترلر با LCD می باشد. برای اینکه بتوانید در این نرم افزار به زبان بیسیک برنامه نویسی نمائید ابتدا برنامه را باز کنید و روی منوی TOOLS رفته و سپس Basic Compiler را انتخاب نمائید.
اکنون ادامه دستورات:
دستورات:
قبل از مطالعه این دستورات بهتر است که با LCD و روش های ارتباط با آن آشنایی داشته باشید.
DEFINE
فرم کلی دستور:
DEFINE command
قبل از هر چیز درباره دستور DEFINE توضیح می دهم. برخی از دستورات دارای مقادیر پیش فرض هستند که با دستور DEFINE می توان مقدار دلخواه را مشخص نمود. در مثال ها کاربرد این دستور را مشاهده خواهید نمود.
________________________________________
LCD_BITS
فرم کلی دستور:
DEFINE LCD_BITS = 4 OR 8
این دستور مشخص می سازد که پورت اطلاعات LCD چهاربیتی است یا هشت بیتی (به روش های ارتباط با LCD مراجعه نمائید.)
مقدار پیش فرض 4 است.
________________________________________
LCD_DREG
فرم کلی دستور:
DEFINE LCD_DREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که خطوط دیتای LCD به کدام پورت میکرو متصل است . که یکی از پورت های فوق باید انتخاب شود.
مقدار پیش فرض PORTB است.
________________________________________
LCD_DBIT
فرم کلی دستور:
DEFINE LCD_DBIT = 0 or 4
این دستور زمانی کاربرد دارد که BUS چهار بیتی باشد. و برای باس 8 بیتی تعریف نشده .
این دستور مشخص می سازد که BUS به 4 بیت کم ارزشتر از پورت میکرومتصل است هرگاه صفر انتخاب شود و همچنین باس به 4 بیت با ارزش تر از پورت میکرو متصل است ، هرگاه 4 انتخاب شود.
مقدار پیش فرض 4 است.
________________________________________
LCD_RSREG
فرم کلی دستور:
DEFINE LCD_RSREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه RS از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض PORTB است.
________________________________________
LCD_RSBIT
فرم کلی دستور:
DEFINE LCD_RSBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه RS از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 3 است.
________________________________________
LCD_EREG
فرم کلی دستور:
DEFINE LCD_EREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه Enable از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض PORTB است.
________________________________________
LCD_EBIT
فرم کلی دستور:
DEFINE LCD_EBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه Enable از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 2 است.
________________________________________
LCD_RWREG
فرم کلی دستور:
DEFINE LCD_RWREG = PORTA OR PORTB OR PORTC OR PORTD
مشخص می سازد که پایه R/W از LCD به کدام پورت از میکرو متصل شده.
مقدار پیش فرض 0 است.
________________________________________
LCD_RWBIT
فرم کلی دستور:
DEFINE LCD_RWBIT = شماره پین پورت مشخص شده
مشخص می سازد که پایه R/W از LCD به کدام پین از پورت میکرو که با دستور قبل مشخص شده است ، متصل شده.
مقدار پیش فرض 0 است.
________________________________________
LCD_COMMANDUS
فرم کلی دستور:
DEFINE LCD_COMMANDUS = زمان برحسب میکروثانیه
مدت زمان تاخیر که پس از اجرای هر فرمان لازم است را مشخص می سازد.
مقدار پیش فرض 5000 میکروثانیه است.
________________________________________
LCD_DATAUS
فرم کلی دستور:
DEFINE LCD_DATAUS = زمان بر حسب میکروثانیه
مدت زمان تاخیر که پس از هربار ارسال اطلاعات روی LCD لازم است را مشخص می سازد.
مقدار پیش فرض 50 است.
________________________________________
LCD_INITMS
فرم کلی دستور:
DEFINE LCD_INITMS = زمان بر حسب میلی ثانیه
این دستور مدت زمان تاخیر برای دستور LCDINIT را مشخص می کند.
مقدار پیش فرض 100 است.
________________________________________
توجه: در هنگام استفاده از سه دستور اخیر در هنگام شبیه سازی با برنامه ، کمترین مقدار ممکن را برای آن ها در نظر بگیرید.
هر یک از دستورات فوق دارای مقادیر پیش فرض هستند لذا هرگاه هر یک از دستورات فوق را تایپ نکردید ، کامپایلر مقدار پیش فرض را برای آن پارامتر یا متغیر در نظر می گیرد. به عنوان مثال هرگاه دستور LCD_RWREG را در برنامه تایپ ننمودید کامپایلر هیچ پینی از پورت های میکروکنترلر را به پایه R/W از LCD اختصاص نمی دهد.
________________________________________
LCDINIT
فرم کلی دستور:
LCDINIT 0 or 1 or 2 or 3
این دستور باید قبل از اولین دستورفرمان (LCDCMDOUT) و اولین دستور ارسال اطلاعات (LCDOUT) قرار گیرد
اگر هیچ مقداری برای این دستور مشخص نشود و یا مقدار صفر برای آن مشخص شود ، مکان نمای LCD خاموش خواهد بود.
اگر مقدار 1 برای این دستور مشخص شود ، مکان نمای LCD چشمک زن خواهد بود.
اگر مقدار 2 برای این دستور مشخص شود ، مکان نمای LCD به صورت underline ثابت خواهد بود.
گر مقدار 3 برای این دستور مشخص شود ، مکان نمای LCD به صورت underline چشمک زن خواهد بود.
________________________________________
LCDOUT
این دستور برای ارسال اطلاعات روی LCD به کار می رود. با این دستور می توان مقادیرعددی ثابت ، متغیر رشته ای و متغیر ارسال نمود. و با استفاده از علامت (,) می توان ترکیبی از موارد فوق را ارسال نمود:
LCDOUT "mehdi_mosafard" عبارت داخل گیومه را روی LCD نمایش می دهد.
LCDOUT #A محتوای متغیر A را به صورت دسیمال روی LCD نمایش می دهد.
LCDOUT "vis.ir,#A
LCDOUT A کاراکتر اسکی محتوای متغیر A راروی LCD نمایش می دهد
________________________________________
LCDCMDOUT
این دستور برای ارسال فرمان روی LCD به کار می رود. با این دستور می توان مقادیرعددی ثابت ، متغیر رشته ای و متغیر ارسال نمود. و با استفاده از علامت (,) می توان ترکیبی از موارد فوق را ارسال نمود.
مثلا دستور زیر مشخص می سازد که مکان نما پس از نوشتن هر حرف یا عدد به سمت راست شیفت پیدا کند:
DIM A AS BYTE
A = 6
LCDCMDOUT #A
درسته که با روش فوق می توان فرمان ها را به LCD ارسال نمود اما این کامپایلر روش دیگری نیز برای این عمل در نظر گرفته است و آن استفاده از کلمات و دستورات کلیدی زیر است:
LCDCLEAR صفحه LCD پاک شود:
LCDHOME مکان نما در بالاترین سطر و در آخرین ستون سمت چپ قرار می گیرد
LCDLINE2HOME مکان نما در سطر دوم و آخرین ستون سمت چپ قرار می گیرد
LCDLEFT با هربار اجرای این دستور مکان نما یک کاراکتر به سمت چپ می رود
LCDRIGHT با هربار اجرای این دستور مکان نما یک کاراکتر به سمت راست می رود
LCDSHIFTLEFT با هربار اجرای این دستور تمامی کاراکترها به اندازه یک کاراکتر به سمت چپ شیفت پیدا می کنند
LCDSHIFTRIGHT با هربار اجرای این دستور تمامی کاراکترها به اندازه یک کاراکتر به سمت راست شیفت پیدا می کنند
LCDLINE1CLEAR تمامی کاراکترهای سطر اول را پاک می کند
LCDLINE2CLEAR تمامی کاراکترهای سطر دوم را پاک می کند
موقعیت مکان نما در سطر اول را مشخص می سازد. داخل پرانتز باید عددی بین 1 تا 40 باشد که شماره خانه ای که مکان نما در آن قرار می گیرد را (از سمت چپ) مشخص می سازد:
LCDLINE1POS( )
موقعیت مکان نما در سطردوم را مشخص می سازد. داخل پرانتز باید عددی بین 1 تا 40 باشد که شماره خانه ای که مکان نما در آن قرار می گیرد را (از سمت چپ) مشخص می سازد
LCDLINE2POS( )
________________________________________
LCDDEFCHAR
فرم کلی دستور:
LCDDEFCHAR v,a1,a2,a3,a4,a5,a6,a7,a8
از این دستور برای تعریف کاراکتر دلخواه کاربراستفاده می شود. مثلا اگر شما بخواهید که کاراکتر یک عدد پارسی و یا حرف پارسی را ایجاد نمائید و در پروژه تان از آن استفاده نمائید ، می توانید با استفاده از این دستور این کار را انجام دهید. اما محدودیتی وجود دارد و آن این است که بیش از 8 کاراکتر نمی توانید تعریف کنید دلیل این موضوع هم مربوط می شود به خود LCD های کاراکتری. این LCD ها دارای ثباتی با نام CGRAM می باشند که CG مخفف عبارت Character Cenerator (سازنده کاراکتر) می باشد. تعداد این ثبات ها 8 عدد می باشد ( cgram0 - cgram7) لذا بیشتر از 8 کاراکتر نمی توان ساخت. هر یک از این CGRAM ها دارای 8 بایت می باشد که این هشت بایت در واقع نقاط روشن و خاموش را در مکان کاراکترها مشخص می سازند:
شکل فوق مکان یک کاراکتر روی LCD را نشان می دهد. هر مکانی از 5 ستون و 8 سطر متشکل از نقاط ریز تشکیل شده است.
همانطور که قبلا گفته شد ثبات CGRAM دارای هشت بایت می باشد که هر یک از این 8 بایت به یکی از سطرهای شکل فوق مربوط می شود و 5 بیت کم ارزش هر یک از آن 8 بایت به ستون های فوق مربوط می شود. مقدار 1 منطقی نقطه ای را روشن می سازد و مقدار 0 منطقی نقطه ای را خاموش می سازد.
اما دستور LCDDEFCHAR (LCDDEFCHAR v,a1,a2,a3,a4,a5,a6,a7,a8 ) اولین آرگومان این دستور یعنی v می تواند مقادیری از 0 تا 7 داشته یاشد که در واقع شماره n امین کاراکتر تعریف شده را مشخص می سازد و قبلا ذکر شده بود که فقط 8 کاراکتر می توان تعریف نمود.
اما مقادیر a1 تا a8 هر یک به یکی از ستون های شکل فوق مریوط می شود- از بالا به پایین- بطوریکه a1 به بالاترین ستون و a8 به پایین ترین ستون. مقادیر a1 تا a8 هم می تواند به صورت دسیمال باشد و هم یه صورت باینری.
برای ارسال هریک از کاراکترهای تعریفی کافیست که از دستور lcdout استفاده شود. به این صورت که ابتدا دستور LCDOUT را نوشته و سپس شماره کاراکتر تعریف شده را می نویسیم. در مثال زیر 2 کاراکتر تعریف نمده ایم یکی عدد 3 و دیگری حرف ب :
Lcddefchar 0, %00000, %10101, %11111, %10000, %10000, %10000, %10000, %00000
Lcddefchar 1, %00000, %00000, %00000, %10001, %11111, %00100, %00000, %00000
lcdout 0
lcdout 1
نکته ی مهمی که درباره این کاراکترها باید مورد توجه قرار گیرد اینست که اولین کاراکتر ارسالی از این نوع در home (بالاترین و اولین خانه از سمت چپ lcd) قرار می گیرد و سپس می توان با دستورات شیفت دهنده کاراکتر مورد نظر را به خانه دلخواه انتقال داد.
________________________________________
چند مثال:
1:
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DEFINE LCD_COMMANDUS = 10000
DEFINE LCD_DATAUS = 100
DEFINE LCD_INITMS = 1000
LCDINIT
loop:
LCDOUT "vis.ir!"
WAITMS 1000
LCDCMDOUT LcdClear
WAITMS 1000
GOTO loop
2:
DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2
DEFINE LCD_COMMANDUS = 10000
DEFINE LCD_DATAUS = 100
DEFINE LCD_INITMS = 1000
DIM A AS WORD
A = 65535
LCDINIT 3
WAITMS 1000
loop:
LCDOUT "I am counting!"
LCDCMDOUT LcdLine2Home
LCDOUT #A
A = A - 1
WAITMS 250
LCDCMDOUT LcdClear
GOTO loop
3:
LCDDEFCHAR 0, 10, 10, 10, 10, 10, 10, 10, 10
LCDDEFCHAR 1, %11111, %10101, %10101, %10101, %10101, %10101, %10101, %11111
LCDOUT 0, 1, "Hello!", 1, 0
________________________________________
نرم افزار PIC Simulator IDE دارای 6 نوع LCD از نوع کاراکتر و عدد می باشد که در قسمت SETUP ماژول LCD این نرم افزار می توان هر یک از آن ها را بسته به نوع پروژه ، برای شبیه سازی انتخاب نمائید. این 6 نوع عبارتند از:
1 X 16 - 2 X 16 - 4 X 16 - 2 X 20 - 4 X 20 - 2 X 40
تمامی دستورات فوق برای هر یک از این 6 نوع LCD صادق است.