اینجا میخوام یکی از کارهایی که براش واقعا زیاد وقت گذاشتم رو اموزش بدم و یه برنامه نمونه در دست رس دوستان بگزارم
امیدوارم همه بتونن ازش استفاده کنن
من فرض رو بر این میزارم که شما با سی و کدویژن و LCD KS108 اشنا هستین و نیازی به توضیح و اموزش ندارین.
یه توضیح مختصری در مورد فونت فارسی اینکه
هرکدوم از حروف فارسی چهار حالت داره
1- اول
2- وست
3- اخر چسبان
4- اخر تنها
مثل حرف ه ( ههه ه)
مثل حرف ی ( ییی ی) و ...
ممکنه بعضی از حروف یکی از این حالتها رو نداشته باشه ولی بیشتر از 4 تا نیست
بنابر این بجر خود فونت یه MAP یا یه جدول دیگه هم نیازه که نوع حرف رو تشخیص بدیم
اول خود فونت :
باید با یه نرم افزار فونت ساز یا تبدیل عکس به HEX مثل FAST LCD یه عکس از فونت طراحی بشه
این نرم افزار
FAST LCD
http://s1.picofile.com/file/6789884304/FastLCD.exe.html
این هم خود فایل فونتمون که فعلا به صورت یه عکسه
و بعد از تبدیل به صورت HEX میشه
من چون اینجا فقط میخوام در مورد فارسی توضیح بدم بنابر این قسمت فارسیشو جدا میکنم و بعد از کمی تغییر و ویرایش میشه این
حالا به یه MAP نیاز داریمکد: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 برای تشخیص نوع حرف و حالتش به کار میره
توی یونیکد حروف فارسی از 127 شروع میشه تا 255 پس یکی یکی شماره حروف رو در میاریم
و توی یه جدول 128X4 میزاریم
مثل این
حالا کل کار اینه که کد هگز یکی یکی حروف جملتون رو ضرب در چهار کنید و با عدد 127 جمع کنید حالت حرف رو تشخیص بدی (بفهمی کدوم یکی از اون چهارتاست) بعد با خوندن 8 بایت از جدول فونتمون با ابتدای عددی که از توی جدول MAP در اوردیم روی LCD نمایش بدیمکد: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 => ي };
توی پست بعد روش تشخیص حالتهای حروف رو هم یاد خواهم داد.