اطلاعیه

Collapse
No announcement yet.

روش طراحی فونت فارسی برای LCD KS108

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    روش طراحی فونت فارسی برای LCD KS108

    اینجا میخوام یکی از کارهایی که براش واقعا زیاد وقت گذاشتم رو اموزش بدم و یه برنامه نمونه در دست رس دوستان بگزارم

    امیدوارم همه بتونن ازش استفاده کنن
    من فرض رو بر این میزارم که شما با سی و کدویژن و LCD KS108 اشنا هستین و نیازی به توضیح و اموزش ندارین.

    یه توضیح مختصری در مورد فونت فارسی اینکه
    هرکدوم از حروف فارسی چهار حالت داره
    1- اول
    2- وست
    3- اخر چسبان
    4- اخر تنها
    مثل حرف ه ( ههه ه)
    مثل حرف ی ( ییی ی) و ...
    ممکنه بعضی از حروف یکی از این حالتها رو نداشته باشه ولی بیشتر از 4 تا نیست

    بنابر این بجر خود فونت یه MAP یا یه جدول دیگه هم نیازه که نوع حرف رو تشخیص بدیم

    اول خود فونت :

    باید با یه نرم افزار فونت ساز یا تبدیل عکس به HEX مثل FAST LCD یه عکس از فونت طراحی بشه
    این نرم افزار
    FAST LCD
    http://s1.picofile.com/file/6789884304/FastLCD.exe.html

    این هم خود فایل فونتمون که فعلا به صورت یه عکسه





    و بعد از تبدیل به صورت HEX میشه

    من چون اینجا فقط میخوام در مورد فارسی توضیح بدم بنابر این قسمت فارسیشو جدا میکنم و بعد از کمی تغییر و ویرایش میشه این


    flash unsigned char F_FONT8x8[78][8] = {
    0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x3A, 0x02,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xA0, 0x18,
    0x18, 0x24, 0x20, 0xA0, 0x20, 0x20, 0x20, 0x18,
    0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xA0, 0x98,
    0x18, 0x24, 0x20, 0xA0, 0xA0, 0xA0, 0x20, 0x18,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x1A,
    0x18, 0x24, 0x20, 0x22, 0x20, 0x22, 0x20, 0x18,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x21, 0x1A,
    0x18, 0x24, 0x20, 0x24, 0x22, 0x24, 0x20, 0x18,
    0x00, 0x00, 0x20, 0x28, 0x24, 0xA4, 0x28, 0x10,
    0x00, 0x40, 0xA0, 0xA8, 0xA4, 0x24, 0xA8, 0x10,
    0x00, 0x00, 0x20, 0xA8, 0xA4, 0xA4, 0x28, 0x10,
    0x00, 0x40, 0xA0, 0xA8, 0x24, 0xA4, 0xA8, 0x90,
    0x00, 0x00, 0x20, 0x28, 0x24, 0x24, 0x28, 0x10,
    0x00, 0x40, 0xA0, 0xA8, 0xA4, 0x24, 0x28, 0x10,
    0x00, 0x20, 0x22, 0x28, 0x24, 0x24, 0x28, 0x10,
    0x00, 0x40, 0xA2, 0xA8, 0xA4, 0x24, 0x28, 0x10,
    0x00, 0x00, 0x00, 0x20, 0x40, 0x44, 0x28, 0x10,
    0x00, 0x00, 0x00, 0x22, 0x40, 0x44, 0x28, 0x10,
    0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x38,
    0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x3A,
    0x00, 0x00, 0x00, 0x00, 0x80, 0x84, 0x42, 0x34,
    0x00, 0x20, 0x20, 0x18, 0x20, 0x18, 0x20, 0x18,
    0x70, 0x88, 0x80, 0x78, 0x20, 0x18, 0x20, 0x18,
    0x00, 0x20, 0x20, 0x18, 0x22, 0x19, 0x22, 0x18,
    0x70, 0x88, 0x80, 0x78, 0x22, 0x19, 0x22, 0x18,
    0x00, 0x20, 0x18, 0x30, 0x28, 0x24, 0x24, 0x18,
    0x70, 0x88, 0x80, 0x7C, 0x28, 0x24, 0x24, 0x18,
    0x00, 0x20, 0x18, 0x32, 0x28, 0x24, 0x24, 0x18,
    0x70, 0x88, 0x80, 0x7C, 0x28, 0x25, 0x24, 0x18,
    0x00, 0x00, 0x20, 0x3E, 0x28, 0x24, 0x24, 0x18,
    0x00, 0x00, 0x20, 0x3E, 0x28, 0x25, 0x24, 0x18,
    0x00, 0x00, 0x00, 0x20, 0x38, 0x24, 0x24, 0x28,
    0x00, 0x00, 0x20, 0x28, 0x34, 0x14, 0x34, 0x2C,
    0x00, 0x00, 0x00, 0x40, 0xA8, 0x94, 0x94, 0xA8,
    0x00, 0x00, 0x00, 0x60, 0x90, 0x9C, 0x92, 0x92,
    0x00, 0x00, 0x00, 0x20, 0x38, 0x24, 0x25, 0x28,
    0x00, 0x00, 0x20, 0x28, 0x34, 0x15, 0x34, 0x2C,
    0x00, 0x00, 0x00, 0x40, 0xA8, 0x94, 0x95, 0xA8,
    0x00, 0x00, 0x00, 0x62, 0x90, 0x9C, 0x92, 0x92,
    0x00, 0x00, 0x00, 0x20, 0x38, 0x25, 0x24, 0x18,
    0x18, 0x24, 0x20, 0x20, 0x38, 0x25, 0x24, 0x18,
    0x00, 0x00, 0x00, 0x20, 0x39, 0x24, 0x25, 0x18,
    0x00, 0x30, 0x48, 0x80, 0x99, 0xA4, 0xA5, 0x78,
    0x00, 0x00, 0x20, 0x2C, 0x2A, 0x2A, 0x2A, 0x12,
    0x18, 0x24, 0x20, 0x2C, 0x2A, 0x2A, 0x2A, 0x12,
    0x00, 0x00, 0x20, 0x2C, 0x2A, 0x2B, 0x2B, 0x13,
    0x18, 0x24, 0x20, 0x2C, 0x2A, 0x2B, 0x2B, 0x13,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
    0x00, 0x00, 0x30, 0x48, 0x40, 0x40, 0x20, 0x1E,
    0x00, 0x00, 0x20, 0x20, 0x18, 0x24, 0x24, 0x18,
    0x00, 0x00, 0xF0, 0x08, 0x18, 0x24, 0x24, 0x18,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x22, 0x18,
    0x00, 0x30, 0x48, 0x80, 0x84, 0x80, 0x40, 0x38,
    0x00, 0x00, 0x00, 0x00, 0x98, 0xA4, 0xA4, 0x78,
    0x00, 0x00, 0x20, 0x28, 0x15, 0x2A, 0x24, 0x18,
    0x00, 0x00, 0x20, 0x78, 0xA4, 0x54, 0x28, 0x20,
    0x00, 0x00, 0x00, 0x00, 0x0C, 0x12, 0x02, 0x1E,
    0x00, 0x00, 0x00, 0x00, 0x30, 0x44, 0x48, 0x30,
    0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xA0, 0x18,
    0x00, 0x70, 0x88, 0x80, 0x90, 0xA8, 0x48, 0x10,
    0x00, 0x38, 0x44, 0x80, 0x8C, 0x92, 0x92, 0x64,
    0x00, 0x00, 0x00, 0x00, 0x2C, 0x12, 0x08, 0x04,
    0x00, 0x00, 0x00, 0x00, 0x22, 0x3C, 0x20, 0x1E,
    0x00, 0x18, 0x14, 0x3E, 0x40, 0x3E, 0x40, 0x3E,
    0x00, 0x00, 0x00, 0x0C, 0x12, 0xA2, 0x02, 0x04,
    0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x30,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E,
    0x00, 0x00, 0x00, 0x00, 0x7E, 0x08, 0x08, 0x06,
    0x00, 0x00, 0x7E, 0x08, 0x08, 0x06, 0x08, 0x06,
    0x00, 0x00, 0x00, 0x7C, 0x10, 0x1C, 0x12, 0x12,
    0x00, 0x00, 0x30, 0x48, 0x22, 0x44, 0x48, 0x30,
    0x00, 0x00, 0x0C, 0x52, 0x30, 0x10, 0x08, 0x04,
    0x00, 0x00, 0x00, 0x06, 0x18, 0x60, 0x18, 0x06,
    0x00, 0x00, 0x00, 0x60, 0x18, 0x06, 0x18, 0x60,
    0x00, 0x00, 0x00, 0x00, 0x0C, 0x12, 0x12, 0x7C,
    };
    حالا به یه MAP نیاز داریم
    این MAP برای تشخیص نوع حرف و حالتش به کار میره
    توی یونیکد حروف فارسی از 127 شروع میشه تا 255 پس یکی یکی شماره حروف رو در میاریم
    و توی یه جدول 128X4 میزاریم

    مثل این


    flash unsigned char F_FONT_MAP[111][4]={
    0xFF, 0xFF, 0xFF, 0xFF, // 127 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 128 =>
    0x06, 0x06, 0x05, 0x05, // 129 => پ
    0xFF, 0xFF, 0xFF, 0xFF, // 130 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 131 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 132 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 133 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 134 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 135 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 136 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 137 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 138 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 139 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 140 =>
    0x0E, 0x0E, 0x0D, 0x0D, // 141 => چ
    0x17, 0x17, 0x17, 0x17, // 142 => ژ
    0xFF, 0xFF, 0xFF, 0xFF, // 143 =>
    0x31, 0x31, 0x30, 0x30, // 144 => گ
    0xFF, 0xFF, 0xFF, 0xFF, // 145 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 146 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 147 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 148 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 149 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 150 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 151 =>
    0x2F, 0x2F, 0x2E, 0x2E, // 152 => ک
    0xFF, 0xFF, 0xFF, 0xFF, // 153 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 154 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 155 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 156 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 157 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 158 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 159 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 160 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 161 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 162 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 163 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 164 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 165 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 166 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 167 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 168 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 169 =>
    0x3C, 0x3B, 0x3A, 0x39, // 170 => ه
    0xFF, 0xFF, 0xFF, 0xFF, // 171 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 172 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 173 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 174 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 175 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 176 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 177 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 178 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 179 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 180 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 181 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 182 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 183 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 184 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 185 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 186 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 187 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 188 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 189 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 190 =>
    0x43, 0x43, 0x43, 0x43, // 191 => ؟
    0x3C, 0x3B, 0xFF, 0xFF, // 192 => ه
    0x40, 0x40, 0x40, 0x40, // 193 => ء
    0xFF, 0xFF, 0xFF, 0x00, // 194 => آ
    0xFF, 0xFF, 0xFF, 0xFF, // 195 => أ
    0xFF, 0xFF, 0xFF, 0xFF, // 196 => و
    0x02, 0x02, 0x02, 0x02, // 197 => إ
    0xFF, 0xFF, 0xFF, 0xFF, // 198 => ئ
    0x02, 0x01, 0x01, 0x02, // 199 => ا
    0x04, 0x04, 0x03, 0x03, // 200 => ب
    0xFF, 0xFF, 0xFF, 0xFF, // 201 => ه
    0x08, 0x08, 0x07, 0x07, // 202 => ت
    0x0A, 0x0A, 0x09, 0x09, // 203 => ث
    0x0C, 0x0C, 0x0B, 0x0B, // 204 => ج
    0x10, 0x10, 0x0F, 0x0F, // 205 => ح
    0x12, 0x12, 0x11, 0x11, // 206 => خ
    0x13, 0x13, 0x13, 0x13, // 207 => د
    0x14, 0x14, 0x14, 0x14, // 208 => ذ
    0x15, 0x15, 0x15, 0x15, // 209 => ر
    0x16, 0x16, 0x16, 0x16, // 210 => ز
    0x19, 0x19, 0x18, 0x18, // 211 => س
    0x1B, 0x1B, 0x1A, 0x1A, // 212 => ش
    0x1D, 0x1D, 0x1C, 0x1C, // 213 => ص
    0x1F, 0x1F, 0x1E, 0x1E, // 214 => ض
    0xFF, 0xFF, 0xFF, 0xFF, // 215 =>
    0x20, 0x20, 0x20, 0x20, // 216 => ط
    0x21, 0x21, 0x21, 0x21, // 217 => ظ
    0x25, 0x24, 0x23, 0x22, // 218 => ع
    0x29, 0x28, 0x27, 0x26, // 219 => غ
    0xFF, 0xFF, 0xFF, 0xFF, // 220 =>
    0x2B, 0x2B, 0x2A, 0x2A, // 221 => ف
    0x2D, 0x2D, 0x2C, 0x2C, // 222 => ق
    0x2F, 0x2F, 0x2E, 0x2E, // 223 => ک
    0xFF, 0xFF, 0xFF, 0xFF, // 224 =>
    0x33, 0x33, 0x32, 0x32, // 225 => ل
    0xFF, 0xFF, 0xFF, 0xFF, // 226 =>
    0x35, 0x35, 0x34, 0x34, // 227 => م
    0x37, 0x37, 0x36, 0x36, // 228 => ن
    0x3C, 0x3B, 0x3A, 0x39, // 229 => ه
    0x38, 0x38, 0x38, 0x38, // 230 => و
    0xFF, 0xFF, 0xFF, 0xFF, // 231 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 232 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 233 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 234 =>
    0xFF, 0xFF, 0xFF, 0xFF, // 235 =>
    0x3F, 0x3E, 0x3D, 0x3D, // 236 => ی
    0x3F, 0x3E, 0x3D, 0x3D // 237 => ی
    };

    حالا کل کار اینه که کد هگز یکی یکی حروف جملتون رو ضرب در چهار کنید و با عدد 127 جمع کنید حالت حرف رو تشخیص بدی (بفهمی کدوم یکی از اون چهارتاست) بعد با خوندن 8 بایت از جدول فونتمون با ابتدای عددی که از توی جدول MAP در اوردیم روی LCD نمایش بدیم
    توی پست بعد روش تشخیص حالتهای حروف رو هم یاد خواهم داد.
    تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
    به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

    #2
    پاسخ : روش طراحی فونت فارسی برای LCD KS108

    واقعا ازت ممنونم برای آموزشهای خوبت اگه برات مقدور بود ساختن اون نوار برای SELECT را هم آموزش بده ممنوندر ضمن در سایت ایران میکرو کاربری به نام AGAPE این فونت را ساخته وشما میتونی توی کدویژن فارسی تایپ کنی و هر فونتی هم که بخوای وسفارش بدی هزینه اش را میگیره و میسازه نمیدونم چطوری این کار را کرده

    دیدگاه


      #3
      پاسخ : روش طراحی فونت فارسی برای LCD KS108

      نوشته اصلی توسط زوار
      واقعا ازت ممنونم برای آموزشهای خوبت اگه برات مقدور بود ساختن اون نوار برای SELECT را هم آموزش بده ممنوندر ضمن در سایت ایران میکرو کاربری به نام AGAPE این فونت را ساخته وشما میتونی توی کدویژن فارسی تایپ کنی و هر فونتی هم که بخوای وسفارش بدی هزینه اش را میگیره و میسازه نمیدونم چطوری این کار را کرده
      زوار جان من که قبلا هم گفتم فقط موقع چاپ یا نوشتن رم lcd دیتا رو نات میکنم پیکسلهای سفید سیا میشه و پیکسلهای سیاه سفید همین ولی برای انتخاب عکس یا منوهای گرافیکی مثل صفحه اول اون برد یه تابع نوشتم مثل تابع نمایش عکس که هر جا رو که بگم بایت به بایت از LCD میخونه و ناتشو رو LCD مینویسه
      فکر نمیکنم کسی تا حالا مثل این فونت رو نوشته باشه معمولا برنامه های تجاری مثل این نیست نکته هایی که من توی این فونت در نظر گرفتم ایناست
      1 - اگر دقت بکنی من کل حروف رو با حالت های مختلفش و عداد فارسی در 77 حالت خلاصه کردم اکسر حروف در یک حالت خلاصه شده و طوری طراحی شده که به جای هر چهار حالت مورد استفاده قرار بگیره مثل حروف (ز ر ذ د و .....)
      2 - همه حروف بیشتر از 8X8 پیکسل نیستند چه از ارتفا و چه از طول
      3 - طول حروف کمه و جای کمی میگیره به راحتی میشه یه جمله 5 یا 6 کلمه ای رو در یک سطر نوشت

      این هم یه فیلم شرمنده فقط کمی هجمش بالاست

      http://www.4shared.com/video/hgwjffXh/New_-_MVI_0003.html

      یه چند تا عکس میزارم تا بهتر متوجه بشین













      تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
      به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

      دیدگاه


        #4
        پاسخ : روش طراحی فونت فارسی برای LCD KS108

        این تاپیک بسیار خوبی است که تشکیل دادید و جای تقدیر و تشکر دارد. فقط توضیحات شما در مرحله روش تشخیص بین 4 حالت یک فونت ناتمام ماند که دلیل آن احتمالا این است که کسی ادامه مطلب را پیگیری نکرده است. به همین دلیل شخصا این پست را منتشر کردم تا شما زحمت بکشید و توضیح خود را تکمیل کنید.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : روش طراحی فونت فارسی برای LCD KS108

          نوشته اصلی توسط طراح
          این تاپیک بسیار خوبی است که تشکیل دادید و جای تقدیر و تشکر دارد. فقط توضیحات شما در مرحله روش تشخیص بین 4 حالت یک فونت ناتمام ماند که دلیل آن احتمالا این است که کسی ادامه مطلب را پیگیری نکرده است. به همین دلیل شخصا این پست را منتشر کردم تا شما زحمت بکشید و توضیح خود را تکمیل کنید.
          سلام اقای کی نژاد شما همیشه به من لطف داشتین چشم ادامه میدم
          برای تشخیص حروف
          قبل از انتخاب نوع حرف ، حرف قبل رو چک میکنیم تا بدونم یکی از این (ا - آ - د - ذ - ر - ز - ژ - و - فاصله)حروف هست یا نه بعد قاصله چک میشه مصل این
          1 - اگر حرف قبل یکی از این نه حرف باشد به شرطی که حرف بعدی فاصله باشه از نوع چهارم یا اخر تنها هست
          2 - اگر حرف قبل یکی از این نه حرف باشد به شرطی که حرف بعدی فاصله نباشه از نوع اول یا اول چسبان هست
          3 - اگر حرف قبل یکی از این نه حرف نباشد به شرطی که حرف بعدی فاصله باشد از نوع سوم یا اخر چسبان هست
          4 - اگر حرف قبل یکی از این نه حرف نباشد به شرطی که حرف بعدی فاصله نباشد از نوع ذوم یا وسط هست
          یه چیزی مثل این البته من اینجا کاراکتر نال یا پایان زشته رو هم همزمان با فاصله چک کردم

          a

          str--;
          val = *str;
          str++;
          if(val==32 || val==199 || val==194 || val==207 || val==208 || val==209 || val==210 || val==142 || val==230)
          {
          str++;
          val = *str;
          str--;
          if(val==32 || val=='\0&#039
          data = 0;
          else
          data = 3;
          }
          else
          {
          str++;
          val = *str;
          str--;
          if(val==32 || val=='\0&#039
          data = 1;
          else
          data = 2;
          }


          این هم کد اسکی حروف فارسی
          ا = 199
          آ = 194
          ب = 200
          پ = 129
          ت = 202
          ث = 203
          ج = 204
          چ = 141
          ح = 205
          خ = 206
          د = 207
          ذ = 208
          ر = 209
          ز = 210
          ژ = 142
          س = 211
          ش = 212
          ص = 213
          ض = 214
          ط = 216
          ظ = 217
          ع = 218
          غ = 219
          ف = 221
          ق = 222
          ک = 223
          گ = 144
          ل = 225
          م = 227
          ن = 228
          و = 230
          ه = 229
          ی = 236
          البته بین اینها حروف مشترک با کدهای اسکی متفاوت و حروف دیگه ای مثل همزه و حرف ی زیر نقطه دار و حرکه ها و یه تعدارد مخلفات دیگه هم هست که چون نیازی بهشون نیست من ننوشتم و فقط به حروف اصلی بسنده کردم
          همونطوری که قبلا هم گفتم من این حروف رو جوری طراحی کردم که بیشترشون فقط یک یا دو حالت دارند مثلا کلا حالت اخر چسبان با حالت اخر تنها بجر حرف ه در دیگر حروف یکسان هست یا حالت اول چسبان با حالت وسط بجز حرف ه در دیگر حروف یکسان هستو ... که این خود حجم فلش رو خیلی کم میکنه
          تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
          به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

          دیدگاه


            #6
            پاسخ : روش طراحی فونت فارسی برای LCD KS108

            سلام

            لطفا این آموزش رو برای تابلوروان و طراحی فونت فارسی قرار دهید البته برای بیسیک

            ممنون

            دیدگاه


              #7
              پاسخ : روش طراحی فونت فارسی برای LCD KS108

              سلام

              اول تشکر از آموزش های بسیار خوبتون

              دوم یه سوال سوال داشتم

              من دلیل استفاده از آرایه ی F_FONT_MAP رو متوجه نمیشم ، میشه یکم توضیح بدید که کارش چیه؟

              ممنون

              دیدگاه


                #8
                پاسخ : روش طراحی فونت فارسی برای LCD KS108

                نوشته اصلی توسط ava123
                سلام

                لطفا این آموزش رو برای تابلوروان و طراحی فونت فارسی قرار دهید البته برای بیسیک

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

                دیدگاه


                  #9
                  پاسخ : روش طراحی فونت فارسی برای LCD KS108

                  نوشته اصلی توسط حامد مهری
                  سلام

                  اول تشکر از آموزش های بسیار خوبتون

                  دوم یه سوال سوال داشتم

                  من دلیل استفاده از آرایه ی F_FONT_MAP رو متوجه نمیشم ، میشه یکم توضیح بدید که کارش چیه؟

                  ممنون
                  با سلام
                  اول اینکه امضای قشنگی داری خوشم اومد از سلیقت
                  اما در مورد سوالت ببین دوست مو همونطوری که قبلا توضیح دادم هر حرف 4 حالت داره در صورتی که برای هر چهارتا حالتش فقط یه کد اسکی هست ودر هر چهار حالت مشترکه توی ارایه خود فونت ما نمیتونیم همه حروف رو با حالهای مختلفش قرار بدیم یعنی جا نمیشه شما 32 حرف داری با حرکه ها و چند تا شکلک و علامت 32X4 میشه 128 با 128 تای انگلیسی میشه 256 در صورتی که کد اسکی 8 بیته و 256 اخرشه ولی در واقع این ویندوز یا خود مصرف کننده فونت هست که تصمیم میگیره از کدوم حالت استفاده کنه
                  توی هر فونت 256 حرف اصلی داریم که همون کدهای اصلی هستند که 127 تای اول همشون انگلیسی یا همین کدهای اسکی استاندارده و فقط 127 تای بعدی میمونه حالتهای حروف هم کد داره ولی بیشتر از 256 هست اما اونها هم استاندارده یه نرم افزار فونت ادیتور مخصوص کامپیوتر نصب کن بهتر متوجه میشی
                  تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                  به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                  دیدگاه


                    #10
                    پاسخ : روش طراحی فونت فارسی برای LCD KS108

                    نوشته اصلی توسط POLESTAR
                    1 - اگر حرف قبل یکی از این نه حرف باشد به شرطی که حرف بعدی فاصله باشه از نوع چهارم یا اخر تنها هست
                    2 - اگر حرف قبل یکی از این نه حرف باشد به شرطی که حرف بعدی فاصله نباشه از نوع اول یا اول چسبان هست
                    3 - اگر حرف قبل یکی از این نه حرف نباشد به شرطی که حرف بعدی فاصله باشد از نوع سوم یا اخر چسبان هست
                    4 - اگر حرف قبل یکی از این نه حرف نباشد به شرطی که حرف بعدی فاصله نباشد از نوع ذوم یا وسط هست
                    با تشکر مجدد از شما، در موارد 4 گانه ای که ذکر کردید جای حرف اول از رشته خالی است که حرف ماقبل آن وجود ندارد و در همان گزینه های 1 و 2 گنجانده می شود. در روش نمایش فونت از طریق تایپ مستقیم فارسی در محیط برنامه، مشکلاتی هم وجود دارد که از جمله آن مسئله نمایش اعداد فارسی است که در ادیتورهای مختلف یا به درستی قابل نمایش نیست و یا در شرایط خاص و با قرار گرفتن بین دو حرف فارسی دیگر قابل نمایش است. یک مسئله دیگر در فونت های متغیر این است که در کاربردهایی که قرار است یک متن از پیش تعیین شده از flash در کنار اطلاعات متغیری از SRAM نمایش داده شود، مکان اطلاعات نمایش داده شده از SRAM به دلیل متغیر بودن طول فونت ها در یک آدرس مشخص نخواهد بود و بستگی به جمله فارسی دارد که در کنار آن قرار می گیرد. بنابراین برنامه نویس یا باید اطلاعات مورد نظر را در یک محل مستقل (و نه به دنبال کاراکترهای فارسی) نمایش دهد و یا برای هر عبارتی آدرس محل مورد نظر را حساب کند که با تغییر متن، آدرس این محل هم تغییر خواهد کرد. این روش البته با یک الگوریتم حساب شده قابل پیاده سازی هست، اما کار برنامه نویسی را با سختی ها و مشکلاتی مواجه می کند که ممکن است برای همه قابل درک و اجرا نباشد. منظور از این توضیحات این است که فونت های با طول ثابت هرچند از نظر زیبایی در مرتبه پائین تری نسبت به فونت های با طول متغیر قرار دارند، اما مزایای خاص خود را هم دارند که گاهی استفاده از آنها را توجیه پذیر می کند.
                    در رابطه با پاسخ به آقای مهری هم اگر در Start/All programs/Accessories/System Tools/Character map گزینه Character set را در وضعیت Windows:Arabic قرار دهید، در پائین صفحه در پرانتز، کدهای معادل همان اعدادی که در بالا آورده شده قابل مشاهده است.
                    ضمنا ویندوز دارای یک Font editor است که برای دسترسی به آن در Start/Run عبارت eudcedit.exe را تایپ و OK کنید تا اجرا شود و از طریق آن می توانید فونت های مختلف را تصحیح کنید.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #11
                      پاسخ : روش طراحی فونت فارسی برای LCD KS108

                      سلام

                      دوست من من با بیسیک زیاد کار نمی کنم ولی اگر مشکلی داشتی میتونی بپرسی
                      در مورد فونت برای تابلو روات باید بگم نیازی به فونت نداره شما بهتره با نرم افزار کامپیوترش دیتای متنتون رو تولید و به میکرو اتقال بدین فقط تابلو کار اسکن رو باید بکنه نه بیشتر
                      خوب منم مشکلم تولید کد برای هر فونت یا یک متن هستش ممنون میشم آموزش بدید

                      دیدگاه


                        #12
                        پاسخ : روش طراحی فونت فارسی برای LCD KS108

                        دوست عزیز سلام
                        توی انجمن اموزشهای بسیاری برای راه اندازی و اموزش فونت و همچنین نرم افزار تولید کد وجود داره اگه یه سرچی بکنین حتما" پیدا میکنین
                        موفق باشید
                        حضرت علی(ع):
                        أَشرَفُ الخَلاَئِقِ اَلوَفَا بِالعَهد.
                        شریفترین خصلتها وفاى به عهد است.

                        دیدگاه


                          #13
                          پاسخ : روش طراحی فونت فارسی برای LCD KS108

                          نوشته اصلی توسط POLESTAR
                          با سلام
                          اول اینکه امضای قشنگی داری خوشم اومد از سلیقت
                          اما در مورد سوالت ببین دوست مو همونطوری که قبلا توضیح دادم هر حرف 4 حالت داره در صورتی که برای هر چهارتا حالتش فقط یه کد اسکی هست ودر هر چهار حالت مشترکه توی ارایه خود فونت ما نمیتونیم همه حروف رو با حالهای مختلفش قرار بدیم یعنی جا نمیشه شما 32 حرف داری با حرکه ها و چند تا شکلک و علامت 32X4 میشه 128 با 128 تای انگلیسی میشه 256 در صورتی که کد اسکی 8 بیته و 256 اخرشه ولی در واقع این ویندوز یا خود مصرف کننده فونت هست که تصمیم میگیره از کدوم حالت استفاده کنه
                          توی هر فونت 256 حرف اصلی داریم که همون کدهای اصلی هستند که 127 تای اول همشون انگلیسی یا همین کدهای اسکی استاندارده و فقط 127 تای بعدی میمونه حالتهای حروف هم کد داره ولی بیشتر از 256 هست اما اونها هم استاندارده یه نرم افزار فونت ادیتور مخصوص کامپیوتر نصب کن بهتر متوجه میشی
                          تشکر از شما و آقای کی نژاد برای جوابتون

                          بله ، این رو میدونم که هر فونت 4 حالت داره ...

                          برای تابلو روانهایی که با استفاده از کیبورد کنترلر میشند هم ما همین کار رو میکنیم ، ولی همونطور که گفتم دلیل استفاده از متغییر Map و اعداد داخل اون و مورد استفادش رو متوجه نمیشم چیه! :redface:

                          میشه مثال بزنی که مثلا کد های مربوط به "مهدی" رو روی ال سی دی چاپ کنه؟ (فقط قسمت مربوط به برداشت کد ها)

                          ممنون از لطفت :nerd:

                          دیدگاه


                            #14
                            پاسخ : روش طراحی فونت فارسی برای LCD KS108

                            نوشته اصلی توسط طراح
                            با تشکر مجدد از شما، در موارد 4 گانه ای که ذکر کردید جای حرف اول از رشته خالی است که حرف ماقبل آن وجود ندارد و در همان گزینه های 1 و 2 گنجانده می شود. در روش نمایش فونت از طریق تایپ مستقیم فارسی در محیط برنامه، مشکلاتی هم وجود دارد که از جمله آن مسئله نمایش اعداد فارسی است که در ادیتورهای مختلف یا به درستی قابل نمایش نیست و یا در شرایط خاص و با قرار گرفتن بین دو حرف فارسی دیگر قابل نمایش است. یک مسئله دیگر در فونت های متغیر این است که در کاربردهایی که قرار است یک متن از پیش تعیین شده از flash در کنار اطلاعات متغیری از SRAM نمایش داده شود، مکان اطلاعات نمایش داده شده از SRAM به دلیل متغیر بودن طول فونت ها در یک آدرس مشخص نخواهد بود و بستگی به جمله فارسی دارد که در کنار آن قرار می گیرد. بنابراین برنامه نویس یا باید اطلاعات مورد نظر را در یک محل مستقل (و نه به دنبال کاراکترهای فارسی) نمایش دهد و یا برای هر عبارتی آدرس محل مورد نظر را حساب کند که با تغییر متن، آدرس این محل هم تغییر خواهد کرد. این روش البته با یک الگوریتم حساب شده قابل پیاده سازی هست، اما کار برنامه نویسی را با سختی ها و مشکلاتی مواجه می کند که ممکن است برای همه قابل درک و اجرا نباشد. منظور از این توضیحات این است که فونت های با طول ثابت هرچند از نظر زیبایی در مرتبه پائین تری نسبت به فونت های با طول متغیر قرار دارند، اما مزایای خاص خود را هم دارند که گاهی استفاده از آنها را توجیه پذیر می کند.
                            در رابطه با پاسخ به آقای مهری هم اگر در Start/All programs/Accessories/System Tools/Character map گزینه Character set را در وضعیت Windows:Arabic قرار دهید، در پائین صفحه در پرانتز، کدهای معادل همان اعدادی که در بالا آورده شده قابل مشاهده است.
                            ضمنا ویندوز دارای یک Font editor است که برای دسترسی به آن در Start/Run عبارت eudcedit.exe را تایپ و OK کنید تا اجرا شود و از طریق آن می توانید فونت های مختلف را تصحیح کنید.
                            اقای کینژاد در مورد توضیح خوبتون ممنون
                            ولی در جایی مثل یک برد الکترونیکی که مثلا چند تا ERROR یا تعدادی منو رو باید نشون بده همچین تدابیری نیاز نیست مگه میخواهیم نرم افزار ورد ماکروسافت رو طراحی کنیم :biggrin:
                            درسته که کار کار رو خیلی خوب میکنه ولی زمان پردازش رو خیلی میبره بالا در مورد طول متغیر هم باید بگم اینجا تعداد پیکسلهای LCD خیلی کمه وبرای قرار دادن یه جمله کامل واقعا کوچیکه پس این کار موجب خواناتر شدن و زیبایی بیشتر و توانایی نوشتن کلمات بیشتر رو به همران داره
                            در مورد این گونه فونتها دقت کردین وقتی با کد ویژن برنامه مینویسین چقدر برنامه دلنشین تر و خواناتره چون تنظیمات پیشفرضش روی همین حروف هست (با طول یکسان) من خودم به این نکته زیاد دقت میکنم مثلا متغییر ها رو جوری انتخواب میکنم که تعداد حروف برابر داشته باشن شاید توی برنامه هام هم اینو دیده باشین.
                            تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                            به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                            دیدگاه


                              #15
                              پاسخ : روش طراحی فونت فارسی برای LCD KS108

                              نوشته اصلی توسط حامد مهری
                              تشکر از شما و آقای کی نژاد برای جوابتون

                              بله ، این رو میدونم که هر فونت 4 حالت داره ...

                              برای تابلو روانهایی که با استفاده از کیبورد کنترلر میشند هم ما همین کار رو میکنیم ، ولی همونطور که گفتم دلیل استفاده از متغییر Map و اعداد داخل اون و مورد استفادش رو متوجه نمیشم چیه! :redface:

                              میشه مثال بزنی که مثلا کد های مربوط به "مهدی" رو روی ال سی دی چاپ کنه؟ (فقط قسمت مربوط به برداشت کد ها)

                              ممنون از لطفت :nerd:
                              من که یک بار توضیح دادم
                              هر حرف 4 حالت داره در صورتی که برای هر چهار تا حالتش فقط یک کد اسکی هست که در هر چهار حالت مشترک است
                              کد اسکی کلمه مهدی رو دقت بکن
                              م = 227 اول چسبان چون اول جمله است و حرف بعدی فاصله نیست
                              ه = 229 وسط چون حرف قبلی جزء اون 8 حرف نیست و حرف بعدی فاسله یا اخر جمله نیست
                              د = 207 وسط چون حرف قبلی جزء اون 8 حرف نیست و حرف بعدی فاسله یا اخر جمله نیست
                              ی = 236 اخر تنها چون حرف قبلی جزو اون 8 حرفه و اخر جمله است

                              بعد از تشخیص نوع اندیس دیتای حروف مورد نظر رو از ارایه MAP در میاریم ارایه مپ برپایه کدهای اسکی هست ولی ارایه خود فونت نه
                              همه این کارا برای اینه که حجم فلش زیاد اشغال نشه و جای کمتری بگیره
                              تجربه معلم خشنی هست اول امتحان میگیره بعد درس میده !!!
                              به دلیل برخی مشکلات بوجود اماده دیگه امکان ادامه فعالت در این انجمن مقدور نیست.

                              دیدگاه

                              لطفا صبر کنید...
                              X