ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 8 از 8
  1. #1
    2007/11/30
    83
    0

    تغییر جهت نوشتن در LCD


    سلام دوستان

    دارم برای یه TFT LCD برنامه می نویسم این LCD بصورت پیش فرض ظاهرا Landscape رو ساپورت نمی کنه. حالا برای اینکه بتونم به این شکل داخلش رشته و کاراکتر بنویسم به نظر شما جدول فونت رو تغییر بدم و جهت کاراکترا رو تو فایل هگز فونت عوض کنم یا تابعی که PutChar انجام میده دستکاری کنم ؟ یا راه دیگه ای به ذهنتون میرسه ؟ ممنون میشم کمکم کنید.
  2. #2
    2010/02/28
    شاهرود
    1,147
    20

    پاسخ : تغییر جهت نوشتن در LCD

    نقل قول نوشته اصلی توسط rezaf
    سلام دوستان

    دارم برای یه TFT LCD برنامه می نویسم این LCD بصورت پیش فرض ظاهرا Landscape رو ساپورت نمی کنه. حالا برای اینکه بتونم به این شکل داخلش رشته و کاراکتر بنویسم به نظر شما جدول فونت رو تغییر بدم و جهت کاراکترا رو تو فایل هگز فونت عوض کنم یا تابعی که PutChar انجام میده دستکاری کنم ؟ یا راه دیگه ای به ذهنتون میرسه ؟ ممنون میشم کمکم کنید.
    چرا جواب نده؟
    من که راحت جواب میگرفتم
    یه باگی تو هدر بود که من اونو برطرف کردم و دوباره رو انجمن جای قبلیه پلود کردم
    یه هدر هم جدید نوشتم که اونم همه چی داره. فارسی - انگلیسی و ....
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
  3. #3
    2007/11/30
    83
    0

    پاسخ : تغییر جهت نوشتن در LCD

    آقای ایمانی فر قربونت پست که میذاری امیدوارتر میشم. این LCD مال یه گوشی قدیمیه نه ماژول N96 که ECA زده. یه تابع برای نوشتن کاراکتر براش پیدا کردم ولی نمیدونم با دستکاری تابع میشه Landscape نوشت یا باید فونت رو عکس کنم و الان که عکس کردم چجوری راحت تر نمایش بدم.
    کد:
    void LCDPutChar(char c, int x, int y, int size, int fColor, int bColor) 
    {
    	extern const unsigned char FONT6x8[97][8];
    	extern const unsigned char FONT8x8[97][8];
    	extern const unsigned char FONT8x16[97][16];
    	int i,j;
    	unsigned int nCols;
    	unsigned int nRows;
    	unsigned int nBytes;
    	unsigned char PixelRow;
    	unsigned char Mask;
    	unsigned int Word0;
    	unsigned int Word1;
    	unsigned char *pFont;
    	unsigned char *pChar;
    	unsigned char *FontTable[] = {(unsigned char *)FONT6x8,
    	(unsigned char *)FONT8x8,
    	(unsigned char *)FONT8x16};
    	
    	// get pointer to the beginning of the selected font table
    	pFont = (unsigned char *)FontTable[size];
    	
    	// get the nColumns, nRows and nBytes
    	nRows = *pFont;
    	nCols = *(pFont + 1);
    	nBytes = *(pFont + 2);
    	
    	// get pointer to the last byte of the desired character
    	pChar = pFont + (nBytes * (c - 0x1F)) + nBytes - 1;
    	
    	// Row address set (command 0x2B)
    	WriteSpiCommand(PASET);
    	WriteSpiData(x);
    	WriteSpiData(x + nRows - 1);
    	
    	// Column address set (command 0x2A)
    	WriteSpiCommand(CASET);
    	WriteSpiData(y);
    	WriteSpiData(y + nCols - 1);
    	
    	// WRITE MEMORY
    	WriteSpiCommand(RAMWR);
    	
    	// loop on each row, working backwards from the bottom to the top
    	for (i = nRows - 1; i >= 0; i--) {
    		
    	// copy pixel row from font table and then decrement row
    	PixelRow = *pChar--;
    		
    	// loop on each pixel in the row (left to right)
    	// Note: we do two pixels each loop
    	Mask = 0x80;
    	for (j = 0; j < nCols; j += 2) {
    		
    	// if pixel bit set, use foreground color; else use the background color
    	// now get the pixel color for two successive pixels
    	if ((PixelRow & Mask) == 0)
    	Word0 = bColor;
    	else
    	Word0 = fColor;
    	Mask = Mask >> 1;
    	if ((PixelRow & Mask) == 0)
    	Word1 = bColor;
    	else
    	Word1 = fColor;
    	Mask = Mask >> 1;
    	
    	// use this information to output three data bytes
    	WriteSpiData((Word0 >> 4) & 0xFF);
    	WriteSpiData(((Word0 & 0xF) << 4) | ((Word1 >> 8) & 0xF));
    	WriteSpiData(Word1 & 0xFF);
    	}
    	}
    	// terminate the Write Memory command
    	WriteSpiCommand(NOP);
    }
    راستی این LCD با SPI کار می کنه و الان راه اندازی اولیه شده ولی این مشکل رودارم یه مشکل دیگمم اینه که کاراکترا رو میرور شده می نویسه.
  4. #4
    2010/02/28
    شاهرود
    1,147
    20

    پاسخ : تغییر جهت نوشتن در LCD

    خواهش میکنم
    ببین
    یه جا تو برنامت اومده گفته
    کد:
    // Row address set (command 0x2B)
    	WriteSpiCommand(PASET);
    	WriteSpiData(x);
    	WriteSpiData(x + nRows - 1);
    	
    	// Column address set (command 0x2A)
    	WriteSpiCommand(CASET);
    	WriteSpiData(y);
    	WriteSpiData(y + nCols - 1);
    اگه میخای landscape کنی باید جای سطر رو ستون رو عوض کنی
    اگه میگی میرور نمایش میده خب شما هم میرورش کن تا بشه حالت عادی.
    به عنوان مثال توی حالت portrait شما بیا مختصاتی رو که برای ردیفت میزاره رو از عرض lcd کم کن.
    مثلا اگه عرضش 240 هست شما بزن x1 = 240 - x
    البته ممکنه اینجوری میرور نشه و مجبور شی تو تنظیمات اولیه جهت رفرش شدن میکرو رو تغییر بدی
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!
  5. #5
    2007/11/30
    83
    0

    پاسخ : تغییر جهت نوشتن در LCD

    ممنون جناب ایمانی فر.
    با 3تا کار این 2تا مشکل رو حل کردم. اول اینکه با یه کامند کنترلی که مال کنترلر LCD بود مشکل میرور رو حل کردم . نوشتن بصورت Landscape رو هم با 2تا کار انجام دادم اول کدهای هگز فایل فونت رو دستکاری کردم و کاراکترها رو چرخوندم به اندازه 90 درجه به چپ. کار دومم هم این بود که تو تابعی که رشته رو چاپ می کرد بجای اینکه y رو زیاد کنه و کاراکتر بعدی رو بنویسه گفتم x رو زیاد کنه در نتیجه شروع کرد عمودی نوشتن شکل کاراکترا رو هم که چرخونده بودم در نتیجه مشکل حل شد. اینا رو گفتم شاید بدرد دوستانم بخوره :wow: :nerd: :applause: :job:
  6. #6
    2007/11/30
    83
    0

    پاسخ : تغییر جهت نوشتن در LCD

    راستی بد نیست سر فرصت چیزایی که درمورد فایل فونت و جدول کاراکترا که به هگز هست و یه سری ماتریس ثابت داره فهمیدم براتون توضیح بدم آخه تو اینترنت جایی پیدا نکردم بصورت جامع گفته باشه این کدای هگز چه معنی ای میدن و چجوری میشه شکل کاراکترا رو عوض کرد بنابراین حالا که فهمیدم سر فرصت میگم براتون چون فکر کنم سوال بقیه دوستانم باشه. نظرتون چیه ؟
  7. #7
    2007/11/30
    83
    0

    پاسخ : تغییر جهت نوشتن در LCD

    خوب حالا که فرصت کردم الوعده وفا. ببینید فایلی که فونت مورد استفاده شما توی اون تعریف میشه (کاراکتر به کاراکتر) یه چیزی مثل اینه :
    کد:
    const unsigned char FONT_6x8[97][8] = {
    	{0x06,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
    	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
    	{0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00}, // !
    	{0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00}, // "
    	{0x50,0x50,0xF8,0x50,0xF8,0x50,0x50,0x00}, // #
    	{0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00}, // $
    	{0xC0,0xC8,0x10,0x20,0x40,0x98,0x18,0x00}, // %
    	{0x40,0xA0,0xA0,0x40,0xA8,0x90,0x68,0x00}, // &
    	{0x30,0x30,0x20,0x40,0x00,0x00,0x00,0x00}, // '
    	{0x10,0x20,0x40,0x40,0x40,0x20,0x10,0x00}, // (
    	{0x40,0x20,0x10,0x10,0x10,0x20,0x40,0x00}, // )
    	{0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00}, // *
    	{0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00}, // +
    	{0x00,0x00,0x00,0x00,0x30,0x30,0x20,0x40}, // ,
    	{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00}, // -
    	{0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00}, // .
    	{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00}, // / (forward slash)
    	{0x70,0x88,0x88,0xA8,0x88,0x88,0x70,0x00}, // 0 0x30
    	{0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00}, // 1
    	{0x70,0x88,0x08,0x70,0x80,0x80,0xF8,0x00}, // 2
    	{0xF8,0x08,0x10,0x30,0x08,0x88,0x70,0x00}, // 3
    	{0x10,0x30,0x50,0x90,0xF8,0x10,0x10,0x00}, // 4
    	{0xF8,0x80,0xF0,0x08,0x08,0x88,0x70,0x00}, // 5
    	{0x38,0x40,0x80,0xF0,0x88,0x88,0x70,0x00}, // 6
    	{0xF8,0x08,0x08,0x10,0x20,0x40,0x80,0x00}, // 7
    	{0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00}, // 8
    	{0x70,0x88,0x88,0x78,0x08,0x10,0xE0,0x00}, // 9
    	{0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00}, // :
    	{0x00,0x00,0x20,0x00,0x20,0x20,0x40,0x00}, // ;
    	{0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00}, // <
    	{0x00,0x00,0xF8,0x00,0xF8,0x00,0x00,0x00}, // =
    	{0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00}, // >
    	{0x70,0x88,0x08,0x30,0x20,0x00,0x20,0x00}, // ?
    	{0x70,0x88,0xA8,0xB8,0xB0,0x80,0x78,0x00}, // @ 0x40
    	{0x20,0x50,0x88,0x88,0xF8,0x88,0x88,0x00}, // A
    	{0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x00}, // B
    	{0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00}, // C
    	{0xF0,0x88,0x88,0x88,0x88,0x88,0xF0,0x00}, // D
    	{0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00}, // E
    	{0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00}, // F
    	{0x78,0x88,0x80,0x80,0x98,0x88,0x78,0x00}, // G
    	{0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00}, // H
    	{0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00}, // I
    	{0x38,0x10,0x10,0x10,0x10,0x90,0x60,0x00}, // J
    	{0x88,0x90,0xA0,0xC0,0xA0,0x90,0x88,0x00}, // K
    	{0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x00}, // L
    	{0x88,0xD8,0xA8,0xA8,0xA8,0x88,0x88,0x00}, // M
    	{0x88,0x88,0xC8,0xA8,0x98,0x88,0x88,0x00}, // N
    	{0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00}, // O
    	{0xF0,0x88,0x88,0xF0,0x80,0x80,0x80,0x00}, // P 0x50
    	{0x70,0x88,0x88,0x88,0xA8,0x90,0x68,0x00}, // Q
    	{0xF0,0x88,0x88,0xF0,0xA0,0x90,0x88,0x00}, // R
    	{0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00}, // S
    	{0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x00}, // T
    	{0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00}, // U
    	{0x88,0x88,0x88,0x88,0x88,0x50,0x20,0x00}, // V
    	{0x88,0x88,0x88,0xA8,0xA8,0xA8,0x50,0x00}, // W
    	{0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00}, // X
    	{0x88,0x88,0x50,0x20,0x20,0x20,0x20,0x00}, // Y
    	{0xF8,0x08,0x10,0x70,0x40,0x80,0xF8,0x00}, // Z
    	{0x78,0x40,0x40,0x40,0x40,0x40,0x78,0x00}, // [
    	{0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00}, // \ (back slash)
    	{0x78,0x08,0x08,0x08,0x08,0x08,0x78,0x00}, // ]
    	{0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00}, // ^
    	{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00}, // _
    	{0x60,0x60,0x20,0x10,0x00,0x00,0x00,0x00}, // ` 0x60
    	{0x00,0x00,0x60,0x10,0x70,0x90,0x78,0x00}, // a
    	{0x80,0x80,0xB0,0xC8,0x88,0xC8,0xB0,0x00}, // b
    	{0x00,0x00,0x70,0x88,0x80,0x88,0x70,0x00}, // c
    	{0x08,0x08,0x68,0x98,0x88,0x98,0x68,0x00}, // d
    	{0x00,0x00,0x70,0x88,0xF8,0x80,0x70,0x00}, // e
    	{0x10,0x28,0x20,0x70,0x20,0x20,0x20,0x00}, // f
    	{0x00,0x00,0x70,0x98,0x98,0x68,0x08,0x70}, // g
    	{0x80,0x80,0xB0,0xC8,0x88,0x88,0x88,0x00}, // h
    	{0x20,0x00,0x60,0x20,0x20,0x20,0x70,0x00}, // i
    	{0x10,0x00,0x10,0x10,0x10,0x90,0x60,0x00}, // j
    	{0x80,0x80,0x90,0xA0,0xC0,0xA0,0x90,0x00}, // k
    	{0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00}, // l
    	{0x00,0x00,0xD0,0xA8,0xA8,0xA8,0xA8,0x00}, // m
    	{0x00,0x00,0xB0,0xC8,0x88,0x88,0x88,0x00}, // n
    	{0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00}, // o
    	{0x00,0x00,0xB0,0xC8,0xC8,0xB0,0x80,0x80}, // p 0x70
    	{0x00,0x00,0x68,0x98,0x98,0x68,0x08,0x08}, // q
    	{0x00,0x00,0xB0,0xC8,0x80,0x80,0x80,0x00}, // r
    	{0x00,0x00,0x78,0x80,0x70,0x08,0xF0,0x00}, // s
    	{0x20,0x20,0xF8,0x20,0x20,0x28,0x10,0x00}, // t
    	{0x00,0x00,0x88,0x88,0x88,0x98,0x68,0x00}, // u
    	{0x00,0x00,0x88,0x88,0x88,0x50,0x20,0x00}, // v
    	{0x00,0x00,0x88,0x88,0xA8,0xA8,0x50,0x00}, // w
    	{0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00}, // x
    	{0x00,0x00,0x88,0x88,0x78,0x08,0x88,0x70}, // y
    	{0x00,0x00,0xF8,0x10,0x20,0x40,0xF8,0x00}, // z
    	{0x10,0x20,0x20,0x40,0x20,0x20,0x10,0x00}, // {
    	{0x20,0x20,0x20,0x00,0x20,0x20,0x20,0x00}, // |
    	{0x40,0x20,0x20,0x10,0x20,0x20,0x40,0x00}, // }
    	{0x40,0xA8,0x10,0x00,0x00,0x00,0x00,0x00}, // ~
    	{0x70,0xD8,0xD8,0x70,0x00,0x00,0x00,0x00} // DEL
    };
    البته اول این رو بگم چیزایی که توضیح میدم تجربی متوجه شدم اگر ایرادی دیدین بگین که کسی اشتباه متوجه نشه. تو خط اول آرایه مربوطه رو تعریف کرده و گفته که این آرایه 97تا سطر داره و 8تا ستون. 97 تعداد کاراکترامونم هست و 8 هم تعداد بایت هر کاراکتر. پس 97تا کاراکتر داریم که هر کدوم 8 بایت اطلاعات دارند. تو خط دوم تعداد سطر و ستون و تعداد بایت هر کاراکتر رو میگه که 0x06 و 0x08 یعنی هر کاراکتر 6 در 8 هستش و 0x08 بعدش هم یعنی هر کاراکتر 8 بایت اطلاعات داره.
    حالا یکی از کاراکترها رو بررسی می کنیم ببینیم چجوری 8تا ردیف و 6تا ستون داره و 8بایت اطلاعات مال چی هستش:
    اولا هر بایت مربوط به یک سطر از کاراکتر هست پس حالا که هر کاراکتر 8تا ردیف داره باید 8بایت اطلاعات برای تعریف شکلش داشته باشه. کنترلر این LCD میاد و سطر به سطر دات ها را پر می کنه بنابراین کافیه بهش بگیم دات های هر سطر رو چجوری روشن یا خاموش کنه (کدوم روشن باشه کدوم خاموش) . به عکس زیر توجه کنید :

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت





    البته این نرم افزار برای طراحی کاراکتر 8 در 8 هست و من برای نشون دادن اینکه هر بایت چجوری یک سطر رو میسازه ازش کمک گرفتم. کاراکتر S رو که طراحی شده ببینید، کنار هر سطر یک
  8. #8
    2007/11/30
    83
    0

    پاسخ : تغییر جهت نوشتن در LCD

    ببخشید تو پست قبلی جا نشد اومدم پست دیگه. داشتم می گفتم، کنار هر سطر یک عدد دسیمال و معادل هگزش رو نوشته، این همون بایت اطلاعاتی هست که برای هر سطر یک کاراکتر باید تو تعریفش برای ماتریس (داخل فایل هگز فونتتون) بنویسید. این عدد دقیقا به LCD میگه که کدوم دات ها رو خاموش نگهداره و کدوم رو روشن کنه و در نهایت کاراکتر ما رو بسازه دقیقا مثل عکسی که گذاشتم. کدی که شما می نویسید میاد بایت به بایت اطلاعات سطرهای کاراکتر مورد نظر رو برای کنترلر LCD میفرسته و کنترلر داخل رم ذخیره میکنه در نهایت کاراکتر روی صفحه چاپ می کنه.
    حالا که متوجه شدید روند کار چجوریه می تونید خودتون هرجور فونت و کاراکتر و هر شکلی با هر ابعادی خواستید طراحی کنید.

    سعی کردم راحت و روان بگم. امیدوارم این مطالب مفید واقع بشه. :smile: :nerd: :read:
نمایش نتایج: از 1 به 8 از 8

موضوعات مشابه

  1. پاسخ: 7
    آخرين نوشته: 2016/02/05, 19:23
  2. چرا تغییر فرکانس باعث تغییر سایز ترانس میشود ؟
    توسط mehran901 در انجمن منابع تغذيه
    پاسخ: 3
    آخرين نوشته: 2015/06/17, 09:53
  3. ایا با تغییر فرکانس در ای سی sg3525 ولتاژ خروجی تغییر میکند؟
    توسط elect2 در انجمن مفاهیم پایه برق و الکترونیک
    پاسخ: 1
    آخرين نوشته: 2014/10/16, 02:37
  4. تغییر ولتاژ منبع با تغییر فرکانس
    توسط sima.b در انجمن مفاهیم پایه برق و الکترونیک
    پاسخ: 3
    آخرين نوشته: 2014/05/21, 19:59
  5. تغییر در شماتیک و تغییر همزمان در pcb
    توسط masoud58 در انجمن نرم افزار Proteus
    پاسخ: 4
    آخرين نوشته: 2013/02/07, 15:26

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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