PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نحوه برنامه نویسیlcd کاراکتری در lcp2378



mzarkoob
22-02-2012, 19:27
سلام به همه دوستان.
من بارها و بارها ال سی دی کاراکتری رو بدون هیچ مشکلی راه اندازی کردم با برد lpc2378 شرکت کویر.فقط یک فایل lcd.h رو باید add کنیم و هیچ خبری از lcd.c هم نیست ! به راحتی کار با بسکام اولین بار ، نه ، ببخشید ! دومین بار راه انداختمش ! اولین بار بدلیل این راه نیفتاد چون من از پورت صفر داشتم در حالت Fast استفاده میکردم که برای اینکار بیت صفرم رجیستر SCS باید 1 بشه و من اینکار رو نکرده بودم !
فایل پروژه رو هم قرار میدم برای اونهایی که احیانا هنوز مشکل دارند !
فقط برنامه رو نگاه کنید که چقدر ساده هست.
با سلام
برای اولین بار من در یه فرصتی که داشتم وارد جزییات برنامه lcd کاراکتری شدم!:018:
چون قبلا پیکر بندیم را یه جور دیگه بسته بودم با کلی دردسر عوضش کردم تا مطابق این شکل بشه:

You can see links before reply

خوب این برنامه جواب میده و موردی نبود.(ضمیمه کردم) حالا در مورد جزییاتش دچار موارد ابهام شدم. اول اینکه روند ارسال یک کاراکتر روی lcd چیست؟ آیا دقیقا همینه؟

You can see links before reply

ابتدا باید پیکر بندی انجام شود که با تابع lcd_init انجام می شود که محتویات این تابع اینه:

PIO_enable =0X00;
PIO_CfgOutput = ((1<<LCD_RS)|(1<<LCD_E)|(1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
clcd_Delay();
setD4567(0);
setD4567((1<<5)|(1<<4));
PIO_SetOutput=(1<<LCD_E);
clcd_minDelay();
PIO_ClearOutput =(1<<LCD_E);
clcd_Delay();
setD4567((1<<5)|(1<<4));
PIO_SetOutput =(1<<LCD_E);
clcd_minDelay();
PIO_ClearOutput =(1<<LCD_E);
clcd_Delay();
setD4567(1<<5);
PIO_SetOutput =(1<<LCD_E);
clcd_minDelay();
PIO_ClearOutput =(1<<LCD_E);
clcd_Delay();
lcd_command(0x28);
lcd_command(0x0c);
clcd_Delay();ابتدا که با pinsell پورت مربوطه را در حالت gpio میذاره و شش هفت پایه مورد نظر را با FIO0DIRخروجی می کند.بعد تابع:
setD4567(0)را فراخوانی کرده:

void setD4567(char val)
{
PIO_ClearOutput =((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));
if (val & 0x80)
PIO_SetOutput =(1<<LCD_DB7) ;
if (val & 0x40)
PIO_SetOutput =(1<<LCD_DB6);
if (val & 0x20)
PIO_SetOutput =(1<<LCD_DB5);
if (val & 0x10)
PIO_SetOutput =(1<<LCD_DB4);
}در اینجا 4 خط دیتا را با FIO0CLR صفر کرده و چون ورودی تابع 0 است هیچ کدوم از شرطا اجرا نمیشه!! خوب پس چه فایده داره؟
خسته شدم باقیش در تایپیک بعدی:125:
ان شاء الله که دوستان این چند تا سوال را بلندند! یا مثل من دفعه اوله میرند در جزییات! فقط جون من خیلی نرید وارد جزییات بشیدا ممکنه دیگه نتونید بیرون بیایند اینجام کسی به دادتن نمیرسه

me28k
23-02-2012, 04:01
سلام.
به نظر من حدف از فراخوانی تابع با مقدار صفر فقط RESET کردن پایه هایی است که قبلا به صورت خروجی پیکربنی شده.چون بهتره بعد از پیکر بندی پایه ها به صورت خروجی یکبار RESET بشن .
البته بنظر من.lov:

mzarkoob
24-02-2012, 00:35
این جور که من روند برنامه lcd را دیدم اینطور نیست که اول E را فعال کنیم بعد ارسال انجام بدیم، بلکه اول ارسال می کنیم و بعد 450 نانو ثانیه ای E را یک و سپس صفر می کنیم. این یک مثال ساده برای 8 بیتی است:

void lcd_putchar(unsigned char CHAR){
FIO0SET=RS;
FIO0CLR=RW;
FIO0SET0 = CHAR;
FIO0SET=E;
delay(70);
FIO0CLR=E;
delay(5000);
FIO0CLR0 = CHAR;
}برای 4 بیتی هم ابتدا 4 بیت اول را با همین روش میفرستیم و سپس 4 بیت دوم:

void lcd_putchar(unsigned char CHAR){

FIO0SET=RS;
FIO0CLR=RW
FIO0SET= (((CHAR&0X10)|(CHAR&0X20)|(CHAR&0X40)|(CHAR&0X80))>>4);
FIO0SET=E;
delay(70);
FIO0CLR=E;
delay(5000);
FIO0CLR= (((CHAR&0X10)|(CHAR&0X20)|(CHAR&0X40)|(CHAR&0X80))>>4);

FIO0SET= ((CHAR&0X01)|(CHAR&0X02)|(CHAR&0X04)| (CHAR&0X08));
FIO0SET=E;
delay(70);
FIO0CLR=E;
delay(5000);
FIO0CLR= ((CHAR&0X01)|(CHAR&0X02)|(CHAR&0X04)| (CHAR&0X08));
}فکر کنم این مثال راحتر باشه فهمش برای شروع کار تا مثال اولی که ذکر کردم. مگه اینکه صاحاب مثال اولی بیاد شرح بده روند کارش چی بودهlov:

me28k
24-02-2012, 02:54
[QUOTE=mzarkoob;37832]این جور که من روند برنامه lcd را دیدم اینطور نیست که اول E را فعال کنیم بعد ارسال انجام بدیم، بلکه اول ارسال می کنیم و بعد 450 نانو ثانیه ای E را یک و سپس صفر.

سلام.
به نظر من اول دیتا ارسال نمیشه بلکه دیتارو به روی پورت خروجی مینویسه و بعد با ست کردن پایه E ای سی دی دیتایی که در پورت خروجی میکرو هست رو میخونه.دلیلش هم اینه که اگه اول پایه E ست بشه چون ورودی ال سی دی (خروجی میکرو) در لحظه ست کردن E صفر است (دیتا وجود ندارد) مقدار صفر توسط ال سی دی خونده میشه و اگه بعد از ست کردن E مقدار ورودی ال سی دی تغییر بکنه باعث اختلال میشه.

mzarkoob
25-02-2012, 16:54
این برنامه ای که اول گذاشتم را حواسم نبود و تا حالا دقت نکرده بودم همونی بود که در مجله 9 به عنوان هدر lcd معرفی شده و اینجا (You can see links before reply) گذاشتند ولی خیلی عجیبه 6 هفت ماه پیش که یه تستی زدم جواب نمی داد. حالا آقای شایانفر اینجا (You can see links before reply) گیرش را پیدا کردند گذاشتند و جواب میداد. ولی باید بگم نسبت به هدر خود کیل فهمش سخت تره!! و این برنامه ای که بعدش از اینجا (You can see links before reply)گذاشتم واقعا ساده است.