نمایش نتایج 1 تا 1 از 1

نام تاپیک: فارسی نویسی در LCD های گرافیکی

  1. #1

    فارسی نویسی در LCD های گرافیکی

    هدف : فارسی نویسی Native در Graphic‌ LCD
    پلاتفورم : AVR
    زبان برنامه نویسی : C و تحت استاندارد GNU99
    کامپایلر : AVR-GCC
    برنامه نویس : ابراهیم جهاندار

    سعی میکنم یکسری توضیحات و نکات رو درباره استفاده از این کتابخونه بنویسم ، اگر سوالی داشتید که توضیح ندادم بگید .


    توضیحات و نکات :

    توسط این کتابخانه شما میتونید مستقیما در برنامه تون فارسی بنویسید و اونو نمایش بدید . برای اینکار کافیه فقط کتابخونه + موارد مورد نیاز دیگر رو در سورس C تو Include کنین .

    این کتابخونه در حال حاضر فقط قادر به تشخیص کرکتر های UNICODE دوبایتی می باشد .

    فعلانه برای این کتابخونه یک فونت کامل بیشتر طراحی نشده و اون هم کوچکترین فونت قابل استفاده یعنی فونت 8*8 هست . البطه یک فونت دیگر هم طراحی شده که در حقیقت نمونه فونت Zar هست و با سایز 38pt که در حال حاضر فقط اعداد رو در بر میگیره .

    2 الگوریتم رندر در این کتابخونه وجود داره ، یکی الگوریتم چپ به راست معمولی ( فونتی که توسط نرم افزار LFG‌ تولید میشود ) و دیگری الگوریتم بیتی بالا به پایین ( فونتی که توسط نرم افزار FontGen تولید میشود - البطه با یکمی تغییرات ) . اگر شما از فونتی استفاده کنید که فقط از یکی از این الگوریتم ها استفاده کنه الگوریتم دیگر بطور خودکار حذف میشه و ججم کتابخونه رو کمتر میکنه .

    شما میتونید با قرار دادن دیفینیشن های مربوطه از فونت های استفاده کنید (‌ include شون کنید ) . یا اینکه بعد از include کردن فایل هدر فونت خودتون رو include کنین .

    اگر شما از KS0108 استفاده نمیکنید یا اینکه دوست دارید از درایور خودتون استفاده کنید میتونید خیلی راحت توابع درایور خودتون رو با توابع درایور پیشفرض عوض کنید . کافیه در فایل هدر اونها رو عوض کنید .

    شما میتونید فونت های با هر سایز دلخواه ( مضرب 8 ) رو خودتون برای خودتون با یکی از دو نرم افزار ی که بالا گفتم طراحی کنید و با استفاده از الگویی در فونت پیشفرض موجود فایل هدر مربوط به فونت خودتون رو بسازید . کافیه نوع رندر ، سایز طول و عرض و ... مشخص کنید .

    این کتابخونه این قابلیت رو داره که شما هر وقت خواستید میتونید بین فونت ها سوییچ کنید . یعنی فونت رو عوض کنید و با فونت جدید چیز دیگری در LCD بنویسید .

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

    وقتی شما متن رو از طریق vprintf به استریم پاس میکنید ، بعد از انجام جایگزینی های لازم و کلا تغییرات بر روی رشته ، استریم کرکتر هارو دونه دونه به کتابخونه میفرسته ، و از اونجایی که یونیکد دو بایتی هست ما در هر دوبار که استریم وارپر تابع مارو صدا میزنه 1 کرکتر رو تشخیص میدیم و اونو چاپ میکنیم .

    لازم به ذکر است شما میتوانید با تابع gpprintf ( در حقیقت ماکرو ) همانند printf و sprintf و کلا اعضای این خانواده رفتار کنید !

    مثلا برای اینکه توی GLCD بنویسیم " امروز پنجشنبه 1 دی 1386 " اینطور مینویسیم :

    gpprintf("امروز %s %i %s %i","پنجشنبه",1,"دی",1386);

    بعد از نوشتن عدد ها در صورتی که بعد از اونها هیچ چیز دیگری در LCD نمینویسید حتما تابع flushBufferedNumbers رو صدا بزنید تا اعداد بافر شده نمایش داده بشن .

    با استفاده از تابع SetFont میتونید فونت رو تغییر بدید ، اولین ارگیومنت این تابع مشخص کننده فونت مورد نظر هست ، که باید بجای اون ارگیومنت نام struct اون فونت رو قرار بدید . مثال هارو ببنید متوجه میشید .

    بدلیل استفاده از یک سری قابلیت های AVR-LIBC فعلانه نمیشه اونو برای کدویژن تبدیل کرد ، مگر اینکه جداگانه توسط GCC‌ کامپایل بشه و با برنامه ای که در کدویژن نوشته میشه ( استفاده از کتابخونه ) لینک بشه . ( بازم یه سری محدودیت هایی این وسط هست ) . در مورد Bascom هم اطلاعی ندارم که میشه یک کتابخونه کامپایل شده رو به همراه برنامه اصلی لینک کرد یا نه ولی باید بشه ! البطه نه به این اسونی ها .


    مشکلات :


    - بزرگترین اشکال این کتابخونه اینه که نمیتونه کلمات شکسته رو بیاره به خط بعدی ! مثلا اگر من بخوام متن " کتابخانه فارسی نویسی " رو چاپ کنم ، " کتابخانه فارسی نو " رو در خط اول و " ویسی" رو در خط دوم نشون میده . در صورتی که اگر این مشکل برطرف بشه کلمه نویسی به خط بعد انتقال پیدا میکنه . برای رفع این مشکل باید الگوریتم اصلی برنامه یکم تغییر بکنه و یک بافر برای کرکتر ها هم اضافه بشه . ( البطه با استفاده از روش های غیر اصولی میشه این مشکل رو برطرف کرد ولی من از ماست مالی خوشم نمیاد ! ).

    ایراد بعدی که به این کتابخونه وارده اینه که ، اگر شما یک متنی رو چاپ کنید ، و اگر بعد از اون هیچ متن دیگه ای رو چاپ نکنید ، کتابخونه اخرین حرف رو به اصتلاح نمیبنده مثلا کلمه فارسی به صورت فارسیـ در میاد ، برای رفع این مشکل شما میتونید یه فاصله بعد از متنتون بزارید .

    این مشکل هم در اینده حل خواهد شد ، برنامه به اصتلاح End of line یا End of File رو نمیتونه تشخیص بده .



    از این به بعد تمامی اپدیت ها در پست اول قرار میگیرند + یک پست برای بالا امدن تاپیک .


    نسخه و پروتو ی اولیه بهمراه شماتیک ؛ سورس کد کتابخانه ، maxlib ، و فایل شبیه ساز برای تست

    دریافت : http://jahandar.ir/tools/PersianLibrary_Test.rar

    ---

    اپدیت ، چند مشکل حل شده ، یه فونت عددی اضافه شده ، الگوریتم رندر تغیرات داشته . امکان استفاده از فونت با سایز های مختلف فراهم شده .

    دریافت : http://jahandar.ir/tools/PersianLibrary_0.2.rar


    اینجا هم دربارش بحث شده : http://www.eca.ir/forum2/index.php/topic,11952.0.html
    آخرین ویرایش به وسیله shankimout : پنج شنبه 29 خرداد 1393 در 00:40 صبح




قوانین ایجاد تاپیک در تالار

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