NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4446 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: نحوه برنامه نویسیlcd کاراکتری در lcp2378

  1. #1
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض نحوه برنامه نویسیlcd کاراکتری در lcp2378

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

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

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

نام: conection.JPG
مشاهده: 75
حجم: 38.7 کیلو بایت   برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: ersal.JPG
مشاهده: 72
حجم: 6.1 کیلو بایت  
    فايل هاي پيوست شده فايل هاي پيوست شده

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    Aug 2011
    نام
    MSS
    نوشته ها
    54
    تشکر
    72
    تشکر شده 53 بار در 29 پست

    پیش فرض

    سلام.
    به نظر من حدف از فراخوانی تابع با مقدار صفر فقط RESET کردن پایه هایی است که قبلا به صورت خروجی پیکربنی شده.چون بهتره بعد از پیکر بندی پایه ها به صورت خروجی یکبار RESET بشن .
    البته بنظر من.

  4. #3
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    این جور که من روند برنامه 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));
    }
    فکر کنم این مثال راحتر باشه فهمش برای شروع کار تا مثال اولی که ذکر کردم. مگه اینکه صاحاب مثال اولی بیاد شرح بده روند کارش چی بوده

  5. #4
    کاربر علاقه مند
    تاریخ عضویت
    Aug 2011
    نام
    MSS
    نوشته ها
    54
    تشکر
    72
    تشکر شده 53 بار در 29 پست

    پیش فرض

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

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

  6. تشکرها از این نوشته :


  7. #5
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    این برنامه ای که اول گذاشتم را حواسم نبود و تا حالا دقت نکرده بودم همونی بود که در مجله 9 به عنوان هدر lcd معرفی شده و اینجا گذاشتند ولی خیلی عجیبه 6 هفت ماه پیش که یه تستی زدم جواب نمی داد. حالا آقای شایانفر اینجا گیرش را پیدا کردند گذاشتند و جواب میداد. ولی باید بگم نسبت به هدر خود کیل فهمش سخت تره!! و این برنامه ای که بعدش از اینجا گذاشتم واقعا ساده است.

  8. تشکرها از این نوشته :


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •