اطلاعیه

Collapse
No announcement yet.

دستورات مربوط به LCD - میکروکنترلرها

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    دستورات مربوط به LCD - میکروکنترلرها

    در این قسمت ادامه دستورات کامپایلر 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 صادق است.


    منبع http://www.vis.ir
    **همیشه به این فکر کن که خداوند با توست**
لطفا صبر کنید...
X