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