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:
ان شاء الله که دوستان این چند تا سوال را بلندند! یا مثل من دفعه اوله میرند در جزییات! فقط جون من خیلی نرید وارد جزییات بشیدا ممکنه دیگه نتونید بیرون بیایند اینجام کسی به دادتن نمیرسه
من بارها و بارها ال سی دی کاراکتری رو بدون هیچ مشکلی راه اندازی کردم با برد 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:
ان شاء الله که دوستان این چند تا سوال را بلندند! یا مثل من دفعه اوله میرند در جزییات! فقط جون من خیلی نرید وارد جزییات بشیدا ممکنه دیگه نتونید بیرون بیایند اینجام کسی به دادتن نمیرسه