PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راه اندازي درايور ssd1963 و السيدي 4.3 اينچ با stm32f103rbt6



صفحه ها : 1 [2]

nimra
17-08-2013, 18:42
این دوتا تابع مربوط به اینیت کردن 24 بیت دیتای ورودی و 24 بیت دیتای ال سی دی یعنی شما دیتا هارو 24 بیتی روی اس اس دی میریزید و ال سی دی هم 24 بیتی به اس اس دی وصل شده مشکلت فکر کنم از تنظیم این دوتا هستش با این تابع من مقایسش کن متوجه میشید

//================================================== ===========================
void ssd1963_init (void)
{
ssd1963_ctrlport->brr = ssd1963_pin_rst;
delay_ms(10);
ssd1963_ctrlport->bsrr = ssd1963_pin_rst;
delay_ms(10);

// refclk = crystal = 10mhz
ssd1963_writecommand(ssd1963_set_pll_mn);
ssd1963_writedata(0x1d); // pllclk = refclk * 30 (300mhz)
ssd1963_writedata(0x02); // sysclk = pllclk / 3 (100mhz)
ssd1963_writedata(0x54); // dummy

ssd1963_writecommand(ssd1963_set_pll);
ssd1963_writedata(0x03);
delay_ms(10);

ssd1963_writecommand(ssd1963_soft_reset); // soft reset
delay_ms(10);
//set lshift freq, i.e. The dclk with pll freq 120mhz set previously
//typical dclk for ty430tft480272 is 9mhz
//9mhz = 100mhz*(lcdc_fpr+1)/2^20
//lcdc_fpr = 94370 (0x170a2)
ssd1963_writecommand(ssd1963_set_lshift_freq);
ssd1963_writedata(0x01);
ssd1963_writedata(0x70);
ssd1963_writedata(0xa2);

//set panel mode, varies from individual manufacturer
ssd1963_writecommand(ssd1963_set_lcd_mode);
ssd1963_writedata(0x0c);//24-bit //(0x0c); //18-bit
ssd1963_writedata(0x00);
ssd1963_writedata((tft_width-1)>>8);
ssd1963_writedata((tft_width-1) & 0xff);
ssd1963_writedata((tft_height-1)>>8);
ssd1963_writedata((tft_height-1) & 0xff);
ssd1963_writedata(0x00);

//set horizontal period
ssd1963_writecommand(ssd1963_set_hori_period);
ssd1963_writedata((tft_hsync_period-1)>>8);
ssd1963_writedata((tft_hsync_period-1) & 0xff);
ssd1963_writedata((tft_hsync_pulse + tft_hsync_back_porch-1)>>8);
ssd1963_writedata((tft_hsync_pulse + tft_hsync_back_porch-1)&0xff);
ssd1963_writedata(tft_hsync_pulse-1);
ssd1963_writedata(0x00);
ssd1963_writedata(0x00);
ssd1963_writedata(0x00);

//set vertical period
ssd1963_writecommand(ssd1963_set_vert_period);
ssd1963_writedata((tft_vsync_period-1)>>8);
ssd1963_writedata((tft_vsync_period-1) & 0xff);
ssd1963_writedata((tft_vsync_pulse + tft_vsync_back_porch-1)>>8);
ssd1963_writedata((tft_vsync_pulse + tft_vsync_back_porch-1) & 0xff);
ssd1963_writedata(tft_vsync_pulse-1);
ssd1963_writedata(0x00);
ssd1963_writedata(0x00);

//set pixel data interface
ssd1963_writecommand(ssd1963_set_pixel_data_interf ace);
ssd1963_writedata(ssd1963_pdi_16bit565);

// set address mode
ssd1963_writecommand(ssd1963_set_address_mode);
ssd1963_writedata(0x0000);

// gpio0,1,2,3 is output
ssd1963_writecommand(ssd1963_set_gpio_conf);
ssd1963_writedata(0x0f);
ssd1963_writedata(0x01);

// set gpio0 , 1 , 2, 3 = 1
ssd1963_writecommand(ssd1963_set_gpio_value);
ssd1963_writedata(0x0f);

ssd1963_clearscreen(0xffffff); // black screen
delay_ms(10);

//set display on
ssd1963_writecommand(ssd1963_set_display_on);

// exit sleep mode
ssd1963_writecommand(ssd1963_exit_sleep_mode);
}

void set_backlight (unsigned char light)
{
// setting pwm for led backlight
ssd1963_writecommand(ssd1963_set_pwm_conf);
ssd1963_writedata(0x000e);
ssd1963_writedata(light); // set 0xff for full and 0x00 for off
ssd1963_writedata(0x0001); // ser 0x0009 for dbc controller
ssd1963_writedata(0x00ff);
ssd1963_writedata(0x0000);
ssd1963_writedata(0x0000);

}
ممنون جناب رحیمی
بله دقیقا مشکل همینجاس
ال سی دی 24 بیته و من رو حساب یک شماتیکی که از قبل داشتم با 18 بیت اینترفیس کردم و دو بیت پر ارزش هر رنگ رو گراند کردم که به شدت کیفیت تصویر رو تیره کرده
وقتی دو بیت پر ارزش رو High کنم تصویر روشن میشه و دیگه تیره نیست
دوستان دقت کنن که اشتباه من رو نکنن و ال سی دی 24 بیتی رو 18 بیت راه نندازن
تقریبا مشکلم حل شده ولی این ال سی 4.3 اینچی که از فروشگاه 1.5 سال پیش خریدم رنگ قرمزش واقعا قرمز نیست و بین صورتی و قرمزه
شما هم مشکل مشابه داشتین یا با این 4.3 اینچا کار نکردین؟
تا اونجایی که یادمه شما 7 اینج رو راه انداخته بودین

abouzar
31-08-2013, 16:47
من یک پروژه اماده با السی دی 7 اینچ و تاچ میخواستم که بتونم چندتا منو توش نشون بدم
اگه کسی این پروژه را اماده داره پ .خ کنه
تشکر

smpa
11-09-2013, 13:13
سلام ممنون از زحماتتون:hi:
من ميخوام اين ال سي دي رو با ssd1963 وavr راه اندازي كنم كسي كدشونو داره ؟
اگه بزاريد ممنون ميشمaa)
آيا كد ssd1963 تغييري ميكنه اگه نه اون كد رو كه براي همه كار مي كنه بزاريد لطف مي كنيد:(

spring110.sh
11-09-2013, 16:41
سلام . هدر پیش فرض خود کیل برای ال سی دی که با دستور

#include <lcd.h>
فراخوان می شه ، چیه ؟ و چه دستوراتی داره؟!

sadmonew
11-09-2013, 19:46
سلام . هدر پیش فرض خود کیل برای ال سی دی که با دستور

#include <lcd.h>فراخوان می شه ، چیه ؟ و چه دستوراتی داره؟!
سلام دوست عزيز
خوب اين هدر براي راه ندازي كدوم نوع از lcd استفاده شده؟
كاراكتري ؟ يا گرافيكي ؟ يا ... ؟
و اينكه كدوم درايور lcd رو راه اندازي كرده؟ ili9325 يا ili9320 يا ... ؟
اين مثالو از كدوم قسمت پيدا كردين؟

spring110.sh
11-09-2013, 21:43
سلام دوست عزيز
خوب اين هدر براي راه ندازي كدوم نوع از lcd استفاده شده؟
كاراكتري ؟ يا گرافيكي ؟ يا ... ؟
و اينكه كدوم درايور lcd رو راه اندازي كرده؟ ili9325 يا ili9320 يا ... ؟
اين مثالو از كدوم قسمت پيدا كردين؟


راستش من فقط تو بعضی مثالا دیدم این دستور استفاده می شه . تا الان از هدر هایی که تو دستان زحمت کشیدن استفاده می کردم ، اما می خواستم ببینم سرچشمه آبش چه شکلیه !!

taktrashe
26-09-2013, 00:52
سلام دوستان خسته نباسید!
کسی از خود بورد درایور 7 اینج (که فروشگاه ارایه میکنه ) استفاده کرده و در مد 16 بکارگرفته؟

sadmonew
26-09-2013, 10:59
سلام دوستان خسته نباسید!
کسی از خود بورد درایور 7 اینج (که فروشگاه ارایه میکنه ) استفاده کرده و در مد 16 بکارگرفته؟
سلام مهندس
اينو (You can see links before reply) نگاه كن.

haya6120
08-10-2013, 00:24
سلام مهندس رحیمی
من میخواستم lcd7"و ssd رو با xmega128 راه اندازی کنم
میخواستم اگه فرصت شو دارید با کمک هم اینکارو انجام بدیم و مطالب رو هم در همینجا برای آموزش قرار بدیم
اینطوری این مدار با avr هم راه اندازی میشه
نظر شما چیست؟
باقی دوستان اگه تمایل به همکاری دارن اعلام آمادگی کنند

kamikazi
08-10-2013, 09:25
سلام اصلا هیچ فرقی نداره با چه میکرویی راش بندازید توابع ارسال کامند و ارسال دیتا استاندارده و تابع اینیت هم که مشخصه پس عملا شما با راهندازی دستورات ارسال کامند و دیتا کارتون راه میافته کار سختیم نیست

haya6120
08-10-2013, 11:01
مرسی از توجهتون
پس من شروع میکنم اگه به مشکلی برخوردم
از راهنمایی شما استفاده می کنم

kamikazi
08-10-2013, 11:56
اره مهندس چیز خاصی نیست ایم مشکلات قبلا حل شده شما شروع کن به مشکل خوردین مطرح کنید

MMBMMB20
09-10-2013, 13:14
مهندس بیشتر رنگها رو نشون نمیده؟ چه کار باید کرد؟؟؟؟
توی این پروژه :

(35) Mini_ touch screen test (7-inch)
یکی از نمونه برنامه های داخل CD MINI STM32 هستش!
بیشتر رنگها رو نشون نمیده؟ چه کار باید کرد؟؟
پشتیبان IRANMICRO الو الو؟؟؟
کمک میکنید؟

sadmonew
09-10-2013, 17:11
مهندس بیشتر رنگها رو نشون نمیده؟ چه کار باید کرد؟؟؟؟
توی این پروژه :

(35) mini_ touch screen test (7-inch)
یکی از نمونه برنامه های داخل cd mini stm32 هستش!
بیشتر رنگها رو نشون نمیده؟ ....

سلام
مهندس اشتباه نميكني!
آخه همين مثالو ازش استفاده كردم و عكسو با كيفيت خيلي عالي نشون ميده!

MMBMMB20
11-10-2013, 14:17
عکس رو از روی sd card نمایش میده؟؟؟

sadmonew
12-10-2013, 10:32
عکس رو از روی sd card نمایش میده؟؟؟
بله درسته از رو sd عكسو ميخونه و نمايش ميده.

MMBMMB20
12-10-2013, 13:11
مهندس رنگ هارو توی دستور ها نشن نمیده!
مثلا توی همین دستور های زیر

LCD_Clear(LGRAY);
LCD_Clear(WHITE);
LCD_Clear(GRAY);
LCD_Clear(WHITE);
LCD_Clear(BRRED);
LCD_Clear(WHITE);
LCD_Clear(BROWN);
LCD_Clear(WHITE);
LCD_Clear(CYAN);
LCD_Clear(WHITE);
LCD_Clear(MAGENTA);
LCD_Clear(WHITE);
LCD_Clear(BLACK);
LCD_Clear(YELLOW);

فقط رنگ های آبی پرنگ و آبی آسمانی و سبز و سفید و سیاه نمایش میده!!
نه زردی نه قهوه ای و نه بقیه؟!!!
ایراد از کجاست؟
روی این پروژه توی این آدرس توی CD شرکت
F:\Example\MIN stm32 tft 5 inch\5TFT__16BIT\project\RVMDK\5LCD_¦¦++.uvproj
رنگ ها رو عالی نشون میده!
ولی توی
(35) Mini_ touch screen test (7-inch)
این پروزه نمایش رنگ مشکل داره این از چیه؟؟؟

MMBMMB20
15-10-2013, 15:07
دوستان رنگ ها در این پروژه
(35) Mini_ touch screen test (7-inch)
داخل CD شرکت
درست شد
این مهندسی معکوس چی کا را که نمی کنه!!!!

behnam6500
17-10-2013, 11:45
در شماتیکی که برای cat4139 بسته میشه بعد از دیود شاتکی یه خازن 1 میکروفاراد اومده. این خازن رو میتونم 1میکرو فاراد smd 0805 بزارم یا باید مثلن از تانتالیوم 1 میکرو 35 ولت استفاده کنم؟

تو یه شماتیک براش 35 ولت زده تو یکی دیگه ولتاژی نزده... چه خازنی بزارم براش؟
ممنونم

sadmonew
17-10-2013, 11:58
در شماتیکی که برای cat4139 بسته میشه بعد از دیود شاتکی یه خازن 1 میکروفاراد اومده. این خازن رو میتونم 1میکرو فاراد smd 0805 بزارم یا باید مثلن از تانتالیوم 1 میکرو 35 ولت استفاده کنم؟

تو یه شماتیک براش 35 ولت زده تو یکی دیگه ولتاژی نزده... چه خازنی بزارم براش؟
ممنونم
سلام مهندس
بله ميتوني از خازن 1میکرو فاراد (smd- 0805) استفاده كني.

behnam6500
17-10-2013, 12:07
سلام مهندس
بله ميتوني از خازن 1میکرو فاراد (smd- 0805) استفاده كني.

مرسی مهندس جان...

پس ولتاژی که توی اون شماتیک براش اومده مهم نیست؟ استفاده از 0805 بدون قطب با تانتالیوم قطب دار فرقی نداره رفیق؟

sadmonew
17-10-2013, 18:24
...استفاده از 0805 بدون قطب ...
:hi:
بله مهندس ميشه استفاده كرد.

ziaeenaser
19-10-2013, 08:47
سلام
من وقتی با lcd کار میکنم بعضی وقتها وسط اجرای برنامه صفحه سفید میشه و دیگه چیزی روی صفحه دیده نمیشه
میخواستم ببینم شما هم به چنین مشکلی بر خوردین و علت چیه؟
با تشکر

sadmonew
19-10-2013, 10:22
سلام
من وقتی با lcd کار میکنم بعضی وقتها وسط اجرای برنامه صفحه سفید میشه و دیگه چیزی روی صفحه دیده نمیشه
میخواستم ببینم شما هم به چنین مشکلی بر خوردین و علت چیه؟
با تشکر
سلام
1- از چه برد درايوري براي راه اندازي السيدي استفاده ميكنيد؟
2- منبع تغذيه مدارتون چه ولتاژي داره؟ و چند آمپره؟

ziaeenaser
19-10-2013, 10:33
سلام
از درایور 4.3 اینچ استفاده میکنم
منبع 5 ولت رو از پین های مثبت و منفی 5 ولت که روی برد stm32 هست وارد مدار میکنم
مشکلم اینه که در موقع کار کردن با السیدی خصوصا وقتی تاچ رو لمس میکنم صفحه السیدی سفید میشه
البته میکرو ریست نمیشه و به برنامه ادامه میده ولی روی السیدی دیگه چیزی نشون داده نمیشه
منبعم هم پنج ولت سه آمپره
البته السیدیم 5 اینچه که فکر میکنم با 4.3 اینچ هیچ فرقی نداره
با تشکر

MMBMMB20
20-10-2013, 19:53
دوستان کمک کنید؟؟؟
برای خاموش کردن lcd
زا چه دستور هایی باید استفاده کرد ؟؟
من میخام BACKLight هم خاموش بشه؟؟
حالت ایتندبای مونیتور؟؟؟
روی درایور 40 پین فروشگاه 2تا جامپر هستش کدومش رو فعال کنم؟؟؟
J2 <<=== SSD-PWM
J1 <<=== MCU-PWM
????

اساتید این بکلایت السیدی رو با stm32 چطور میشه خاموش کرد؟؟

behnam6500
21-10-2013, 23:58
کل جمهوری رو زیر و رو کردم cat4139 پیدا نشد!

kamikazi
23-10-2013, 12:07
سلام مهندس میتونید از همین mp3202 استفاده کنید که داخل فروشگاه هستش خیلی صنعتی تر و از نظر قیمت مناسبتر هستش

MMBMMB20
28-10-2013, 11:25
دوستان کمک کنید؟؟؟
برای خاموش کردن lcd
زا چه دستور هایی باید استفاده کرد ؟؟
من میخام BACKLight هم خاموش بشه؟؟
حالت ایتندبای مونیتور؟؟؟
روی درایور 40 پین فروشگاه 2تا جامپر هستش کدومش رو فعال کنم؟؟؟
J2 <<=== SSD-PWM
J1 <<=== MCU-PWM
????

اساتید این بکلایت السیدی رو با stm32 چطور میشه خاموش کرد؟؟

دوستان و اساتید این بکلایت السیدی رو با stm32 کنترول شد با چنتا دستور السیدی کامل خاموش میشه و با چند دستور دیگه روشن و به حالت اولیه برگشت!

MMBMMB20
28-10-2013, 11:36
حالا اگر دوستان پشتیبانی شرکت کویر الکترونیک ما رو کمک کنن خوب میشه!
اساتید برای نمایش فونت فارسی با درایور SSD1963 با stm32F103RBT
چکار باید کرد از کتاب خونه های GLCD , N96 که یکی از دوستان راهنمایی فرموده بودن نتونستم راش بندازم !!!!
کمک میکنید؟؟؟
دو ماهی میشه با این همه منبع به هیچ نتیجه ای نرسیدم !!!
بورد من همین برد MINI STM32 و درایور بورد السیدی 7" شرکت کویر الکترونیک هستش !!!
اساتید کمک میکنید؟؟؟

saeid_k67
10-11-2013, 14:39
با سلام
من یه Mini st از شرکت گرفتم ، همراش یه دونه هم ماژول ال سی دی 4.3 گرفتم برنامه هم دارم ولی متاسفانه مختصات X قاطی میشه یعنی وقتی میخوام تکستی بنویسم مختصات X رو از 250 زیاد میکنم قاطی میکنه

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

kamikazi
11-11-2013, 22:51
با سلام
من یه mini st از شرکت گرفتم ، همراش یه دونه هم ماژول ال سی دی 4.3 گرفتم برنامه هم دارم ولی متاسفانه مختصات x قاطی میشه یعنی وقتی میخوام تکستی بنویسم مختصات x رو از 250 زیاد میکنم قاطی میکنه

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

saeid_k67
15-11-2013, 17:02
با سلام

تصویر با کد مربوطه پیوست شد
مشکل بعد از مخصات 250 ایکس خطا داده و به اول ال سی دی اضافه میکند
در ضمن اگر نوشته ای هم نوشته شود باز هم نصف میاره یعنی 4و5 تا کاراکتر رو مینویسه بعدش بقیه رو از اول مینویسه
You can see links before reply

You can see links before reply


کد نوشته شده در ال سی دی :

/************************************************** ************
** Mini Stm32f103
** Eshop:
** You can see links before reply
** Support Team:
** You can see links before reply
** 03527730313
************************************************** *************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "hardware.h"
#include "ili932x.h"
#include "font.h"


unsigned int HDP=479;
unsigned int HT=531;
unsigned int HPS=43;
unsigned int LPS=8;
unsigned char HPW=10;

unsigned int VDP=271;
unsigned int VT=288;
unsigned int VPS=12;
unsigned int FPS=4;
unsigned char VPW=10;

uint32_t POINT_COLOR = BLUE,BACK_COLOR = WHITE; /* ·Ö±ðÉèÖõãµÄÑÕÉ«ºÍµ×É« */

/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_Write_Reg
** ¹¦ÄÜÃèÊö: дָÁî¼°Êý¾Ý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_Dat)
{
Write_Cmd(LCD_Reg);
Write_Dat(LCD_Dat);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: Write_Cmd
** ¹¦ÄÜÃèÊö: дָÁî
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void Write_Cmd(uint16_t LCD_Reg)
{
LCD_CS = 0;
LCD_RS = 0;
GPIOC->ODR = (GPIOC->ODR&0xff00)|(LCD_Reg&0x00ff);
GPIOB->ODR = (GPIOB->ODR&0x00ff)|(LCD_Reg&0xff00);
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1;
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: Write_Dat
** ¹¦ÄÜÃèÊö: дÊý¾Ý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void Write_Dat(uint16_t LCD_Dat)
{
LCD_CS = 0;
LCD_RS = 1;
GPIOC->ODR = (GPIOC->ODR&0xff00)|(LCD_Dat&0x00ff);
GPIOB->ODR = (GPIOB->ODR&0x00ff)|(LCD_Dat&0xff00);
LCD_WR = 0;
LCD_WR = 1;
LCD_CS = 1;
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_ReadReg
** ¹¦ÄÜÃèÊö: ¶ÁÖ¸Áî
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
uint16_t LCD_ReadReg(uint16_t LCD_Reg)
{
uint16_t temp;
Write_Cmd(LCD_Reg); //дÈëÒª¶ÁµÄ¼Ä´æÆ÷ºÅ

GPIOB->CRH = (GPIOB->CRH & 0x00000000) | 0x44444444; //½«¶Ë¿Ú¸ß8λÅäÖóÉÊäÈë
GPIOC->CRL = (GPIOC->CRL & 0x00000000) | 0x44444444; //½«¶Ë¿ÚµÍ8λÅäÖóÉÊäÈë
LCD_CS = 0;
LCD_RS = 1;
LCD_RD = 0;
temp = ((GPIOB->IDR&0xff00)|(GPIOC->IDR&0x00ff)); //¶ÁÈ¡Êý¾Ý(¶Á¼Ä´æÆ÷ʱ,²¢²»Ðè Òª¶Á2´Î)
LCD_RD = 1;
LCD_CS = 1;
GPIOB->CRH = (GPIOB->CRH & 0x00000000) | 0x33333333; //ÊͷŶ˿ڸß8λΪÊä³ö
GPIOC->CRL = (GPIOC->CRL & 0x00000000) | 0x33333333; //ÊͷŶ˿ڵÍ8λΪÊä³ö
return temp;
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_ReadDat
** ¹¦ÄÜÃèÊö: ¶ÁÊý¾Ý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
uint16_t LCD_ReadDat()
{
uint16_t temp;

GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x44444444; //½«¶Ë¿Ú¸ß8λÅäÖóÉÊäÈë
GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x44444444; //½«¶Ë¿ÚµÍ8λÅäÖóÉÊäÈë
LCD_CS = 0;
LCD_RS = 1;
LCD_RD = 0;
temp = ((GPIOB->IDR&0xff00)|(GPIOC->IDR&0x00ff)); //¶ÁÈ¡Êý¾Ý(¶Á¼Ä´æÆ÷ʱ,²¢²»Ðè Òª¶Á2´Î)
LCD_RD = 1;
LCD_CS = 1;
GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x33333333; //ÊͷŶ˿ڸß8λΪÊä³ö
GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x33333333; //ÊͷŶ˿ڵÍ8λΪÊä³ö

return temp;
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_Configuration
** ¹¦ÄÜÃèÊö: LCD_IO¿ÚÅäÖÃ
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC,ENABLE);

/* ÅäÖÃÊý¾ÝIO Á¬½Óµ½GPIOB *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // ÍÆÍìÊä³ö·½Ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // Êä³öIO¿Ú×î´ó×îËÙΪ50MHZ
GPIO_Init(GPIOB, &GPIO_InitStructure);

/* ÅäÖÿØÖÆIO Á¬½Óµ½PD12.PD13.PD14.PD15 *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // ÍÆÍìÊä³ö·½Ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // Êä³öIO¿Ú×î´ó×îËÙΪ50MHZ
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_Init
** ¹¦ÄÜÃèÊö: LCD³õʼ»¯
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_Init(void)
{
static uint16_t DeviceCode;
LCD_Configuration();
LCD_WriteReg(0x0000,0x0001);
LCD_Delay(5); // LCD_Delay 50 ms
DeviceCode = LCD_ReadReg(0x0000);
printf(" ID=0x%x\n",DeviceCode);
///////////////////////////////////
LCD_Delay(5); // delay 50 ms
Write_Cmd(0x00E2); //PLL multiplier, set PLL clock to 120M
Write_Dat(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystal
Write_Dat(0x0002);
Write_Dat(0x0004);

Write_Cmd(0x00E0); // PLL enable
Write_Dat(0x0001);
LCD_Delay(1);
Write_Cmd(0x00E0);
Write_Dat(0x0003);
LCD_Delay(5);
Write_Cmd(0x0001); // software reset
LCD_Delay(5);
Write_Cmd(0x00E6); //PLL setting for PCLK, depends on resolution
Write_Dat(0x0001);
Write_Dat(0x0033);
Write_Dat(0x0032);

Write_Cmd(0x00B0); //LCD SPECIFICATION
Write_Dat(0x0020);
Write_Dat(0x0000);
Write_Dat((HDP>>8)&0X00FF); //Set HDP
Write_Dat(HDP&0X00FF);
Write_Dat((VDP>>8)&0X00FF); //Set VDP
Write_Dat(VDP&0X00FF);
Write_Dat(0x0000);

Write_Cmd(0x00B4); //HSYNC
Write_Dat((HT>>8)&0X00FF); //Set HT
Write_Dat(HT&0X00FF);
Write_Dat((HPS>>8)&0X00FF); //Set HPS
Write_Dat(HPS&0X00FF);
Write_Dat(HPW); //Set HPW
Write_Dat((LPS>>8)&0X00FF); //Set HPS
Write_Dat(LPS&0X00FF);
Write_Dat(0x0000);

Write_Cmd(0x00B6); //VSYNC
Write_Dat((VT>>8)&0X00FF); //Set VT
Write_Dat(VT&0X00FF);
Write_Dat((VPS>>8)&0X00FF); //Set VPS
Write_Dat(VPS&0X00FF);
Write_Dat(VPW); //Set VPW
Write_Dat((FPS>>8)&0X00FF); //Set FPS
Write_Dat(FPS&0X00FF);

Write_Cmd(0x00F0); //pixel data interface
Write_Dat(0x0003); /*16λ565¸ñʽ*/

Write_Cmd(0x0021); //½øÈëͼÐÎÑÕÉ«·­×ªÄ£Ê½

Write_Cmd(0x00BC);//ÖØÒª
Write_Dat(0x0080);//¶Ô±È¶È
Write_Dat(0x0080);//ÁÁ¶È
Write_Dat(0x0080);//±¥ºÍ¶ÈÖµ //
Write_Dat(0x0001);//´¦Àí»úÔÊÐí
Write_Cmd(0x0029); //display on

LCD_Clear(WHITE);

}

void WR_DATA_Prepare(void)
{
Write_Cmd(0x002c);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_DrawPoint
** ¹¦ÄÜÃèÊö: дһ¸öµã
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_DrawPoint(uint16_t x, uint16_t y, uint16_t color)
{
LCD_SetCursor(x,y); //ÉèÖùâ±êλÖÃ
LCD_WriteRAM_Prepare();
//¿ªÊ¼Ð´ÈëGRAM
Write_Dat(color);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_WriteRAM_Prepare
** ¹¦ÄÜÃèÊö: Щ׼±¸
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_WriteRAM_Prepare()
{
Write_Cmd(0x002c);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_SetCursor
** ¹¦ÄÜÃèÊö: ÉèÖùâ±êº¯Êý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_SetCursor(uint8_t Xpos,uint16_t Ypos)
{
Write_Cmd(0x002A);
Write_Dat(Xpos>>8);
Write_Dat(Xpos&0x00ff);
Write_Dat(479>>8);
Write_Dat(479&0x00ff);
Write_Cmd(0x002b);
Write_Dat(Ypos>>8);
Write_Dat(Ypos&0x00ff);
Write_Dat(271>>8);
Write_Dat(271&0x00ff);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_Clear
** ¹¦ÄÜÃèÊö: ÇåÆÁÄ»º¯Êý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
//ÇåÆÁº¯Êý
//Color:ÒªÇåÆÁµÄÌî³äÉ«
void LCD_Clear(u32 color)
{
unsigned int l=480,w;

Write_Cmd(0x002a);
Write_Dat(0);
Write_Dat(0);
Write_Dat(HDP>>8);
Write_Dat(HDP&0x00ff);

Write_Cmd(0x002b);
Write_Dat(0);
Write_Dat(0);
Write_Dat(VDP>>8);
Write_Dat(VDP&0x00ff);

Write_Cmd(0x002c);
while(l--)
{
for(w=0;w<272;w++)
{
Write_Dat(color);
}
}
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: LCD_Delay
** ¹¦ÄÜÃèÊö: ÓÃÓÚLCDÇý¶¯ÑÓʱ
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ06ÈÕ
************************************************** ***************************/
void LCD_Delay (uint32_t nCount)
{
__IO uint16_t i;
for (i=0;i<nCount*100;i++);
}

/**
*Ãû³Æ£ºvoid LCD_WindowMax()
*²ÎÊý£º
*·µ»Ø£ºÎÞ
*¹¦ÄÜ£ºÉèÖô°¿Ú
*±¸×¢£º
**/
void LCD_WindowMax (unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend)
{
Write_Cmd(0X002A);
Write_Dat(xsta>>8);
Write_Dat(xsta&0X00FF);
Write_Dat(xend>>8);
Write_Dat(xend&0X00FF);

Write_Cmd(0X002B);
Write_Dat(ysta>>8);
Write_Dat(ysta&0X00FF);
Write_Dat(yend>>8);
Write_Dat(yend&0X00FF);
}

/**
*Ãû³Æ£ºvoid LCD_Fill(uint8_t xsta, uint16_t ysta, uint8_t xend, uint16_t yend, uint16_t colour)
*²ÎÊý£ºxsta ÆðʼX×ø±ê
ysta ÆðʼY×ø±ê
xend ½áÊøX×ø±ê
yend ½áÊøY×ø±ê
color ´ýÌî³äÑÕÉ«
*·µ»Ø£ºÎÞ
*¹¦ÄÜ£ºÔÚÖ¸¶¨¾ØÐÎÇøÓòÌî³ä ¸¶¨ÑÕÉ«£¬ÇøÓò´óС(xend-xsta)*(yend-ysta)
*±¸×¢£º²¿·ÖÇøÓòÉÙÒ»ÐÐÏñËØ ã
**/
void LCD_Fill(uint8_t xsta, uint16_t ysta, uint8_t xend, uint16_t yend, uint16_t colour)
{
u32 n;

/*ÉèÖô°¿Ú */
LCD_WindowMax (xsta, ysta, xend, yend);
LCD_WriteRAM_Prepare(); /*¿ªÊ¼Ð´ÈëGRAM*/
n=(u32)(yend-ysta+1)*(xend-xsta+1);
while(n--){Write_Dat(colour);} /*ÏÔʾËùÌî³äµÄÑÕÉ«*/
}

/**
*Ãû³Æ£ºvoid LCD_DrawLine(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend)
*²ÎÊý£ºxsta XÆðʼ×ø±ê
ysta YÆðʼ×ø±ê
xend XÖÕµã×ø±ê
yend YÖÕµã×ø±ê
*·µ»Ø£ºÎÞ
*¹¦ÄÜ£ºÖ¸¶¨×ø±í(Á½µã)£¬»­Ï
*±¸×¢£ºÐèÒªÌí¼ÓÑÕÉ«²ÎÊý
**/
void LCD_DrawLine(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
u16 x, y, t;
if((xsta==xend)&&(ysta==yend))
LCD_DrawPoint(xsta, ysta, color);
else
if(abs(yend-ysta)>abs(xend-xsta))/*бÂÊ´óÓÚ1 */
{
if(ysta>yend)
{
t=ysta;
ysta=yend;
yend=t;
t=xsta;
xsta=xend;
xend=t;
}
for(y=ysta;y<yend;y++) /*ÒÔyÖáΪ»ù×¼*/
{
x=(u32)(y-ysta)*(xend-xsta)/(yend-ysta)+xsta;
LCD_DrawPoint(x, y, color);
}
}
else /*бÂÊСÓÚµÈÓÚ1 */
{
if(xsta>xend)
{
t=ysta;
ysta=yend;
yend=t;
t=xsta;
xsta=xend;
xend=t;
}
for(x=xsta;x<=xend;x++) /*ÒÔxÖáΪ»ù×¼*/
{
y =(u32)(x-xsta)*(yend-ysta)/(xend-xsta)+ysta;
LCD_DrawPoint(x, y, color);
}
}
}

/**
*Ãû³Æ£ºvoid Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r)
*²ÎÊý£ºx0 ÖÐÐĵãºá×ø±ê
y0 ÖÐÐĵã×Ý×ø±ê
r °ë¾¶
*·µ»Ø£ºÎÞ
*¹¦ÄÜ£ºÔÚÖ¸¶¨Î»Öû­Ò»¸öÖ¸ ¨´óСµÄÔ²
*±¸×¢£º¼ÓÈëÑÕÉ«²ÎÊý£¬ÊÇ·ñ î³äµÈ
**/
void Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t color)
{
int a,b;
int di;
a=0;b=r;
di=3-(r<<1); /*ÅжÏϸöµãλÖõıêÖ¾*/
while(a<=b)
{
LCD_DrawPoint(x0-b, y0-a, color); //3
LCD_DrawPoint(x0+b, y0-a, color); //0
LCD_DrawPoint(x0-a, y0+b, color); //1
LCD_DrawPoint(x0-b, y0-a, color); //7
LCD_DrawPoint(x0-a, y0-b, color); //2
LCD_DrawPoint(x0+b, y0+a, color); //4
LCD_DrawPoint(x0+a, y0-b, color); //5
LCD_DrawPoint(x0+a, y0+b, color); //6
LCD_DrawPoint(x0-b, y0+a, color);
a++;

/*ʹÓÃBresenhamËã·¨»­Ô²*/
if(di<0)di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
LCD_DrawPoint(x0+a, y0+b, color);
}
}

/**
*Ãû³Æ£ºvoid LCD_DrawRectangle(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend)
*²ÎÊý£ºxsta XÆðʼ×ø±ê
ysta YÆðʼ×ø±ê
xend X½áÊø×ø±ê
yend Y½áÊø×ø±ê
*·µ»Ø£ºÎÞ
*¹¦ÄÜ£ºÔÚÖ¸¶¨ÇøÓò»­¾ØÐÎ
*±¸×¢£º

**/
void LCD_DrawRectangle(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
LCD_DrawLine(xsta, ysta, xend, ysta, color);
LCD_DrawLine(xsta, ysta, xsta, yend, color);
LCD_DrawLine(xsta, yend, xend, yend, color);
LCD_DrawLine(xend, ysta, xend, yend, color);
}

/**
*Ãû³Æ£ºvoid LCD_ShowChar(u8 x, u16 y, u8 num, u8 size, u16 PenColor, u16 BackColor)
*²ÎÊý£ºx£¬y Æðʼ×ø±ê£¨x:0~234 y:0~308£©
num ×Ö·ûASCIIÂëÖµ
size ×Ö·û´óС£¬Ê¹ÓÃĬÈÏ8*16
PenColor ×ÖÌåÑÕÉ«
BackColor ×ÖÌå±³¾°ÑÕÉ«
*¹¦ÄÜ£º
*±¸×¢£º×¢ÒâÆÁÄ»´óС
**/
void LCD_ShowChar(u8 x, u16 y, u8 num, u8 size, u16 PenColor, u16 BackColor)
{
#define MAX_CHAR_POSX 480
#define MAX_CHAR_POSY 272
u8 temp;
u8 pos,t;
if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
num=num-' ';
/*µÃµ½Æ«ÒƺóµÄÖµ */
for(pos=0;pos<size;pos++)
{

temp=asc2_1608[num][pos]; /*µ÷ÓÃ1608×ÖÌå */
for(t=0;t<size/2;t++)
{
if(temp&0x01) /*´ÓµÍλ¿ªÊ¼*/
{
LCD_DrawPoint(x+t, y+pos, PenColor); /*»­×ÖÌåÑÕÉ« Ò»¸öµã*/

}
else
LCD_DrawPoint(x+t, y+pos, BackColor); /*»­±³¾°ÑÕÉ« Ò»¸öµã*/

temp>>=1;

}
}
}

//m^nº¯Êý
u32 mypow(u8 m,u8 n)
{
u32 result=1;

while(n--)result*=m;

return result;
}
//ÏÔʾ2¸öÊý×Ö
//x,y :Æðµã×ø±ê
//len :Êý×ÖµÄλÊý
//size:×ÖÌå´óС
//color:ÑÕÉ«
//num:ÊýÖµ(0~4294967295);
void LCD_ShowNum(u8 x,u8 y,u32 num,u8 len, u16 PenColor, u16 BackColor)
{
u8 size = 16; /* ÕâÀïʹÓÃĬÈϵÄ16*8 */
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+(size/2)*t,y,' ',size, PenColor, BackColor);
continue;
}else enshow=1;

}
LCD_ShowChar(x+(size/2)*t,y,temp+'0',size, PenColor, BackColor);
}
}



/**
Ãû³Æ£ºvoid LCD_ShowCharString(uint16_t x, uint16_t y, const uint8_t *p, uint16_t PenColor, uint16_t BackColor)
²ÎÊý£ºx£¬y Æðʼ×ø±ê
p Ö¸Ïò×Ö·û´®ÆðʼµØÖ·
PenColor ×Ö·ûÑÕÉ«
BackColor ±³¾°ÑÕÉ«
¹¦ÄÜ£º
±¸×¢£ºÓÃ16×ÖÌ壬¿ÉÒÔµ÷½Ú ´Ëº¯Êý²»Äܵ¥¶Àµ÷ÓÃ
**/

void LCD_ShowCharString(uint16_t x, uint16_t y, const uint8_t *p, uint16_t PenColor, uint16_t BackColor)
{
uint8_t size = 16; /*---×Ö·û´óСĬÈÏ16*8---*/

if(x>MAX_CHAR_POSX){x=0;y+=size;} /*³¬³öXÖá×ÖÌå×îСµ¥Î»£¬»»ÐÐ */
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);} /*³¬³öYÖá×ÖÌå×îСµ¥Î»£¬»Øµ½ Ô­µã£¬²¢ÇÒÇåÆÁ*/

LCD_ShowChar(x, y, *p, size, PenColor, BackColor); /*0±íʾ·Çµþ¼Ó·½Ê½*/
}

/**
*Ãû³Æ: u16 findHzIndex(u8 *hz)
*²ÎÊý£ºhz
*¹¦ÄÜ£ºË÷Òýºº×Ö´æ´¢µÄÄÚ´æ ØÖ·
*±¸×¢£º
**/
u16 findHzIndex(u8 *hz) /* ÔÚ×Ô¶¨Ò庺×Ö¿âÔÚ²éÕÒËùÒªÏ Ôʾ */
/* µÄºº×ÖµÄλÖà */
{
u16 i=0;
FNT_GB16 *ptGb16 = (FNT_GB16 *)GBHZ_16; /*ptGb16Ö¸ÏòGBHZ_16*/
while(ptGb16[i].Index[0] > 0x90)
{
if ((*hz == ptGb16[i].Index[0]) && (*(hz+1) == ptGb16[i].Index[1])) /*ºº×ÖÓÃÁ½Î»À´±íʾµØÖ·Âë*/
{

return i;
}
i++;
if(i > (sizeof((FNT_GB16 *)GBHZ_16) / sizeof(FNT_GB16) - 1)) /* ËÑË÷ϱêÔ¼Êø */
{

break;
}
}

return 0;
}

/**
*Ãû³Æ£ºvoid WriteOneHz(uint16_t x0, uint16_t y0, uint8_t *pucMsk, uint16_t PenColor, uint16_t BackColor)
*²ÎÊý£ºx0,y0 Æðʼ×ø±ê
*pucMsk Ö¸Ïò
PenColor ×Ö·ûÑÕÉ«
BackColor ±³¾°ÑÕÉ«
*¹¦ÄÜ£º
*±¸×¢£º´Ëº¯Êý²»Äܵ¥¶À×÷Ϊ º×Ö×Ö·ûÏÔʾ
**/
void WriteOneHz(u16 x0, u16 y0, u8 *pucMsk, u16 PenColor, u16 BackColor)
{
u16 i,j;
u16 mod[16]; /* µ±Ç°×ÖÄ£ 16*16 */
u16 *pusMsk; /* µ±Ç°×Ö¿âµØÖ· */
u16 y;

pusMsk = (u16 *)pucMsk;
for(i=0; i<16; i++) /* ±£´æµ±Ç°ºº×ÖµãÕóʽ×ÖÄ£ */
{
mod[i] = *pusMsk;
/* È¡µÃµ±Ç°×ÖÄ££¬°ë×Ö¶ÔÆë·ÃÎ Ê */
mod[i] = ((mod[i] & 0xff00) >> 8) | ((mod[i] & 0x00ff) << 8);/* ×ÖÄ£½»»»¸ßµÍ×Ö½Ú*/
pusMsk = pusMsk+1;
}
y = y0;
for(i=0; i<16; i++) /* 16ÐÐ */
{
for(j=0; j<16; j++) /* 16ÁÐ */
{
if((mod[i] << j) & 0x8000) /* ÏÔʾµÚiÐÐ ¹²16¸öµã */
{

LCD_DrawPoint(x0+j, y0+i, PenColor);
}
else
{

LCD_DrawPoint(x0+j, y0+i, BackColor);
}
}
y++;
}
}

/**
*Ãû³Æ£ºvoid LCD_ShowHzString(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor)
*²ÎÊý£ºx0£¬y0 Æðʼ×ø±ê
pcStr Ö¸Ïò
PenColor ×ÖÌåÑÕÉ«
BackColor ×ÖÌå±³¾°
*¹¦ÄÜ£ºÏÔʾºº×Ö×Ö·û´®
*±¸×¢£ºÕâ¸öº¯Êý²»Äܵ¥¶Àµ÷ Ã
**/
void LCD_ShowHzString(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor)
{
#define MAX_HZ_POSX 479
#define MAX_HZ_POSY 271

u16 usIndex;
u8 size = 16;
FNT_GB16 *ptGb16 = 0;
ptGb16 = (FNT_GB16 *)GBHZ_16;

if(x0>MAX_HZ_POSX){x0=0;y0+=size;} /*³¬³öXÖá×ÖÌå×îСµ¥Î»£¬»»ÐÐ */
if(y0>MAX_HZ_POSY){y0=x0=0;LCD_Clear(WHITE);} /*³¬³öYÖá×ÖÌå×îСµ¥Î»£¬»Øµ½ Ô­µã£¬²¢ÇÒÇåÆÁ*/

usIndex = findHzIndex(pcStr);
WriteOneHz(x0, y0, (u8 *)&(ptGb16[usIndex].Msk[0]), PenColor, BackColor); /* ÏÔʾ×Ö·û */
}

/**
*Ãû³Æ£ºvoid LCD_ShowString(u16 x0, u16 y0, u8 *pcstr, u16 PenColor, u16 BackColor)
*²ÎÊý£ºx0 y0 Æðʼ×ø±ê
pcstr ×Ö·û´®Ö¸Õë
PenColor ×ÖÌåÑÕÉ«
BackColor ×ÖÌå±³¾°É«
*¹¦ÄÜ£ºµ÷ÓÃ×Ö·ûºÍºº×ÖÏÔʾ ¯Êý£¬ÊµÏÖ×Ö·û´®ÏÔʾ
*±¸×¢£º
**/
void LCD_ShowString(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor)
{
while(*pcStr!='\0')
{
if(*pcStr>0x80) /*ÏÔʾºº×Ö*/
{
LCD_ShowHzString(x0, y0, pcStr, PenColor, BackColor);
pcStr += 2;
x0 += 19;


}
else /*ÏÔʾ×Ö·û*/
{

LCD_ShowCharString(x0, y0, pcStr, PenColor, BackColor);
pcStr +=1;
x0+= 8;

}

}

}

/************************************************** **************************
* Ãû ³Æ£ºu16 ili9320_BGRtoRGB(u16 Color)
* ¹¦ ÄÜ£ºRRRRRGGGGGGBBBBB ¸ÄΪ BBBBBGGGGGGRRRRR ¸ñʽ
* Èë¿Ú²ÎÊý£ºColor BRG ÑÕÉ«Öµ
* ³ö¿Ú²ÎÊý£ºRGB ÑÕÉ«Öµ
* ˵ Ã÷£ºÄÚ²¿º¯Êýµ÷ÓÃ
* µ÷Ó÷½·¨£º
************************************************** **************************/
u16 LCD_RGBtoBGR(u16 Color)
{
u16 r, g, b, bgr;

b = (Color>>0) & 0x1f; /* ÌáÈ¡B */
g = (Color>>5) & 0x3f; /* ÖмäÁùλ */
r = (Color>>11) & 0x1f; /* ÌáÈ¡R */

bgr = (b<<11) + (g<<5) + (r<<0);

return( bgr );
}

/************************************************** **************************
* Ãû ³Æ£ºvoid LCD_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
* ¹¦ ÄÜ£ºÔÚÖ¸¶¨×ù±ê·¶Î§ÏÔʾһ¸ ±Í¼Æ¬
* Èë¿Ú²ÎÊý£ºStartX ÐÐÆðʼ×ù±ê
* StartY ÁÐÆðʼ×ù±ê
* EndX ÐнáÊø×ù±ê
* EndY ÁнáÊø×ù±ê
pic ͼƬͷָÕë
* ³ö¿Ú²ÎÊý£ºÎÞ
* ˵ Ã÷£ºÍ¼Æ¬È¡Ä£¸ñʽΪˮƽɨà 裬16λÑÕɫģʽ
* µ÷Ó÷½·¨£ºLCD_DrawPicture(0,0,100,100,(u 16*)demo);
************************************************** **************************/
void LCD_DrawPicture(u16 StartX,u16 StartY,u16 Xend,u16 Yend,u8 *pic)
{
static u16 i=0,j=0;
u16 *bitmap = (u16 *)pic;
for(j=0; j<Yend-StartY; j++)
{
for(i=0; i<Xend-StartX; i++)
LCD_DrawPoint(StartX+i, StartY+j, *bitmap++);
}
}





کد نوشته در main برنامه :

/************************************************** ************
** Mini Stm32f103
** Eshop:
** You can see links before reply
** Support Team:
** You can see links before reply
** 03527730313
************************************************** *************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "hardware.h"
#include "usart.h"
#include "ili932x.h"
#include <stdio.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
extern uint8_t gImage_fg[];

static __IO uint32_t TimingDelay;
/* Private function prototypes -----------------------------------------------*/
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void TIM_Configuration(void);
uint8_t KEY_Scan(void);
void Delay(__IO uint32_t nTime);
char FirstSwitchWHILE=0,FINALTESTWILE=0,FINALTEST=0,STA RT=0,UPWHILE=0,DOWNWHILE=0,AOUTUUPWHILE=0,AOUTUDOW NWHILE=0,IFAOUTUUPWHILE=0,IFAOUTUDOWNWHILE=0,TEMPU P=0,TEMPDOWN=0;
int TESTINGOK=0;

/* Private functions ---------------------------------------------------------*/

/************************************************** ***************************
** º¯ÊýÃû³Æ: main
** ¹¦ÄÜÃèÊö: Ö÷º¯ÊýÈë¿Ú
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
int main(void)
{
SystemInit(); //ÅäÖÃϵͳʱÖÓ72M(°üÀ¨clock, PLL and Flash configuration)
while(SysTick_Config(SystemFrequency / 1000)); //Systick ÅäÖÃÑÓʱn*ms
GPIO_Configuration(); // Òý½ÅÅäÖÃ
NVIC_Configuration(); //ϵͳÖжÏÅäÖÃ
TIM_Configuration(); //¶¨Ê±Æ÷2³õʼ»¯
USART_Configuration(); //Ò첽ͨÐųõʼ»¯
LCD_Init(); // LCD³õʼ»¯



while (1)
{

LCD_DrawRectangle(10,10,290,260,BLACK);

}
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: GPIO_Configuration
** ¹¦ÄÜÃèÊö: ÅäÖÃIO¿Ú
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOC| RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOB
, ENABLE); // ʹÄܶ˿ÚʱÖÓ£¬ÖØÒª£¡£¡£¡

/* ÅäÖà LED1¡¢LED2Òý½ÅµÄ¹¦ÄÜ *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ͨÓÃÍÆÍìÊä³öģʽ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³ö×î´óƵÂÊΪ50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯PA2¡¢PA3

/* ÅäÖà LED1¡¢LED2Òý½ÅµÄ¹¦ÄÜ *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ͨÓÃÍÆÍìÊä³öģʽ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³ö×î´óƵÂÊΪ50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14| GPIO_Pin_12| GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀ­ÊäÈëģʽ
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* ÅäÖà KEY1¡¢KEY2Òý½ÅµÄ¹¦ÄÜ *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀ­ÊäÈëģʽ
GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯PA0¡¢PA1


/* ÅäÖÃ USART1 Tx (PA9) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÿªÂ©Êä³öģʽ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Êä³ö×î´óƵÂÊΪ50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* ÅäÖÃ USART1 Rx (PA10) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈëģʽ
GPIO_Init(GPIOA, &GPIO_InitStructure);

}
/************************************************** ***************************
** º¯ÊýÃû³Æ: TIM_Configuration
** ¹¦ÄÜÃèÊö: ¶¨Ê±Æ÷ÅäÖÃ
1usÒ»¸ö¼ÆÊý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;

TIM_DeInit( TIM2); //¸´Î»TIM2¶¨Ê±Æ÷
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //ʹÄܶ¨Ê±Æ÷2
//TIM2 ʹÓÃÄÚ²¿Ê±ÖÓ
//TIM_InternalClockConfig(TIM1);
//TIM2»ù±¾ÉèÖÃ
//ÉèÖÃÔ¤·ÖƵÆ÷·ÖƵϵÊý71£¬¼´ APB2=72M, TIM1_CLK=72/72=1MHz
//TIM_Period£¨TIM1_ARR£©=1000£¬¼ÆÊýÆ÷Ï ÉϼÆÊýµ½1000ºó²úÉú¸üÐÂʼþ ¬¼ÆÊýÖµ¹éÁã
//ÏòÉϼÆÊýģʽ
//TIM_RepetitionCounter(TIM1_RCR)=0£¬Ã¿´ÎÏò ÏÒç³ö¶¼²úÉú¸üÐÂʼþ
TIM_BaseInitStructure.TIM_Period = 1000; //ÉèÖÃ×Ô¶¯ÖØÔؼĴæÆ÷ֵΪ×î´ óÖµ
TIM_BaseInitStructure.TIM_Prescaler = 71; //×Ô¶¨ÒåÔ¤·ÖƵ
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_BaseInitStructure);

//ÇåÖжϣ¬ÒÔÃâÒ»ÆôÓÃÖжϺóÁ ¢¼´²úÉúÖжÏ
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
//ʹÄÜTIM2ÖжÏÔ´
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
//TIM2×Ü¿ª¹Ø£º¿ªÆô
TIM_Cmd(TIM2, ENABLE);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: TIM2_IRQHandler
** ¹¦ÄÜÃèÊö: ¶¨Ê±Æ÷2Öжϴ¦Àíº¯Êý
1usÒ»¸ö¼ÆÊý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
uint16_t tick ; // tick counter
uint8_t count;
void TIM2_IRQHandler(void)
{
static uint8_t count=0;
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
tick++;
count++;
// if(count==30)
//{
// LED2 =!LED2;
//}
}
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: KEY_Scan
** ¹¦ÄÜÃèÊö: °´¼ü´¦Àíº¯Êý
0£¬Ã»ÓÐÈκΰ´¼ü°´Ï 1£¬KEY1°´ÏÂ
2£¬KEY2°´ÏÂ
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
uint8_t KEY_Scan(void)
{
static uint8_t KEY_UP=1; //°´¼ü°´ËÉ¿ª±êÖ¾
if(KEY_UP&&(KEY1==0||KEY2==0))
{
Delay(10); //È¥¶¶¶¯
KEY_UP=0;
if(KEY1==0)return 1;
else if(KEY2==0)return 2;
}else if(KEY1==1&&KEY2==1)KEY_UP=1;
return 0; //ÎÞ°´¼ü°´ÏÂ
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: Delay
** ¹¦ÄÜÃèÊö: ÓÃSystickÑÓʱ
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;

while(TimingDelay != 0);
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: TimingDelay_Decrement
** ¹¦ÄÜÃèÊö: SystickÖжϽøÈ뺯Êý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: NVIC_Configuration
** ¹¦ÄÜÃèÊö: ϵͳÖжϹÜÀí
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //ÉèÖÃÖжÏ×éΪ0

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //¸üÐÂʼþ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0; //ÇÀÕ¼ÓÅÏȼ¶0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //ÏìÓ¦ÓÅÏȼ¶1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ÔÊÐíÖжÏ
NVIC_Init(&NVIC_InitStructure); //дÈëÉèÖÃ
}
/************************************************** ***************************
** º¯ÊýÃû³Æ: EXTI0_IRQHandler
** ¹¦ÄÜÃèÊö: ÍⲿÖжÏ0½øÈë¿Ú
´¦ÀíÖжϺ¯Êý
** ×÷ ¡¡Õß: Dream
** ÈÕ¡¡ ÆÚ: 2010Äê12ÔÂ17ÈÕ
************************************************** ***************************/
void EXTI0_IRQHandler(void)
{

if(EXTI_GetITStatus(EXTI_IMR_MR0) != RESET)
{
Delay(50); //ÑÓʱȡÏû¶¶

EXTI_ClearITPendingBit(EXTI_IMR_MR0); //Çå³ýLINE13ÉϵÄÖжϱê־λ
}
}


#ifdef USE_FULL_ASSERT

/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif

/************************************************** *****************************
** End of File
************************************************** ******************************/


باتشکر

hesam20
20-12-2013, 15:19
سلام بر دوستان
من می خواستم بپرسم که ایا میشه ال سی دی های 3.2 اینچ به بالا رو مثل ال سی دی 4.3 یا 5 ویا 7 اینچ رو هم بدون اون برد ابی که براش گذاشته شده یا همون ای سی درایو اون مثل ال سی دی های 2.8 اینچ و 3.2 اینچ (که بدون ای سی می توان مستقیم به میکرو وصل کرد) راه انداخت؟
یعنی فقط ال سی دی خود فروشگاه رو خرید و دیگه اون برد راه اندازش رو نگرفت؟ یا اینکه باید باشه؟ لطفا راهنمایی بفرمایین

mahdi8866
20-12-2013, 16:10
سلام
میشه ولی کاره هرکی نیست و باید رعایت زمان بندی و پالسها و دیتاها رو انقدر بلد باشی بتونی راه بندازی که بازم فایده نداره بخاطر ظرفیت کم رم میکرو و غیره یا باید بهش cpld و یا fpga وصل کنی و راه اندازیش کنی که باز میشه همون ایسی درایوره
این السی دی ها درایور داخلی دارند نه اونیکه شما فکر میکنی مثل السی دی n96
بیا درایور ssd1963 رو بخر خودتو الاف نکن

sadmonew
20-12-2013, 19:01
با سلام

تصویر با کد مربوطه پیوست شد
مشکل بعد از مخصات 250 ایکس خطا داده و به اول ال سی دی اضافه میکند
در ضمن اگر نوشته ای هم نوشته شود باز هم نصف میاره یعنی 4و5 تا کاراکتر رو مینویسه بعدش بقیه رو از اول مینویسه...........
سلام مهندس
قطعا" فايل اينيت مشكل داره. احتمالا" چند فرمان رو درست نميفرسته، يا ناقص ميفرسته.
با فايل هاي ديگه مقايسه كن ببين كدوم فرمان تو قسمت اينيت كم گذاشته شده، اونو اضافه كن.

hesam20
23-12-2013, 09:56
سلام
میشه ولی کاره هرکی نیست و باید رعایت زمان بندی و پالسها و دیتاها رو انقدر بلد باشی بتونی راه بندازی که بازم فایده نداره بخاطر ظرفیت کم رم میکرو و غیره یا باید بهش cpld و یا fpga وصل کنی و راه اندازیش کنی که باز میشه همون ایسی درایوره
این السی دی ها درایور داخلی دارند نه اونیکه شما فکر میکنی مثل السی دی n96
بیا درایور ssd1963 رو بخر خودتو الاف نکن
اقا ممنون از پاسختون ،می خواستم بپرسم این ال سی دی های 3.2 و 2.8 اینچ که مستقیم به میکرو وصل میشه؛ از داخل درایور دارن؟ یا این که اصلا اون ها درایور نمی خوان؟ میشه یکم توضیح بدین ممنون، در ضمن برای اون رمی که شما فرمودین نمیشه از sd-ram استفاده کرد؟

mahdi8866
23-12-2013, 14:50
سلام
بله السی دی های که گفتید داخلشون درایور کنترلر دارن که خودش زمانبندی پالسها وکلاک مربوط و غیره تولید میکنه وفقط شما با میکرو دیتا و کنترل ریست وخواندن ونوشتن رو داری ولی السی دی 4.3 و یا 7 اینچی داخلشون درایور داره ولی درایوره اون زمانبندیها وپالسها رو نمیکنه و واگذار میکنه برای درایور کنترلر اکسترنال چرا ؟ چند علت داره یکیش اینکه اون فرد طراح درایور رو نسبت به سرعت و افکتها ویسری موارد ورودی داده وغیره رو خودش انتخاب کنه یعنی چی؟ اون السی دی های 2.8 و 3.2 اینچی فقط برای موبایل ساخته شدن و درایورشون هم برای همون قد وقواره و سرعت میکروکنترلر اون گوشی موبایل ساخته شده که حالا ما میام تو پروژه هامون استفاده میکنیم و لی السیدی 4.3 و یا 7 به بالا برای هر کارو پروژه که بخوای طراحی کنی ساخته شده بخاطر همین باید از درایور خارجی براش استفاده کنی شاید بخوای برای یک dvd player استفاده کنی یا نه برای دیسپلیر صنعتی یا کارت خوان اتوبوس یا غیره ... بخاطر همین بسته به به نوع پروژه باید درایورهای خاصی رو استفاده کنی پس باید درایور داخلی نباشه چون درایور های دخلی معمولا ضعیف هستن یا رم کمی دارن و یا افکتهای مهمی رو ساپورت نمیکنن یا پروتکل ارتباطی محدودی دارن و غیره ودرایور های خارجی هم مختلف هستن با ویژهگیهای خاص خودشون ولی معمولا از ssd1963 و یه مدل دیگه هست که الان یادم نیست استفاده میکنن
شما اگه مشکل بودجه داری درایور رو از فروشگاه بخر و بردش رو هم خودت بزن و میتونی از مدارات اقای kamikazi و sadmonew که تو سایت هست استفاده کنی
اگه مشکل بودجه نداری خودتو الاف نکن از فروشگاه برد درایور رو اماده بخر و وقتت رو هدر نده

hesam20
23-12-2013, 23:42
سلام اقا ممنون فقط یک سوا برام پیش اومد اون هم اینه که داخل سایت چند تا برد درایور راه انداز هست مگه با درایور 5 اینچ نمیشه ال سی دی 7 اینچ رو راه اندازی کرد؟ در ضمن اون dvd player که شما فرمودید میشه توضیح بدین مثلا تو کجای اون میشه از این خاصیت استفاده کرد؟ در ضمن در مورد درایور ها هم کمی توضیح بدین ممنون میشم چون من هیچ اطلاعی از این درایورها ندارم .درایوری هم که فرمودین تو سایت نتونستم پیدا کنم ،اون هم اگه لینک بدین سپاس گذار میشم
اقا خیلی اقایی می کنین کمک می کنین خدا خیرتون بده.

mahdi8866
24-12-2013, 19:49
سلام
چرا تو همین برد درایور ها از این ایسی استفاده شده و فرق برد 5 اینچ و 7 اینچ فکر کنم تو سوکت کانکتور السی دی هاشون باشه و جای این سوکت در روی برد نسبت به فلت السی دی
اینم لینکه درایور در فروشگاه سایت
ssd1963QL9 (You can see links before reply)

khavaninzadeh
03-01-2014, 15:40
سلام..
من از صفحه 1 تا اینجا رو خوندم و نکات جالبی دستگیرم شد ولی
من یه درایور با ال سی دی 4.3و تاچ خیلی وقته پیش خریده بودم که ترکیب پایه هاش بدین صورته
You can see links before reply
هدر stm32f103ret6 هم از یکی از دوستام گرفتم تا این ال سی دی رو با کمک شما راه بندازم..
چند تا مشکل است..
اول اینکه پایه ها انگار فرق میکنه .. te وcd نداره..
از فایل هدر ssd که گذاشتین برای درایو این ای سی استفاده میکنیم ..طریقه استفاده از این هدر به چه صورته؟؟یعنی من تو برنامه main چی بنویسم که بشه فعلا رنگ ها رو نمایش داد؟؟؟
فایله هدری برای sd رم هست که بشه عکس رو خوند و نمایشش داد؟
من ارم کار نکرده بودم اگر میشه ترتیب اتصال پایه ها رو بهم بگین...
سوالامو بعداز اتصال و بقیه کارا میپرسم..
پیشاپیش ممنونم

amir8668
03-03-2014, 20:17
با سلام

تصویر با کد مربوطه پیوست شد
مشکل بعد از مخصات 250 ایکس خطا داده و به اول ال سی دی اضافه میکند
در ضمن اگر نوشته ای هم نوشته شود باز هم نصف میاره یعنی 4و5 تا کاراکتر رو مینویسه بعدش بقیه رو از اول مینویسه


سلام
آقا منم دقیقا همین مشکلو دارم، حلش نکردین؟
کسی نمیدونه مشکل از کجاست؟

amir8668
05-03-2014, 16:06
کسی که به ما جواب نداد!!
اما این مشکل بخاطر توابع نوشته شده توی مثال سی دی همراه با ال سی دی بود.
ورودی توابع که مختصات نقاط شروع و پایان رو تعیین میکنه، به صورت 8 بیتی بود که بیشتر از 255 مقدار نمیگیره، برا همین سرریز میشد و از اول صفحه شرو میکرد، اگه ورودی ها رو 16 بیتی تعریف کنیم مشکل حل میشه

jonbakhsh
13-03-2014, 02:09
من این lcd درایو کردم و لزرش داشت بعد اومدم ولتاژ 5 ولتی که با یک رگولاتور 7805 بهش داده بودم با یک منبع تغذیه سوئیچینگ 5 ولتی عوض کردم دیگه پرش نداره
ولی 5 ولتش جریان زیاد میکشه . حالا یک مشکل دارم اونم درایو تاچ با آی سی ADS7843 هستش که بهم بد جواب میده . کسی از دوستان کتابخانه برای ADS7843 نداره ؟؟؟

بی مخ!
31-03-2014, 00:55
سلام دوستان و اساتید عزیز،
میخواستم ببینم کسی نتونسته با این lcd فارسی نویسی انجام بده هنوز؟
من توی تاپیک گشتم چیزی پیدا نکردم

با تشکر

aminkm
29-04-2014, 11:24
سلام مهندس خسته نباشید من دارم یک lcd طراحی می کنم با lpc3250 میخوام اگرلطف کنین برنامه نوشته شده و شماتیک pcb را بذارین

jonbakhsh
01-05-2014, 15:12
سلام دوستان و اساتید عزیز،
میخواستم ببینم کسی نتونسته با این lcd فارسی نویسی انجام بده هنوز؟
من توی تاپیک گشتم چیزی پیدا نکردم

با تشکر

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

sadmonew
01-05-2014, 19:32
سلام مهندس خسته نباشید من دارم یک lcd طراحی می کنم با lpc3250 میخوام اگرلطف کنین برنامه نوشته شده و شماتیک pcb را بذارین
سلام مهندس
اول از همه ورودت رو به اين انجمن خوش امد ميگم.
اين تاپيك راه اندازي SSd1963 با ميكروي STM32 پس ارتباطي به سوال شما نداره. شما ميخواين با LPC كار كنين. من اطلاعات زيادي در مورد كار با LPc ندارم.
اگه فقط فايل PCB و شماتيك ميخواين كه تو صفحات اول يا دوم قرار دادم

موفق باشيم

mohammad_6910
27-06-2014, 19:36
سلام

دوستان گرامی، من قصد دارم LCD 7inch رو از طریق ای سی درایور SSD1963 با میکروکنترلرAT91SAM7X256 راه اندازی کنم، دوستان اگر هدرفایلی برای این کار دارند ممنون میشم روی سایت قرار بدند.

mohammad_6910
27-06-2014, 23:22
با سلام خدمت همه ی دوستان بخصوص آقای صادق محمدی عزیز
من برد درایور 7اینچ فروشگاه رو خریداری کردم، این برد فقط 16 تا پایه برای دیتا داره، یعنی فقط میتونم اون رو تو مد 16بیتی درایو کنم. آیا برای اینکار باید تغییری تو کدی که آقا صادق زحمت کشیدن و تو فروم گذاشتن بدم؟
من میخام اونو با میکروکنترلرat91sam7x256 درایو کنم، متاسفانه هدری آماده برای این میکروکنترلر پیدا نکردم و قصد دارم هدر آقا صادق رو برای این میکرو ویرایش کنم، آیا فقط تغییر دستورات ورودی کافیه یا باید تغییرات خاص دیگه ای هم بدم؟
پیشاپیش ممنون

sadmonew
04-07-2014, 11:09
با سلام خدمت همه ی دوستان بخصوص آقای صادق محمدی عزیز
من برد درایور 7اینچ فروشگاه رو خریداری کردم، این برد فقط 16 تا پایه برای دیتا داره، یعنی فقط میتونم اون رو تو مد 16بیتی درایو کنم. آیا برای اینکار باید تغییری تو کدی که آقا صادق زحمت کشیدن و تو فروم گذاشتن بدم؟
من میخام اونو با میکروکنترلرat91sam7x256 درایو کنم، متاسفانه هدری آماده برای این میکروکنترلر پیدا نکردم و قصد دارم هدر آقا صادق رو برای این میکرو ویرایش کنم، آیا فقط تغییر دستورات ورودی کافیه یا باید تغییرات خاص دیگه ای هم بدم؟
پیشاپیش ممنون
سلام مهندس
من یادمه یکی از دوستان زحمت اینکارو کشیدن و برای AT91sam تغییرش دادن. لطفا" تو انجمن سرچ کنید قطعا" نتیجه می گیرید.

موفق باشیم.

mohammad_6910
04-07-2014, 19:36
سلام مهندس
من یادمه یکی از دوستان زحمت اینکارو کشیدن و برای AT91sam تغییرش دادن. لطفا" تو انجمن سرچ کنید قطعا" نتیجه می گیرید.

موفق باشیم.

مهندس جان من هرچقدر گشتم نتونستم پیدا کنم، لطف میکنی لینکش رو برام بذاری. ممنون

mzarkoob
04-07-2014, 20:41
سلام
با همان سمپل lpc1768 برای 4.3 اینچ و تغییرات در رجیسترهای gpio ساده تر می توان این tft lcd را با stm32 راه اندازی کرد
سمپل همراه برد mini stm که با یه درایور دیگه هست برای ال سی دی 4.3 اینچ

ali222333
06-07-2014, 21:16
سلام به دوستان
من ال سی دی 4.3 اینچ و درایورش رو خریداری کردم
با ای وی ار و ایکمس مگا دارم کار میکنم
الان مشکلم اینه که که تصویر این شکلی میشه و ایا مشکل کانفیگ اس اس دی هستش؟
اگه هست راهنمایی کنید که مال کدوم رجیسترشه.... تشکر.
تصویر رو با هر رنگی که پاک میکنم فقط یه تغیرراتی تو درجه روشنایی رنگا ایجاد میشه و پس زمینه همین شکلی میمونه

7827

ali222333
08-07-2014, 00:52
سلام دوستان ممنون که جواب دادین...
78317828
هر جوری بود درستش کردم ولی اگه راهنمایی میکردید شاید زودتر راه میافتاد....

mohammad_6910
10-07-2014, 22:59
سلام دوستان ممنون که جواب دادین...
78317828
هر جوری بود درستش کردم ولی اگه راهنمایی میکردید شاید زودتر راه میافتاد....

سلام
مهندس، لطفا اگر امکان داره کدت رو بذار روی سایت چون من تصمیم دارم با AT91sam7 راه بندازم ،انشاالله بعد از اینکه تبدیلش کردم میذارم رو سایت.
تشکر

gbg
30-07-2014, 15:25
سلام
مدار
tps61040dbvr برای lcd4.3 چط.ریه؟

sadmonew
31-07-2014, 00:35
سلام
مدار
tps61040dbvr برای lcd4.3 چط.ریه؟



سلام مهندس
از این فایل PDF استفاده کن.
فقط دقت کن تغذیه قسمت LED backlight تو حالت نرمال 16 ولت هست.

gbg
31-07-2014, 01:13
سلام مهندس
از این فایل PDF استفاده کن.
فقط دقت کن تغذیه قسمت LED backlight تو حالت نرمال 16 ولت هست.

ممنون من می خوام ورودی 3.3 بدم نه 5 ولت

sadmonew
31-07-2014, 01:22
ممنون من می خوام ورودی 3.3 بدم نه 5 ولت
مشکلی نیست مهندس، محدوده ولتاژ ورودی این آیسی مبدل ولتاژ، 1.8 تا 7 ولت هست.
تو صفحات آخر دیتاشیت نحوه محاسبه ولتاژ خروجی رو کامل توضیح داده.

gbg
31-07-2014, 03:23
مشکلی نیست مهندس، محدوده ولتاژ ورودی این آیسی مبدل ولتاژ، 1.8 تا 7 ولت هست.
تو صفحات آخر دیتاشیت نحوه محاسبه ولتاژ خروجی رو کامل توضیح داده.
من نتونستم پیدا کنم
توش مدارهای متفاوتی کشیده ولی نحوه محاسبه رو پیدا نکردم
بعد ولتاژ بکلایت lcd 4.3 داخل فروشگاه چقدره؟

amir8668
09-08-2014, 05:27
سلام دوستان
من درایور 4.3 اینچ رو از کویر خریداری کردم و باهاش کار کردم، الان برا یه پروژه یه برد زدم که میکرو و درایور تو یه برد باشه، مونتاژ کردم، ال سی دی راه افتاد، اما با ADS7843 مشکل داره، تا نصف صفحه بیشتر جواب نمیده!!!!ینی تو ال سی دی که 480*272 هس، از 0تا 480 مشکلی نداره، ولی از 0تا 136 بیشتر جواب نمیده، از 136تا 272 خیلی دیر عمل میکنه
کسی میدونه مشکل چیه؟
توی برد کویر از xpt2046 استفاده کرده،توابعش با ADS7843 فرق داره؟تغییراتی باید بدم؟

amir8668
09-08-2014, 07:18
سلام
مدار
tps61040dbvr برای lcd4.3 چط.ریه؟




من از مداری که توی شماتیک برد درایور کویر بود استفاده کردم، جواب داد، ولتاژش 28 ولته
7978

gbg
09-08-2014, 18:51
حول کردم دکمه تشکر رو پیدا نمی کردم :d
28 یا 16؟
یکی از دوستان گفت برای 4.3 مقدارش 16 هستش

amir8668
09-08-2014, 20:14
سلام دوستان
من درایور 4.3 اینچ رو از کویر خریداری کردم و باهاش کار کردم، الان برا یه پروژه یه برد زدم که میکرو و درایور تو یه برد باشه، مونتاژ کردم، ال سی دی راه افتاد، اما با ADS7843 مشکل داره، تا نصف صفحه بیشتر جواب نمیده!!!!ینی تو ال سی دی که 480*272 هس، از 0تا 480 مشکلی نداره، ولی از 0تا 136 بیشتر جواب نمیده، از 136تا 272 خیلی دیر عمل میکنه
کسی میدونه مشکل چیه؟
توی برد کویر از xpt2046 استفاده کرده،توابعش با ADS7843 فرق داره؟تغییراتی باید بدم؟

آقا مشکل نرم افزاری بود، حل شد!! دلیلشو نمیدونم، ینی پیگیرش نشدم، اما حل شد!

- - - Updated - - -


حول کردم دکمه تشکر رو پیدا نمی کردم :d
28 یا 16؟
یکی از دوستان گفت برای 4.3 مقدارش 16 هستش

والا من زنر 28 گذاشتم، داره کار میکنه!!!ال سی دی هم 4.3 هست، از کویر گرفتم
خود برد درایور کویر حدود 30 ولته!!!

gbg
11-08-2014, 16:29
کاربرد jp3 و bl adj چی هستش؟

amir8668
14-08-2014, 23:35
کاربرد jp3 و bl adj چی هستش؟

شماتیک بردی که زدم اینه، ترکیبی از شماتیک های موجود در این تاپیک و شماتیک برد درایور کویر و...
فقط تو قسمت تغذیه از lm2576 استفاده کردم که برای قسمت های دیگه لازم داشتم، اگه نیاز به جریان بالا ندارید همون asm1117 3.3v استفاده کنید
جامپرا هم برا انتخاب نوع راه اندازی بک لایت هستند، در حالت ساده jp3 متصل باشه ال سی دی راه میافته.
البته jp5 هم باید وصل باشه.

167036
24-10-2014, 10:08
سلام دوستان عزيز
اينم فايل هدر براي راه اندازي ssd1963 با ميكروي stm32:

سلام هدر فایل ssd1963 برای AT91SAM7x داری؟ اگه داشته باشی خیلی عالیه

sadmonew
25-10-2014, 10:35
سلام هدر فایل ssd1963 برای AT91SAM7x داری؟ اگه داشته باشی خیلی عالیه
سلام مهندس
همونطور كه قبلا" هم خدمت دوستان عرض كردم(پست 301)، يكي از اعضاي انجمن اين كارو انجام داده، اما اسمش رو خاطرم نيست.

167036
19-11-2014, 10:04
سلام مهندس
همونطور كه قبلا" هم خدمت دوستان عرض كردم(پست 301)، يكي از اعضاي انجمن اين كارو انجام داده، اما اسمش رو خاطرم نيست.
سلام مهندس آره گفته شما درست بود ولی اون نیمه تموم گذاشته ولی خودم با اینکه اطلاع کمی دارم شروع می کنم من عادت ندارم کارو ناقص بذارم کنار چون کارم رو با بسم الله شروع میکنم.

و ممنون از راهنمایی های شما اساتیدعزیز

vahideh58
17-12-2014, 13:39
سلام
با تشکر از مطالب ارایه داده شده
من یک سوال در مورد برد stm32 v3.1 و درایور ssd1963 با برد راه انداز wb-4.3 inch rev 2.0 که از فروشگاه کویر خریداری کردم داشتم لطفا مرا راهنمایی کنید
سوال من در مورد تابع get_point می باشد که با این تابع می خواهم ر نگ پیکسل مورد نظر را از lcd بخوانم ولی توابعی که برایم به هنگام خرید محصول برایم ارایه داده اند کار نمی کنند و همواره خروجی 0 می دهند لطفا این تابع که با این برد بتواند کار کند را برایم ارایه دهید یا راهنمایی کنید.
با تشکر

sadmonew
19-12-2014, 18:14
سلام
با تشکر از مطالب ارایه داده شده
من یک سوال در مورد برد stm32 v3.1 و درایور ssd1963 با برد راه انداز wb-4.3 inch rev 2.0 که از فروشگاه کویر خریداری کردم داشتم لطفا مرا راهنمایی کنید
سوال من در مورد تابع get_point می باشد که با این تابع می خواهم ر نگ پیکسل مورد نظر را از lcd بخوانم ولی توابعی که برایم به هنگام خرید محصول برایم ارایه داده اند کار نمی کنند و همواره خروجی 0 می دهند لطفا این تابع که با این برد بتواند کار کند را برایم ارایه دهید یا راهنمایی کنید.
با تشکر
سلام مهندس
خروجی هر رنگی را رو صفحه هست 0 نشون میده؟ یا فقط رنگ سیاه رو 0 نشون میده؟

mahrrahm
18-01-2015, 13:14
سلام دوستان گرامی
کسی تا حالا از lpc1788 استفاده نکرده
بنظر با اون خیلی ساده تر بشه ال سی دی درایو کرد

1112
18-01-2015, 20:29
سلام دوستان گرامی
کسی تا حالا از lpc1788 استفاده نکرده
بنظر با اون خیلی ساده تر بشه ال سی دی درایو کرد
سلام
منم کنجکاور ال سی دی ده اینچ راه اندازی کنم
یعنی با این میکرو بدون درایور
ssd1963 میشه راه اندازی کرد؟

mahrrahm
20-01-2015, 23:15
سلام
منم کنجکاور ال سی دی ده اینچ راه اندازی کنم
یعنی با این میکرو بدون درایور
ssd1963
میشه راه اندازی کرد؟


بله احساس میکنم که شدنی باشه

wantedboy
21-07-2015, 18:28
سلام دوستان عزيز
اينم فايل هدر براي راه اندازي ssd1963 با ميكروي stm32:
سلام دوستان
آقا صادق من با این کد lcd راه اندازی کردم فقط یه مشکلی در رنگ ها دارم داخل مد 24 رنگ سفید دارم ولی رنگ مشکی و بعضی رنگ رو ندارم مثلا 0xffffff که میدم رنگ سفید میده اما 0x000000 رنگ قرمز تیره میده و داخل مد 18 بیت حالت اول رنگ آّی کم رنگ و حالت دوم مشکشی من پاک گیج شدم.به نظرتوتن مشکل کجاست من چندتا سورس چک کردم همین مشکل هست.
لطفا راهنمایی کنید
مرسی

mojalan
15-08-2015, 16:09
سلام. من با سورس کد شما ال سی دی رو ره انداختم. اما الان که میخوام خودم شماتیک رو بزنم ؛ توی شماتیکهایی که شما در صفحه اول لینکشو گذاشتین اختلاف هست(که خودتون هم توضیح دادین از تریکیب 3 فایل شماتیک نهایی طراحی شده). در صورت امکان شماتیک نهایی رو اینجا قرار بدین

0370791576
01-09-2015, 02:27
سلام
من میخوام یک ال سی دی ۷ اینچی رو با درایورش ssd1963 با fpgaراه اندازی کنم و فقط میخوام بهش آدرس پیکسل بدم بگم با چه مقدار رنگی روشن بشه
کسی میتونه لطف کنه کمکی برسونه؟
با تشکر

Sent from my K00E using Tapatalk

afsharizqi
15-09-2015, 14:55
سلام دوستان عزيزم:hi:
اينم فايل PCB كه تو Altium طراحيش كردم(به صورت دستي نه Autoroute)، ميتونيد دانلود كنيد.:0013:

----------------------------------
سلام
من کل این چند ده صفحه رو خوندم
واقعا دستتون درد نکنه
خیلی زحمت کشیدین
من می خواستم یه ال سی دی 7 اینچ رو با راه اندازی کنم و از تاچ هم استفاده کنم. این برد مدار چاپی رو بفرستم برای چاپ خوبه یا اینکه ورژن جدیدتری هست؟ قضیه اون پرش تصویر و وز وز کردن توی این مدار چاپی مرتفع شده ؟
ممنون از همگی

Greatal
16-10-2015, 15:15
با سلام خدمت دوستان گرامی و جناب sadmonew بنده چند وقت پیش از جوان یه ال سی دی 5 اینچی خریدم و تازه احتیاج به راه اندازیش پیدا کردم حالا مشکل اینجاست که تو هدر های موجود دوستان یه پین A0 وجود داره و یه RST حالا مشکل من اینجاست که رو برد من نه A0 هست هم اینکه دو تا پیم یکی rs هست یکی rest اگر امکان داره راهنمایی کنید این هم لینک دیتا شیت از سایت جوان
Document Moved (You can see links before reply) و اسم خود محصول هنم هست LCD 5.0 inch اگر لازم بود مسقیم سرچ کنید ممنون می شم اگر راهنمایی کنید
ضمنن مد ال سی دی ظاهرا 8080 هستش

Greatal
20-10-2015, 13:30
با سلام کسی که کمک نکرد ولی این کد برای مد 8080 تقریبا جواب داده میزارمش شاید بدرد کسی بخوره


void SSD1963_WriteCommand(uint16_t commandToWrite)
{


SSD_CONTROL_PORT->BSRR=SSD_RD_PIN;
SSD_CONTROL_PORT->BRR=SSD_DC_PIN;
SSD_CONTROL_PORT->BRR=SSD_CS_PIN;
SSD_CONTROL_PORT->BRR=SSD_WR_PIN;
SSD_DATA_PORT_OUT(commandToWrite);



__nop();






SSD_CONTROL_PORT->BSRR=SSD_WR_PIN;
SSD_CONTROL_PORT->BSRR=SSD_DC_PIN;
SSD_CONTROL_PORT->BSRR=SSD_CS_PIN;


}
//================================================== ===========================
// Write data to SSD1963
//================================================== ===========================
void SSD1963_WriteData(uint16_t dataToWrite)
{
SSD_CONTROL_PORT->BSRR=SSD_RD_PIN;
SSD_CONTROL_PORT->BRR=SSD_CS_PIN;

SSD_CONTROL_PORT->BSRR=SSD_DC_PIN;

SSD_CONTROL_PORT->BRR=SSD_WR_PIN;
SSD_DATA_PORT_OUT( dataToWrite);
__nop();




SSD_CONTROL_PORT->BSRR=SSD_WR_PIN;
SSD_CONTROL_PORT->BRR=SSD_DC_PIN;
SSD_CONTROL_PORT->BSRR=SSD_CS_PIN;


}

wantedboy
07-11-2015, 18:01
سلام به همه دوستان
من lcd 7inch با دیسکاوریstm32f407 راه اندازی کردم اما رفرش تصویر معلومه.فکر کنم از تامینگاش باشه.لطفا کمک کنید بچه ها.
مرسی



//Set MN(multipliers) of PLL, VCO = crystal freq * (N+1)
//PLL freq = VCO/M with 250MHz < VCO < 800MHz
//The max PLL freq is around 120MHz. To obtain 120MHz as the PLL freq
Write_Cmd(0xE2); // Set PLL with OSC = 10MHz (hardware)
// Multiplier N = 35, VCO (>250MHz)= OSC*(N+1), VCO = 360MHz
Write_Dat(0x23);
Write_Dat(0x02); // Divider M = 2, PLL = 360/(M+1) = 120MHz
Write_Dat(0x54); // Validate M and N values
Write_Cmd(0xE0); // Start PLL command
Write_Dat(0x01); // enable PLL

LCD_Delay(1); // wait stablize
Write_Cmd(0xE0); // Start PLL command again
Write_Dat(0x03); // now, use PLL output as system clock
Write_Cmd(0x01); // Soft reset
LCD_Delay(10);
//Set LSHIFT freq, i.e. the DCLK with PLL freq 120MHz set previously
//Typical DCLK for TY700TFT800480 is 33.3MHz(datasheet), experiment shows 30MHz gives a stable result
//30MHz = 120MHz*(LCDC_FPR+1)/2^20
//LCDC_FPR = 262143 (0x3FFFF)
//Time per line = (DISP_HOR_RESOLUTION+DISP_HOR_PULSE_WIDTH+DISP_HOR _BACK_PORCH+DISP_HOR_FRONT_PORCH)/30 us = 1056/30 = 35.2us
Write_Cmd(0xE6);
Write_Dat(0x01);//0x04
Write_Dat(0x33);//0xff
Write_Dat(0x32);//0xff


//Set panel mode, varies from individual manufacturer
Write_Cmd(0xB0);
Write_Dat(0x10); // set 18-bit for 7" panel TY700TFT800480
Write_Dat(0x80); // set TTL mode
Write_Dat((DISP_HOR_RESOLUTION-1)>>8); //Set panel size
Write_Dat(DISP_HOR_RESOLUTION-1);
Write_Dat((DISP_VER_RESOLUTION-1)>>8);
Write_Dat(DISP_VER_RESOLUTION-1);
Write_Dat(0x00); //RGB sequence

//Set horizontal period
Write_Cmd(0xB4);
#define HT (DISP_HOR_RESOLUTION+DISP_HOR_PULSE_WIDTH+DISP_HOR _BACK_PORCH+DISP_HOR_FRONT_PORCH)
Write_Dat((HT-1)>>8);
Write_Dat(HT-1);
#define HPS (DISP_HOR_PULSE_WIDTH+DISP_HOR_BACK_PORCH)
Write_Dat((HPS-1)>>8);
Write_Dat(HPS-1);
Write_Dat(DISP_HOR_PULSE_WIDTH-1);
Write_Dat(0x00);
Write_Dat(0x00);
Write_Dat(0x00);
//Set vertical period
Write_Cmd(0xB6);
#define VT (DISP_VER_PULSE_WIDTH+DISP_VER_BACK_PORCH+DISP_VER _FRONT_PORCH+DISP_VER_RESOLUTION)
Write_Dat((VT-1)>>8);
Write_Dat(VT-1);
#define VSP (DISP_VER_PULSE_WIDTH+DISP_VER_BACK_PORCH)
Write_Dat((VSP-1)>>8);
Write_Dat(VSP-1);
Write_Dat(DISP_VER_PULSE_WIDTH-1);
Write_Dat(0x00);
Write_Dat(0x00);

//Set pixel format, i.e. the bpp
Write_Cmd(0x3A);
Write_Dat(0x55); // set 16bpp
//Set pixel data interface
Write_Cmd(0xF0);
Write_Dat(0x03); //16-bit(565 format) data for 16bpp PIC32MX only
//Write_Dat(0x00); //8-bit data for 16bpp, PIC24 series
Write_Cmd(0x36);
Write_Dat(0x02);
Write_Cmd(0x29); // Turn on display; show the image on display
// LCD_Clear(BLACK);
// LCD_Clear(BLACK);

wantedboy
08-11-2015, 13:35
سلام به همه دوستان
من lcd 7inch با دیسکاوریstm32f407 راه اندازی کردم اما رفرش تصویر معلومه.فکر کنم از تامینگاش باشه.لطفا کمک کنید بچه ها.
مرسی



//Set MN(multipliers) of PLL, VCO = crystal freq * (N+1)
//PLL freq = VCO/M with 250MHz < VCO < 800MHz
//The max PLL freq is around 120MHz. To obtain 120MHz as the PLL freq
Write_Cmd(0xE2); // Set PLL with OSC = 10MHz (hardware)
// Multiplier N = 35, VCO (>250MHz)= OSC*(N+1), VCO = 360MHz
Write_Dat(0x23);
Write_Dat(0x02); // Divider M = 2, PLL = 360/(M+1) = 120MHz
Write_Dat(0x54); // Validate M and N values
Write_Cmd(0xE0); // Start PLL command
Write_Dat(0x01); // enable PLL

LCD_Delay(1); // wait stablize
Write_Cmd(0xE0); // Start PLL command again
Write_Dat(0x03); // now, use PLL output as system clock
Write_Cmd(0x01); // Soft reset
LCD_Delay(10);
//Set LSHIFT freq, i.e. the DCLK with PLL freq 120MHz set previously
//Typical DCLK for TY700TFT800480 is 33.3MHz(datasheet), experiment shows 30MHz gives a stable result
//30MHz = 120MHz*(LCDC_FPR+1)/2^20
//LCDC_FPR = 262143 (0x3FFFF)
//Time per line = (DISP_HOR_RESOLUTION+DISP_HOR_PULSE_WIDTH+DISP_HOR _BACK_PORCH+DISP_HOR_FRONT_PORCH)/30 us = 1056/30 = 35.2us
Write_Cmd(0xE6);
Write_Dat(0x01);//0x04
Write_Dat(0x33);//0xff
Write_Dat(0x32);//0xff


//Set panel mode, varies from individual manufacturer
Write_Cmd(0xB0);
Write_Dat(0x10); // set 18-bit for 7" panel TY700TFT800480
Write_Dat(0x80); // set TTL mode
Write_Dat((DISP_HOR_RESOLUTION-1)>>8); //Set panel size
Write_Dat(DISP_HOR_RESOLUTION-1);
Write_Dat((DISP_VER_RESOLUTION-1)>>8);
Write_Dat(DISP_VER_RESOLUTION-1);
Write_Dat(0x00); //RGB sequence

//Set horizontal period
Write_Cmd(0xB4);
#define HT (DISP_HOR_RESOLUTION+DISP_HOR_PULSE_WIDTH+DISP_HOR _BACK_PORCH+DISP_HOR_FRONT_PORCH)
Write_Dat((HT-1)>>8);
Write_Dat(HT-1);
#define HPS (DISP_HOR_PULSE_WIDTH+DISP_HOR_BACK_PORCH)
Write_Dat((HPS-1)>>8);
Write_Dat(HPS-1);
Write_Dat(DISP_HOR_PULSE_WIDTH-1);
Write_Dat(0x00);
Write_Dat(0x00);
Write_Dat(0x00);
//Set vertical period
Write_Cmd(0xB6);
#define VT (DISP_VER_PULSE_WIDTH+DISP_VER_BACK_PORCH+DISP_VER _FRONT_PORCH+DISP_VER_RESOLUTION)
Write_Dat((VT-1)>>8);
Write_Dat(VT-1);
#define VSP (DISP_VER_PULSE_WIDTH+DISP_VER_BACK_PORCH)
Write_Dat((VSP-1)>>8);
Write_Dat(VSP-1);
Write_Dat(DISP_VER_PULSE_WIDTH-1);
Write_Dat(0x00);
Write_Dat(0x00);

//Set pixel format, i.e. the bpp
Write_Cmd(0x3A);
Write_Dat(0x55); // set 16bpp
//Set pixel data interface
Write_Cmd(0xF0);
Write_Dat(0x03); //16-bit(565 format) data for 16bpp PIC32MX only
//Write_Dat(0x00); //8-bit data for 16bpp, PIC24 series
Write_Cmd(0x36);
Write_Dat(0x02);
Write_Cmd(0x29); // Turn on display; show the image on display
// LCD_Clear(BLACK);
// LCD_Clear(BLACK);


دوستان کمک کنید لطفا

wantedboy
15-11-2015, 18:49
یعنی تا حالا مشکل رفرش تصویر نداشته؟؟؟؟!!!

mrm
15-11-2015, 19:39
این تابع init هست که من ازش جواب گرفتم. هرچند به نظر میاد کلاک ال سی دی درست تنظیم شده.
کلاک ارم رو درست کانفیگ کردید؟





#ifdef TFT800480
#define TFT_WIDTH 800ULL
#define TFT_HSYNC_BACK_PORCH 210LL
#define TFT_HSYNC_FRONT_PORCH 45ULL
#define TFT_HSYNC_PULSE 1ULL

#define TFT_HEIGHT 480ULL
#define TFT_VSYNC_BACK_PORCH 34ULL
#define TFT_VSYNC_FRONT_PORCH 10ULL
#define TFT_VSYNC_PULSE 10ULL
#endif


#define TFT_HSYNC_PERIOD (TFT_HSYNC_PULSE + TFT_HSYNC_BACK_PORCH + TFT_WIDTH + TFT_HSYNC_FRONT_PORCH)
#define TFT_VSYNC_PERIOD (TFT_VSYNC_PULSE + TFT_VSYNC_BACK_PORCH + TFT_HEIGHT + TFT_VSYNC_FRONT_PORCH)

#define TFT_PCLK (TFT_HSYNC_PERIOD * TFT_VSYNC_PERIOD * TFT_FPS)
//#define TFT_PCLK (928 * 525 * 60)
#define LCD_FPR ((TFT_PCLK * 1048576)/100000000)



void SSD1963_Init (void)
{
volatile unsigned int dly;
//SSD1963_CTRLPORT->BRR = SSD1963_PIN_RST;
GPIO_ResetBits(GPIOB,SSD1963_PIN_RST);
for(dly = 0; dly < 1000; dly++);
//SSD1963_CTRLPORT->BSRR = SSD1963_PIN_RST;
GPIO_SetBits(GPIOB,SSD1963_PIN_RST);
for(dly = 0; dly < 1000; dly++);

SSD1963_WriteCommand(SSD1963_SOFT_RESET);
for(dly = 0; dly < 1000; dly++);
SSD1963_WriteCommand(SSD1963_SET_PLL_MN);
SSD1963_WriteData(49); // PLLclk = REFclk * 50 (500MHz)
SSD1963_WriteData(4); // SYSclk = PLLclk / 5 (100MHz)
SSD1963_WriteData(4); // dummy

SSD1963_WriteCommand(SSD1963_SET_PLL);
SSD1963_WriteData(0x01);

for(dly = 0; dly < 100000; dly++);

SSD1963_WriteCommand(SSD1963_SET_PLL);
SSD1963_WriteData(0x03);

SSD1963_WriteCommand(SSD1963_SET_LCD_MODE);
SSD1963_WriteData(0x0C);
SSD1963_WriteData(0x00);
SSD1963_WriteData(mHIGH((TFT_WIDTH-1)));
SSD1963_WriteData(mLOW((TFT_WIDTH-1)));
SSD1963_WriteData(mHIGH((TFT_HEIGHT-1)));
SSD1963_WriteData(mLOW((TFT_HEIGHT-1)));
SSD1963_WriteData(0);

SSD1963_WriteCommand(SSD1963_SET_PIXEL_DATA_INTERF ACE);
SSD1963_WriteData(SSD1963_PDI_16BIT565);

SSD1963_WriteCommand(SSD1963_SET_LSHIFT_FREQ);
SSD1963_WriteData((LCD_FPR >> 16) & 0xFF);
SSD1963_WriteData((LCD_FPR >> 8) & 0xFF);
SSD1963_WriteData(LCD_FPR & 0xFF);

SSD1963_WriteCommand(SSD1963_SET_HORI_PERIOD);
SSD1963_WriteData(mHIGH(TFT_HSYNC_PERIOD));
SSD1963_WriteData(mLOW(TFT_HSYNC_PERIOD));
SSD1963_WriteData(mHIGH((TFT_HSYNC_PULSE + TFT_HSYNC_BACK_PORCH)));
SSD1963_WriteData(mLOW((TFT_HSYNC_PULSE + TFT_HSYNC_BACK_PORCH)));
SSD1963_WriteData(TFT_HSYNC_PULSE);
SSD1963_WriteData(0x00);
SSD1963_WriteData(0x00);
SSD1963_WriteData(0x00);

SSD1963_WriteCommand(SSD1963_SET_VERT_PERIOD);
SSD1963_WriteData(mHIGH(TFT_VSYNC_PERIOD));
SSD1963_WriteData(mLOW(TFT_VSYNC_PERIOD));
SSD1963_WriteData(mHIGH((TFT_VSYNC_PULSE + TFT_VSYNC_BACK_PORCH)));
SSD1963_WriteData(mLOW((TFT_VSYNC_PULSE + TFT_VSYNC_BACK_PORCH)));
SSD1963_WriteData(TFT_VSYNC_PULSE);
SSD1963_WriteData(0x00);
SSD1963_WriteData(0x00);

SSD1963_WriteCommand(SSD1963_SET_DISPLAY_ON); //SET display on
}

wantedboy
16-11-2015, 11:01
سلام
مرسی از کمکتون
میکرو که استفاده می کنم stm32f407vgt6 هست.lcd رو روی مد 16 بیت راه ندازی کردم.
کدی که قرار دادید ای 16 بیته؟ mHIGH و mLOW تعریف کردین.

mrm
16-11-2015, 17:48
اره در مد 16 بیتی راه اندازی کردم.
شما از تنظیمات کلاک ارم مطمئن هستید؟


#define mHIGH(x) (x >> 8)
#define mLOW(x) (x & 0xFF)

kamikazi
16-11-2015, 20:11
سلام چرا از قابلیتfsmc میکرو استفاده نکردین؟ من خیلی راحت مثال السیدی 3.2 که با fsmc نوشته شده بود رو هدیتش کردم و السیدی 4.3 رو باهاش راه انداختم راه اندازی با gpio با این میکرو منطقی نیست مثال راه اندازی السیدی از طریق fsmc برای این میکرو تو نت فراوونه پیدا نکردین بگم بهتون

wantedboy
21-11-2015, 14:43
سلام چرا از قابلیتfsmc میکرو استفاده نکردین؟ من خیلی راحت مثال السیدی 3.2 که با fsmc نوشته شده بود رو هدیتش کردم و السیدی 4.3 رو باهاش راه انداختم راه اندازی با gpio با این میکرو منطقی نیست مثال راه اندازی السیدی از طریق fsmc برای این میکرو تو نت فراوونه پیدا نکردین بگم بهتون

سلام
برنامه ای پیدا نکردم اگه قرار بدید ممنون میشم

wantedboy
24-11-2015, 17:31
سلام
حسابی کلافه شدم هر کاربی کردم نشد لطف کمک کنید.کدی و سورسی آماده دارید برام بزارید فقط اینکه lcd روی مد 16 بیت راه انداختم.
ممنون

kamikazi
25-11-2015, 10:40
شما دوست عزیز یه زحمتی به خودتون بدین یه سرچ کنید دیگه؟؟!!! تو همون بار اول میگید هیچی گیرم نیومد مگه میشه مگه داریم؟؟؟؟
شما برو سایت ویوشر تموم مثالهاش موجوده اینم لینکش مثالهاش همین مثال السیدی شو ادیت کنید برای هر مدل ال سی دی با FSMC هم هستش You can see links before reply

kamikazi
25-11-2015, 11:08
شما دوست عزیز یه زحمتی به خودتون بدین یه سرچ کنید دیگه؟؟!!! تو همون بار اول میگید هیچی گیرم نیومد مگه میشه مگه داریم؟؟؟؟
شما برو سایت ویوشر تموم مثالهاش موجوده اینم لینکش مثالهاش همین مثال السیدی شو ادیت کنید برای هر مدل ال سی دی با FSMC هم هستش You can see links before reply

wantedboy
25-11-2015, 13:44
شما دوست عزیز یه زحمتی به خودتون بدین یه سرچ کنید دیگه؟؟!!! تو همون بار اول میگید هیچی گیرم نیومد مگه میشه مگه داریم؟؟؟؟
شما برو سایت ویوشر تموم مثالهاش موجوده اینم لینکش مثالهاش همین مثال السیدی شو ادیت کنید برای هر مدل ال سی دی با FSMC هم هستش You can see links before reply
سلام
اگه سرچ نداده بودم که پست قرارنمی دادم . هرچی پیدا کردم یا اصلا جواب نمی داد یا اگه هم میداد فقط یه صفحه بالا می اومد با رنگ های اشتباه.برای همین گفتم قرار بدید چون قبلا حسابی گشته بودم.
مرسی از لینک قرار دادید.

REZA7232
18-10-2016, 15:29
سلام دوستان .
من قصد دارم ssd1963 رو روی pcb به میکرو متصل کنم و نیاز دارم که یه شماتیک از نحوه ی اتصال اون به میکرو و پاور و دیگر قسمت هاش دارم. چیزی شبیه به ماژول درایور همین قطعه .اگر کسی این کارو قبلا انجام داده بتونه شماتیکش رو قرار بده نه pcb ممنون میشم کمک کنه

REZA7232
20-10-2016, 15:27
امکانش هست شماتیک رو توی آلتیوم قرار بدید؟ممنون

abarnic
25-11-2016, 13:59
سلام
ممنون از همه ی دوستان
بنده میخوام این ال سی دی رو به صورت 16 بیتی و با کتابخونه ی حل راه بندازم
از هدر فایلایی که تو سایت هست استفاده کردم اما میکرو هیچ پینی رو تغییر نمیده تا دیتایی بفرسته رو ال سی دی
از رجیستر brr هم ایراد میگیره
فکر میکنم اصلا از gpio استفاده نمیکنه
ممنون میشم کمک کنید خیلی ضروریه

abarnic
25-11-2016, 17:32
سلام
ممنون از همه ی دوستان
بنده میخوام این ال سی دی رو به صورت 16 بیتی و با کتابخونه ی حل راه بندازم
از هدر فایلایی که تو سایت هست استفاده کردم اما میکرو هیچ پینی رو تغییر نمیده تا دیتایی بفرسته رو ال سی دی
از رجیستر brr هم ایراد میگیره
فکر میکنم اصلا از gpio استفاده نمیکنه
ممنون میشم کمک کنید خیلی ضروریه

ممنون میشم ی نفر کمک کنه

majid_valentine
17-02-2017, 02:01
سلام دوستان بنده یه برد استارتر stm32f103vet6 و یه ال سیدی 4.3 از کویر خریداری کردم.اگه امکانش هست از مهندسین یه برنامه آماده برای شروع کار برام قرار بدید خیلی ممنون میشم.

mzarkoob
17-02-2017, 11:44
سلام
همراه برد مثال های راه اندازی هست.
اما اگر یک مثال ساده blinly (You can see links before reply) بخواهید ضمیمه شده است.

majid_valentine
17-02-2017, 14:09
سلام
همراه برد مثال های راه اندازی هست.
اما اگر یک مثال ساده blinly (You can see links before reply) بخواهید ضمیمه شده است.

سلام تشکر از پاسختون. از تمام امکانات برد شامل can و سریال adc و.... استفاده کردم و آشنا هستم. یه پروژه کامل برا راه اندازی tft lcd 4.3 اینچ می خواستم با این برد. با emwin یا هر لیب دیگه.ممنونم دوست عزیز

mzarkoob
17-02-2017, 14:12
فکر کنم یک سمپل راه انداز با مد fsmc هست برای راه اندازی ال سی دی
نیست!؟

majid_valentine
18-02-2017, 22:14
سلام.آقا راه افتاد ولی back light ال سی دی خیلی کم نوره اصلا مشخص نیست.pwm رو تغییر دادم بهتر شد ولی درست نشد. این ال سی دی 4.3 اینچ که از کویر خریدم ظاهرا بک لایتش ولتاژه 24 می خواد کانفیگ آی سی راه انداز back light هم دقیقا مثل دیتا شیت انجام نداده!!! دوستان کسی با این مشکل مواجه شده؟ چیکارش کنم؟
You can see links before reply
اینم مشخصات back light از روی دیتا شیت LCD من ولتاژ 20.9 رو روی پای لایت ال سی دی میبینم ولی نور صفحه خیلی کمه!!! مشکل کجاست؟
You can see links before reply

majid_valentine
18-02-2017, 22:41
دوستان کامنت های مثال های برد کویر فونتش چیه؟؟؟کامنتا رو درهم میبینم!!!! هر چی فونت تست کردم نتونستم پیداش کنم!!!
تشکر
یا علی

mzarkoob
19-02-2017, 18:58
عکسش بذارید ببینیم چی میبینید

majid_valentine
20-02-2017, 00:14
توی اداره راه انداختم نمیتونم عکس بزارم. درایور کم میاره.وقتی ولتاژ ثابت 22 میدم پایه LED همه چیز خوبه.
یه سوال دیگه؟؟؟
uos بهتره یا RTX خود کیل؟
کدوم سبک تر و بدون باگ تره؟
من همیشه RTX استفاده می کردم.ولی برا راه اندازی این ال سی دی از uos استفاده کردم طبق سمپل هایی که گیر آوردم. الان سوال برام پیش آمده!!!
کسی تجربه استفاده از هر دورو نداره؟
تشکر
یا علی

majid_valentine
22-02-2017, 23:19
حل شد مشکلات.دوستان ...
------------------------------
مهندس موردی هست با خود پشتیبانی فروشگاه تماس بگیرید.

majid_valentine
26-02-2017, 23:41
سلام به همگی.
دوستان این ال سی دی LQ035NC111 از سایت کویرو می خوام خریداری کنم و با ssd1963 و به صورت 18 بیتی راه اندازی کنم.یک مدار مظمئن برای راه اندازی پیشنهاد میدید؟؟؟؟؟
4.3 هدزا رو هیچ مشکلی نداشتم راه افتاده. این یکی پایه هاش متفاوته کمی و توی دیتا شیت اشاره ای نشده که میشه به صورت 18 بیتی راه اندازیش کرد؟
اگه بیت های کم ارزش RGB رو زمین کنم و بیت های sel0 و sel1 و sel2 ال سی دی رو زمین کنم مشکلی پیش نمیاد؟
یا باید حتما 24 بیتی راه اندازی کنم اینو؟
کار من نمایش فیلم نیست. عمق رنگ 18 بیت برام کافیه!!!
لطفا دوستانی که با این ال سی دی تجربه کار دارند راه نمایی کنند. دارم پی سی بیشو میزنم نمیتونم زمانو از دست بدم.

majid_valentine
16-09-2017, 00:08
سلام به دوستان پاسخ نده!!!
من برد راه انداز ال سی ذی 55 پین lq035nc111 رو چهار لایه زدم با بک لایت mp3203 و درایور ال سی ssd1963 و GUI مورد نظرم رو بدون مشکل و با سرعت قابل قبول با سیستم عامل RTX و firmware stemwin نوشته و تست کردم تایمینگ ها رو بت دقت طبق دیتا شیت ال سی دی تنظیم کرده .
متاسفاه چند تا مشکل برخوردم که یک ماه هست درگیرشم.دوستان اگه نظری دارند لطف کنند راهنمایی کنند ممنون میشم.
اول اینکه بنده برای تغذیه مدار از یک ایسی سوئیچینگ LM2596s استفاده کردم که ولتاژ ورودی بین 6 تا 45 ولت رو تبدیل به 5 ولت با سطح نویز کمتر از 50mv میکنه و lm1117 تغذیه 3.3 مورد مشابه تغذیه 1.2 ولت رو درست میکنن.
مشکلی که دارم اینکه گاهی در لحظه ی روشن شدن برد سرعت نمایش بشدت کم میشه یا درست init نمیشه ال سی دی.مثلا در 10 بار خاموش روشن کردن یکبار این اتفاق میافته و سیستم و کلا زیر سوال میبره. کارهایی که به ذهنم رسیدو انجام دادم مثلا در تابع اینیت ssd تاخیر ها رو کم و زیاد کردم یا پایه ssd رو قبل از اینیت کردن Toggle کردم و با تاخیر مظاعف تابع اینیت رو فراخوانی کردم یا کار های دیگه ولی متاسفانه مشکل حل نشده همچنان در ضمن مدار ریسیت میکرو که شامل یک مقاوکت 10k و یک خازن 100n هست رو هم به میکرو و هم به ssd دادم در کل هنوز مشکلم حل نشده.
مسکل بعدی اینکه من برای تغییر داینامیک بکلایت به صورت نرم افزاری به این صورت عمل کردم که مقدار پتانسومتر را با adc میکرو میخونم سپس تبدیل به عدد pwm اسکیل شده میکنم میدم و PWM رو آپدیت میکنم بعد از چند سیکل ssd قفل میکنه واسه همین مجبور شدم از تایمر میکرو در مد pwm کانال ppwm رو درست کنم. و بیخیال پایه pwm ssd شدم.دوستان برای حل مشکلات بخصوص مشکل اولی نظری دارید؟ چرا ssd گاهی کند boot میشه؟
راستی میکرو ای که استفاده کردم stm32f103vet6 هست.
تشکر
مدیر جان لطفا شمام پاسخ بدید تشکر.

mrm
16-09-2017, 01:31
سلام فکر نمیکنم چیزی به اسم کند بوت شدن ssd داشته باشیم.
شما مدار ریست ارم و 1963 رو از هم جدا کنید . خازن روی پایه های ریست رو بردارید ( خیلی وقت ها این خازن ها خودشون مشکل ساز هستن) و مقاومت رو میتونید 4.7کیلو بزارید.(پول اپ رو قوی تر میکنید)
اگر مشکل حل نشد برید سراغ تایمینگ ها . کد رو بدون سیستم عامل تست کنید که میتونه از سیستم عامل هم باشه.
اینکه میگید بعد از اپدیت pwm ایسی هنگ میکنه همچین چیزی نداریم اگر مد پارالل باشه میکرو زمانی برای خوندن از 1963 صرف نمیکنه که بخواد هنگ کنه پس میتونه از سوِئیچ کردن تسک ها هم باشه.
به نظر میاد مشکل نرم افزاری باشه هر چند به نظرم گذاشتن خازن روی پایه میکرو خیلی جاها اشتباه هست.

majid_valentine
24-09-2017, 19:45
سلام،
ممنون از پاسختون دوست عزیز.
فکر نمیکنم از مدار ریست یا سیستم عامل باشه! اخه همون اول اینا به ذهنم رسید و مدار ریست رو جدا کردم!!!! الان چیزی که تقریبا مطمئن شدم اینه که زمان بوت میکرو زمان کافی برای رفتن روی کریستال خارجی و فرکانس عملکردی 72 مگاهرتز نداره و میره روی 8 مگ داخلی و نمایشو کند میکنه!!!! تام اوت تنظیم کلاک خارجی رو بیشتر کردم دقیقا احتمال کاهش پیدا کرد.یعنی هر از تقریبا 100 بار خاموش و روشن کردن خودشو نشون میده ولی به هرجهت مشکلم حل نشده کامل!!!! حدسم کیفیت پایین میکرو stm32f103vet6 هست.
از دو منبع خرید کردم کویر و eca هردو همینچور بودن ضمن اینکه گاهی وقتی آی سی رو عوض می کنم آیسی داغ می کنه زیادی!! از پی سی بی و مونتاژ مظمئنم همچین مشکلاتی رو اصلا با stmf4 نداشتم!

jonbakhsh
04-12-2017, 21:06
یه مشکلی گیر کردم در مورد مد fsmc
من برای اینکه به اون سرعت حد اکثر نرسیدم یکم اعداد رجیستر کم و زیاد کردم . سرعت عالی شد ولی بعضی مواقع صفحه سفید میشه شاید سه چهار روز بدون مشکل کار کنه ولی یک دفعه سفید میشه .
فکر میکنید نرم افزاری هست ؟؟؟
آیا راهی هست که میکرو بفهمه که lcd هنگ کرده چون میکرو کارش درست انجام میده .




/* Timing */
Timing.AddressSetupTime = 15;
Timing.AddressHoldTime = 15;
Timing.DataSetupTime = 125;
Timing.BusTurnAroundDuration = 15;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;

mzarkoob
05-12-2017, 20:08
شاید هنگ کرده باشه
مثلا میشه در جاهایی که قراره کل صفحه رفرش بشه قبلش یک بار تابع اینشیالیز یک بار دیگه اجرا بشه تا اگر موقعی هم هنگ کرد با اجرای مجدد اینیشیالیز در رفرش بعدی درست بشه. یا ...

jonbakhsh
06-12-2017, 16:04
تشکر . مشکل اینه که نمیدونم کی هنگ میکنه . تگه میشد توسط خواندن رجیستر ها فهمید که صفحه هنگ کرده این کارو میکردم.
کلا نمیدونم مشکل از ssd هست یا خود lcd ???

mzarkoob
06-12-2017, 22:58
کلا نمیدونم مشکل از ssd هست یا خود lcd ???
این جور مواقع می توان با چند برد یا برد درایو دیگه هم تست کرد.

jonbakhsh
06-12-2017, 23:55
3 تا برد دارم که هر 3 تای اون همینجوره .
من توی cube مد fsmc انتخاب میکنم خودش پورت هارو خروجی میکنه . برنامه هم درست کار میکنه .
توی تنظیم پورت ها نباید کاری بکنم ؟؟؟
این جور مشکلات چجوری میشه عیب یابی کرد . تجربه ای کسی داره .

mrm
07-12-2017, 00:52
فکر نمیکنم چیزی به اسم هنگ کردن ال سی دی و یا SSD وجود داشته باشه.
و اگر با چند تا برد تست کردید و همین مشکل رو داشتند پس به احتمال خیلی زیاد مشکل از کد هست.
حالا این هنگ کردن یعنی چی؟
hard fault
memory fault
و ...

اول باید ببینید میکرو وقتی هنگ میکنه داخل کدوم یکی از nmi ها متوقف میشه . و یا کجا گیر میکنه.اونوقت راحتر تر میشه مشکل رو حل کرد.
مثلا برنامه رو داخل دیباگر باز کنید و بزارید اجرا بشه وقتی هنگ کرد برنامه رو pause کنید و ببینید خط اجرا کجا هست و یا از طریق Call stack اخرین تابعی که باعث هنگی شده رو میشه فهمید.

jonbakhsh
07-12-2017, 09:16
برنامه که هنگ نمیکنه . اصلا هر جایی دلش خواست صفحه سفید میشه . ولی میکرو به کار خودش ادامه میده . مثل اینه که یه برد کرده باشی توی آب . اول صفحه برفکی میشه .
بعد برفک زیاد میشه تا صفحه سفید کامل بشه . ولی میکرو کار خودش انجام میده .

mzarkoob
07-12-2017, 19:49
هنگ کردن برنامه را که میشه با واتچ داگ حل کرد.
این جور که می فرمایند میکرو داره دیتا را میده ولی ال سی دی دیگه عمل نمی کنه.
خواندن دیتا از ای سی هم که فرمودید من ظاهرا دیده بودم میشه انجام داد. ولی بعد هر بار نوشتن باید فیدبک گرفت دید درست نوشته شده که این خودش زمان بر میشه.
اون پیشنهادی که کردم اجرا کردید نتیجش ببینید؟

jonbakhsh
08-12-2017, 21:17
مهندس یه مورد فراموش کردم بگم . قبلا lcd با GPIO راه اندازی کرده بودم بدون مشکل جواب میداداز وقتی که با FSMC راه اندازی کردم ظاهرا این مشکل پیش اومده
من این قسمت کد از یک جایی کپی کردم . فقط نفهمیدم اعدادتایمینگ ها روی چه حسابی هست ؟؟؟ با قرمز مشخص کردم . احتمالش هست مال این باشه ؟؟؟


hsram1.Instance = FSMC_NORSRAM_DEVICE;
hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
/* hsram1.Init */
hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
/* Timing */
Timing.AddressSetupTime = 3;
Timing.AddressHoldTime = 15;
Timing.DataSetupTime = 1;
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;

mzarkoob
09-12-2017, 00:44
این تایم را درست تنظیم نکنید با سرعت کمتری رفرش صفحه انجام می شود.
حالا شما این زمان را کمی کمتر کن ببین باز چطوره

jonbakhsh
09-12-2017, 09:15
ممنون تست میکنم .ولی نفهمیدم این تایم روی چه حسابی هست ؟؟؟ من 5 تا برد ssd1963 دارم . یکیش که انداخته بودم دور از این برد ssd1963 قرمز ها بود .فکر کردم سوخته
قبلا که درایوش کرده بودم صفحه رنگ هاش قاطی بود . ولی برد سبز ها این طوری نبود .با سرعت بالا تصویر عوض میکرد. دیشب یه تستی کردم و Timing.DataSetupTime = 1; عددشو از 1 به 35 تغییر دادم تا راه افتاد ولی با 1 جواب نداد البته سرعت نمایش خیلی کم شد .ولی با برد سبز ها این مشکل نداشت . هر دوتاش هم ssd1963 هست .

mzarkoob
12-12-2017, 00:34
فقط نفهمیدم اعدادتایمینگ ها روی چه حسابی هست ؟؟؟ با قرمز مشخص کردم . احتمالش هست مال این باشه ؟؟؟


/* Timing */
Timing.AddressSetupTime = 3;
Timing.AddressHoldTime = 15;
Timing.DataSetupTime = 1;
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;

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

sadmonew
12-12-2017, 23:00
سلام دوستان
یه پیشنهاد دارم واقعا حیفه وقت خودتونو رو SSD1963 تلف نکنید
به جاش یا از میکروی LPC1788 با رم مناسب یا از میکروی stm32f429xxxx با رم مناسب استفاده کنید که خودشون راه انداز السیدی داخلی دارن.

mzarkoob
12-12-2017, 23:06
بله واقعا اینکه خود میکرو یه کاری را انجام میده و نیاز به واسط نیست یه چیز دیگه هست ! :wink:
عملکرد ارسال دیتاش هم خیلی جالبه :
You can see links before reply


تفاوت بین ارسال یک پیکسل برروی TFT در میکروکنترلر LPC1788 و LPC1768
میکروکنترلر LPC1788 دارای کنترلر LCD داخلی
میکروکنترلر LPC1768 توسط درایو، به LCD متصل است.
تفاوت قابل تشخیص است!؟
Telegram: Contact @armeducation (You can see links before reply)

jonbakhsh
13-12-2017, 14:48
فعلا نمیتونم میکرو عوض کنم
تازه نمیدونم مشکل مال lcd هست یا ssd1963
ببینید من این مشکل پدرم در آورده


5 تا lcd4.3 اینچ دارم . 2 تاش از اون برد قرمز ها هست و 3تاش از برد سبز ها هستند که ازECA خریدم چند تا مشکل باهاشون دارم
قبلا که با GPIO درایوشون میکردم بدون مشکل کار میکردند فقط سرعت پایین بود حالا که از مد FSMC استفاده میکنم سرعت عالی شده ولی برد قرمز ها با حد اکثر سرعت کار نمیکنند و نمایشگر برفکی میشه ولی برد سبز ها نه
برد قرمز با این کد درست جواب میده ولی سرعت پایین




1
2
3
4
5
6
7
8

Timing.AddressSetupTime = 4;
Timing.AddressHoldTime = 2;
Timing.DataSetupTime = 40;
Timing.BusTurnAroundDuration = 125;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;








ولی برد سبز ها با این کد با سرعت بالا کار میکنه




1
2
3
4
5
6
7
8

Timing.AddressSetupTime = 4;
Timing.AddressHoldTime = 2;
Timing.DataSetupTime = 2;
Timing.BusTurnAroundDuration = 125;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;








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

مورد بعد که واقعا وقت منو گرفته و نتونستم بر طرفش کنم اینه که وسط کار SSD ظاهرا ریست میشه ؟؟؟صفحه شروع میکنه از کناره ها سفید شدن تا کامل صفحه میگیره و چون میکرو نمیتونه بفهمه که نمایشگر
هنگ کرده به کارش ادامه میده . معلوم هم نیست که کی این اتفاق میافته . تایمینگ ها هم خیلی بالا بردم که سرعت به اندازه GPIO ها بشه ولی باز این اتفاق میافته .
توی شبیه سازی هم کد ها درست ارسال میشه .کسی این مشکل با مد FSMC داشته ؟؟؟
این هم کد کانفیگ SSD



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

LCD_WriteCom(0x00E2);
LCD_WriteRAM(0x0023);
// Set PLL with OSC = 10MHz (hardware)
// Multiplier N = 35, VCO (>250MHz)= OSC*(N+1), VCO = 360MHz
LCD_WriteRAM(0x0001);
// Divider M = 2, PLL = 360/(M+1) = 120MHz
LCD_WriteRAM(0x0004);
// Validate M and N values

SSD1963_WriteCommand(SSD1963_SET_PLL_MN);
SSD1963_WriteData(0x1D); // PLLclk = REFclk * 30 (300MHz)
SSD1963_WriteData(0x02); // SYSclk = PLLclk / 3 (100MHz)
SSD1963_WriteData(0x54); // dummy

TimeDelay(1);
LCD_WriteCom(0x00E0); // PLL enable
LCD_WriteRAM(0x0001);
TimeDelay(1);
LCD_WriteCom(0x00E0);
LCD_WriteRAM(0x0003);
TimeDelay(1);
LCD_WriteCom(0x0001); // software reset
TimeDelay(1);
LCD_WriteCom(0x00E6);
LCD_WriteRAM(0x0004);
LCD_WriteRAM(0x0093);
LCD_WriteRAM(0x00e0);


LCD_WriteCom(0x00B0); //LCD SPECIFICATION
LCD_WriteRAM(0x0000);
LCD_WriteRAM(0x0000);
LCD_WriteRAM((HDP>>8)&0X00FF); //Set HDP
LCD_WriteRAM(HDP&0X00FF);
LCD_WriteRAM((VDP>>8)&0X00FF); //Set VDP
LCD_WriteRAM(VDP&0X00FF);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00B4); //HSYNC
LCD_WriteRAM((HT>>8)&0X00FF); //Set HT
LCD_WriteRAM(HT&0X00FF);
LCD_WriteRAM((HPS>>8)&0X00FF); //Set HPS
LCD_WriteRAM(HPS&0X00FF);
LCD_WriteRAM(HPW); //Set HPW
LCD_WriteRAM((LPS>>8)&0X00FF); //Set HPS
LCD_WriteRAM(LPS&0X00FF);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00B6); //VSYNC
LCD_WriteRAM((VT>>8)&0X00FF); //Set VT
LCD_WriteRAM(VT&0X00FF);
LCD_WriteRAM((VPS>>8)&0X00FF); //Set VPS
LCD_WriteRAM(VPS&0X00FF);
LCD_WriteRAM(VPW); //Set VPW
LCD_WriteRAM((FPS>>8)&0X00FF); //Set FPS
LCD_WriteRAM(FPS&0X00FF);
TimeDelay(1);


LCD_WriteCom(0x00BA);
LCD_WriteRAM(0x0005);//0x000F); //GPIO[3:0] out 1
TimeDelay(1);


LCD_WriteCom(0x00B8);
LCD_WriteRAM(0x0007); //GPIO3=input, GPIO[2:0]=output
LCD_WriteRAM(0x0001); //GPIO0 normal
TimeDelay(1);


LCD_WriteCom(0x0036); //rotation
LCD_WriteRAM(0x0008);
TimeDelay(1);


LCD_WriteCom(0x00F0); //pixel data interface
LCD_WriteRAM(0x0003);
TimeDelay(1);




TimeDelay(1);
LCD_WriteCom(0x0029); //display on
TimeDelay(1);


LCD_WriteCom(0x00BE); //set PWM for B/L
LCD_WriteRAM(0x0006);
LCD_WriteRAM(0x0080);
TimeDelay(1);

LCD_WriteRAM(0x0001);
LCD_WriteRAM(0x00f0);
LCD_WriteRAM(0x0000);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00d0);//??????????
LCD_WriteRAM(0x000d);
TimeDelay(1);








You can see links before reply
You can see links before reply
You can see links before reply
You can see links before reply
You can see links before reply


آخرش اینجوری میشه

mzarkoob
13-12-2017, 22:23
در مورد اینکه فرمودید با gpio سرعت کمه بله در این میکرو اگر بخواهید با gpio درایور ال سی دی کنترل کنید سرعت کمه.سرعت این را در برد stm32f103rb و stm32f107vc دیده ام.
در حالی که سرعت رفرش ال سی دی در LPC1768 که با gpio بود به مراتب بهتر بود!

You can see links before reply
یعنی اگر این مد FSMC در این میکرو نبود به درد کار با TFT LCD نمی خورد.
همین طور سرعت خواندن آن از sd با SPI نیز پایین بود. یعنی اگر این مد SDIO در این میکرو نبود خیلی به درد کار با SD برای سرعت بالا نمی خورد.

jonbakhsh
13-12-2017, 23:33
ممنون . نظر یا شک به چیزی ندارید که چرا در مد fsmc اینجوری میشه .

mrm
14-12-2017, 15:39
وقتی میگید برد سیزها به سرعت بالا درست کار میکنه ولی قرمزها نه احتمالا بدلیل اینه که پی سی بی برد قرمزها درست طراحی نشده و وقتی سرعت بالا میره
مشکلاتی مثل overshoot و crosstalk باشه. یک راه حل اینه که سرعت پین های میکرو رو کم کنید این جوری rise time زیاد میشه ولی crostalk و overshoot کم میشه.
حتی اگر برد ssd و برد st جدا هستند و شما از یک کابل فلت برای ارتباط این دو برد استفاده میکنید ، طول کابل و جنس کابل هم خیلی تاثیر داره داخل سرعت .
به نظرم بهترین راه پیدا کردن بهترین تایمینگ fsmc-ssd-lcd هست که مشکلی ایجاد نکنه.

mzarkoob
14-12-2017, 23:22
مهندس یک مورد در مورد سرعت
شما از همان سمپل همراه برد استفاده می کنید که در آن به این شکل عمل شده :

LCD_WriteRAM(LCD_BGR2RGB(Color)); در تابع LCD_Clear ؟

jonbakhsh
15-12-2017, 15:51
نه مهندس . این توابع من هست





#include "stm32f1xx_hal.h"
#include "font.h"
#include "hardware.h"
#include "ili932x.h"
#include "delay.h"






//#include "PE & EN font1.h"
//#include "FAmap.h"


int font_color,x_font,y_font;
char highlight,fa_num;
char effect = 0 , italic = 0;
unsigned int highlight_color;
/* Global Variables */
int x_base=0;


#define LCD_REG (*((volatile unsigned short *) 0x60000000)) /* RS = 0 */
#define LCD_RAM (*((volatile unsigned short *) 0x60020000)) /* RS = 1 */



#define u32 long
#define unit8_t char
#define uint8_t char
#define unit32_t long
#define uint32_t long
#define uint16_t int



unsigned int HDP=479;
unsigned int HT=531;
unsigned int HPS=43;
unsigned int LPS=8;
unsigned char HPW=10;
unsigned int VDP=271;


unsigned int VT=288;
unsigned int VPS=12;
unsigned int FPS=4;
unsigned char VPW=10;


uint16_t DeviceCode;










void WriteOneCharF4(int x, int y, u8 num, u16 PenColor)
{

u16 size = 16;
u16 temp;
u16 pos,t;

//num=num-' ';
for(pos=0;pos<size;pos++)
{
//temp=asc2_1608[num][pos]; //temp=mmb_1808[num][pos];
temp= image_code[num][pos];
for(t=0;t<size;t++)
{
if(temp&0x01) //if(temp&0x01)
{
LCD_DrawPixel(x+t , y+pos , PenColor);
}
temp>>=1;
}
}
}
////////////////////////////////////////////////////


void WriteOneChar(u16 x, u16 y, u8 num, u16 PenColor, u16 BackColor)
{
u8 size = 16;
u8 temp;
u8 pos,t;
num=num-' '; /*??????? */
for(pos=0;pos<size;pos++)
{
if(size==12)
temp=asc2_1206[num][pos];
else
temp=asc2_1608[num][pos];
for(t=0;t<size/2;t++)
{
if(temp&0x01)
{
LCD_DrawPixel(x+t, y+pos, PenColor); /*????? ???*/
}
else
LCD_DrawPixel(x+t, y+pos, BackColor); /*????? ???*/
temp>>=1;
}
}
}
////////////////////////////////////////////////////
void LCD_WR_REG(uint16_t LCD_Reg)
{
// RD_SET; /*???*/
// CS_CLR; /*??*/
// RS_CLR; /*0????*/
// DataToWrite(LCD_Reg);
// WR_CLR;
// WR_SET; /*?????*/
// CS_SET;
LCD_REG = LCD_Reg;

}
////////////////////////////////////////////////////
void LCD_WR_DATA(uint16_t LCD_Data)
{
// RD_SET; /*???*/
// CS_CLR;
// RS_SET; /*1????*/
// DataToWrite(LCD_Data);
// WR_CLR;
// WR_SET; /*?????*/
// CS_SET;
LCD_RAM = LCD_Data;

}


////////////////////////////////////////////////////
void lcd_goto_xy(int x,int y)
{
if((x >= TS_SIZE_X) || (x < 0))
{
x_font = 0;
x_base = 0;
}
else
{
x_font = x;
x_base = x;
}

if((y >= TS_SIZE_Y) || (y < 0))
y_font = 0;
else
y_font = y;
}


////////////////////////////////////////////////////
//void LCD_WriteReg2(uint16_t LCD_Reg ,uint16_t LCD_RegValue)
//{
//// RD_SET; /*???*/
//// CS_CLR; /*??*/
//// RS_CLR; /*0????*/
//// DataToWrite(LCD_Reg);
//// WR_CLR;
//// WR_SET; /*?????*/


//// RS_SET; /*1????*/
//// DataToWrite(LCD_RegValue);
//// WR_CLR;
//// WR_SET; /*?????*/
//// CS_SET;
//LCD_REG = LCD_Reg;
//LCD_RAM = LCD_RegValue;
//}
////////////////////////////////////////////////////
void LCD_WR_DATA_Prepare(void)
{
LCD_WR_REG(0x002C);
}
////////////////////////////////////////////////////
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
LCD_WR_REG(0x002A);
LCD_WR_DATA(Xpos>>8);
LCD_WR_DATA(Xpos&0x00ff);
LCD_WR_DATA(800>>8);
LCD_WR_DATA(800&0x00ff);


LCD_WR_REG(0x002b);
LCD_WR_DATA(Ypos>>8);
LCD_WR_DATA(Ypos&0x00ff);
LCD_WR_DATA(480>>8);
LCD_WR_DATA(480&0x00ff);
}
////////////////////////////////////////////////////
void LCD_Clear(uint16_t Color)
{
unsigned int l=480,w,f;


LCD_WR_REG(0X002A);
LCD_WR_DATA(0);
LCD_WR_DATA(0);
LCD_WR_DATA(HDP>>8);
LCD_WR_DATA(HDP&0XFF);


/* Y? */
LCD_WR_REG(0X002B);
LCD_WR_DATA(0);
LCD_WR_DATA(0);
LCD_WR_DATA(VDP>>8);
LCD_WR_DATA(VDP&0X00FF);


LCD_WR_REG(0X002C);
while(l--) /* 480? */
{
for(w = 0; w < HDP+1; w++) /* ??800???? */
{
f = 50;
LCD_WR_DATA(Color);
}

}
}
////////////////////////////////////////////////////
void LCD_DrawPixel(uint16_t xsta, uint16_t ysta, uint16_t color)
{
LCD_SetCursor(xsta, ysta); /*?????? */
LCD_WR_DATA_Prepare(); /*????GRAM */
LCD_WR_DATA(color);


}


void LCD_DrawPixel2(uint16_t xsta, uint16_t ysta, uint16_t color)
{
//LCD_SetCursor(xsta, ysta); /*?????? */
LCD_WR_DATA_Prepare(); /*????GRAM */
LCD_WR_DATA(color);


}


////////////////////////////////////////////////////


void LCD_WindowMax (unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend)
{
LCD_WR_REG(0X002A);
LCD_WR_DATA(xsta>>8);
LCD_WR_DATA(xsta&0X00FF);
LCD_WR_DATA(xend>>8);
LCD_WR_DATA(xend&0X00FF);

LCD_WR_REG(0X002B);
LCD_WR_DATA(ysta>>8);
LCD_WR_DATA(ysta&0X00FF);
LCD_WR_DATA(yend>>8);
LCD_WR_DATA(yend&0X00FF);
}
////////////////////////////////////////////////////
void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t colour)
{
u32 n;
LCD_WindowMax (xsta, ysta, xend, yend);
LCD_WR_DATA_Prepare();
n=(u32)(yend-ysta+1)*(xend-xsta+1);
while(n--){LCD_WR_DATA(colour);}
}
////////////////////////////////////////////////////
void LCD_DrawLine(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
int x, y, t;
if((xsta==xend)&&(ysta==yend))
LCD_DrawPixel(xsta, ysta, color);
else
if(abs(yend-ysta)>abs(xend-xsta))
{
if(ysta>yend)
{
t=ysta;
ysta=yend;
yend=t;
t=xsta;
xsta=xend;
xend=t;
}
for(y=ysta;y<yend;y++)
{
x=(u32)(y-ysta)*(xend-xsta)/(yend-ysta)+xsta;
LCD_DrawPixel(x, y, color);
}
}
else
{
if(xsta>xend)
{
t=ysta;
ysta=yend;
yend=t;
t=xsta;
xsta=xend;
xend=t;
}
for(x=xsta;x<=xend;x++)
{
y =(u32)(x-xsta)*(yend-ysta)/(xend-xsta)+ysta;
LCD_DrawPixel(x, y, color);
}
}
}
////////////////////////////////////////////////////
void Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t color)
{
int a,b;
int di;
a=0;b=r;

di=3-(r<<1);
while(a<=b)
{
LCD_DrawPixel(x0-b, y0-a, color); //3
LCD_DrawPixel(x0+b, y0-a, color); //0
LCD_DrawPixel(x0-a, y0+b, color); //1
LCD_DrawPixel(x0-b, y0-a, color); //7
LCD_DrawPixel(x0-a, y0-b, color); //2
LCD_DrawPixel(x0+b, y0+a, color); //4
LCD_DrawPixel(x0+a, y0-b, color); //5
LCD_DrawPixel(x0+a, y0+b, color); //6
LCD_DrawPixel(x0-b, y0+a, color);
a++;



if(di<0)di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
LCD_DrawPixel(x0+a, y0+b, color);
}
}
////////////////////////////////////////////////////
void LCD_DrawRectangle(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color)
{
LCD_DrawLine(xsta, ysta, xend, ysta, color);
LCD_DrawLine(xsta, ysta, xsta, yend, color);
LCD_DrawLine(xsta, yend, xend, yend, color);
LCD_DrawLine(xend, ysta, xend, yend, color);
}
////////////////////////////////////////////////////
u32 mypow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
////////////////////////////////////////////////////
void LCD_ShowNum(uint16_t x,uint16_t y,u32 num,u8 len, u16 PenColor, u16 BackColor)
{
u8 size = 16;
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
WriteOneChar(x+(size/2)*t,y, ' ', PenColor, BackColor);
continue;
}else enshow=1;

}
WriteOneChar(x+(size/2)*t,y,temp+'0', PenColor, BackColor);
}
}
////////////////////////////////////////////////////
u16 findHzIndex(u8 *hz)

{
u16 i=0;
FNT_GB16 *ptGb16 = (FNT_GB16 *)GBHZ_16;
while(ptGb16[i].Index[0] > 0x80)
{
if ((*hz == ptGb16[i].Index[0]) && (*(hz+1) == ptGb16[i].Index[1]))
{
return i;
}
i++;
if(i > (sizeof((FNT_GB16 *)GBHZ_16) / sizeof(FNT_GB16) - 1))
{
break;
}
}
return 0;
}
////////////////////////////////////////////////////
uint8_t WriteOneHz(u16 x0, u16 y0, u8 *pucMsk, u16 PenColor, u16 BackColor)
{
u16 i,j;
u16 mod[16];
u16 *pusMsk;
u16 y;


int size = 16;


pusMsk = (u16 *)pucMsk;




for(i=0; i<16; i++)
{
mod[i] = *pusMsk;
mod[i] = ((mod[i] & 0xff00) >> 8) | ((mod[i] & 0x00ff) << 8);
pusMsk = pusMsk+1;
}
y = y0;
for(i=0; i<16; i++)
{
for(j=0; j<16; j++)
{
if((mod[i] << j) & 0x8000)
{
LCD_DrawPixel(x0+j, y0+i, PenColor);
}
else
{
LCD_DrawPixel(x0+j, y0+i, BackColor);
}
}
y++;
}
return (16);
}
////////////////////////////////////////////////////
void LCD_ShowString(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor)
{
u16 usIndex;
u16 usWidth = 0;
FNT_GB16 *ptGb16 = 0;

ptGb16 = (FNT_GB16 *)GBHZ_16;
while(1)
{
if(*pcStr == 0)
{
break;
}
x0 = x0 + (usWidth);


if(*pcStr > 0x80)
{
if((x0 + 16) > LCD_W)
{
x0 = 0;
y0 = y0 + 16;
if(y0 > LCD_H)
{
y0 = 0;
}
}
usIndex = findHzIndex(pcStr);
usWidth = WriteOneHz(x0, y0, (u8 *)&(ptGb16[usIndex].Msk[0]), PenColor, BackColor);
/* ???? */
pcStr += 2;
}


else
{ /* ?????? */
if (*pcStr == '\r') /* ?? */
{
y0 = y0 + 16; /* ?????? */
if(y0 > LCD_H) /* ????? */
{
y0 = 0;
}
pcStr++;
usWidth = 0;
continue;
}
else if (*pcStr == '\n') /* ????? */
{
x0 = 0;
pcStr++;
usWidth = 0;
continue;
}
else
{
if((x0 + 8) > LCD_W) /* ?????????? */
{
x0 = 0;
y0 = y0 + 16; /* ?????? */
if(y0 > LCD_H) /* ????? */
{
y0 = 0;
}
}
WriteOneChar(x0, y0, *pcStr, PenColor, BackColor);
usWidth = 8;
/* ASCII??21H???????3?*/
pcStr += 1;
}
}
}
}
////////////////////////////////////////////////////
u16 LCD_RGBtoBGR(u16 Color)
{
u16 r, g, b, bgr;


b = (Color>>0) & 0x1f; /* ??B */
g = (Color>>5) & 0x3f; /* ???? */
r = (Color>>11) & 0x1f; /* ??R */

bgr = (b<<11) + (g<<5) + (r<<0);


return( bgr );
}
////////////////////////////////////////////////////
void LCD_DrawPicture(u16 StartX,u16 StartY,u16 Xend,u16 Yend,u8 *pic)
{
static u16 i=0,j=0;
u16 *bitmap = (u16 *)pic;
for(j=0; j<Yend-StartY; j++)
{
for(i=0; i<Xend-StartX; i++)
LCD_DrawPixel(StartX+i, StartY+j, *bitmap++);
}
}
////////////////////////////////////////////////////


////////////////////////////////////////////////////


void LCD_Configuration()
{

// GPIO_InitTypeDef GPIO_InitStruct;


/* GPIO Ports Clock Enable */
// __HAL_RCC_GPIOC_CLK_ENABLE();
// __HAL_RCC_GPIOB_CLK_ENABLE();
//__HAL_RCC_GPIOA_CLK_ENABLE();


/*Configure GPIO pin Output Level */
// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
// |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
// |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
// |GPIO_PIN_12|GPIO_PIN_13
// , GPIO_PIN_SET);


/*Configure GPIO pin Output Level */
// HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
// |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12
// |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
// , GPIO_PIN_SET);


/*Configure GPIO pins : PC13 PC0 PC1 PC2
PC3 PC4 PC5 PC6
PC7 PC8 PC9 PC10
PC11 PC12 */
// GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
// |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
// |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
// |GPIO_PIN_12|GPIO_PIN_13;
// GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
// HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);


/*Configure GPIO pins : PB10 PB11 PB12 PB13
PB14 PB15 PB5 PB6
PB7 PB8 PB9 */
//GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_P IN_9|GPIO_PIN_10|GPIO_PIN_11
// |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
//GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
//GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
//HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


}




void LCD_Init(void)
{



//SSD_RESET;
//LCD_Configuration();lcd_write_command
#define LCD_WriteCom LCD_WR_REG
#define LCD_WriteRAM LCD_WR_DATA
#define SSD1963_WriteCommand LCD_WriteCom
#define SSD1963_WriteData LCD_WriteRAM
#define TimeDelay(x) Delay_10ms(x/2)

LCD_WriteCom(0x0001); // software reset
LCD_WriteCom(0x0001); // software reset
LCD_WriteCom(0x0001); // software reset
/*ssd1963?????*/
LCD_WriteCom(0x00E2);
LCD_WriteRAM(0x0023);
// Set PLL with OSC = 10MHz (hardware)
// Multiplier N = 35, VCO (>250MHz)= OSC*(N+1), VCO = 360MHz
LCD_WriteRAM(0x0001);
// Divider M = 2, PLL = 360/(M+1) = 120MHz
LCD_WriteRAM(0x0004);
// Validate M and N values

SSD1963_WriteCommand(SSD1963_SET_PLL_MN);
SSD1963_WriteData(0x1D); // PLLclk = REFclk * 30 (300MHz)
SSD1963_WriteData(0x02); // SYSclk = PLLclk / 3 (100MHz)
SSD1963_WriteData(0x54); // dummy

TimeDelay(1);
LCD_WriteCom(0x00E0); // PLL enable
LCD_WriteRAM(0x0001);
TimeDelay(50);
LCD_WriteCom(0x00E0);
LCD_WriteRAM(0x0003);
TimeDelay(1);
LCD_WriteCom(0x0001); // software reset
TimeDelay(1);
LCD_WriteCom(0x00E6);
LCD_WriteRAM(0x0004);
LCD_WriteRAM(0x0093);
LCD_WriteRAM(0x00e0);


LCD_WriteCom(0x00B0); //LCD SPECIFICATION
LCD_WriteRAM(0x0000);
LCD_WriteRAM(0x0000);
LCD_WriteRAM((HDP>>8)&0X00FF); //Set HDP
LCD_WriteRAM(HDP&0X00FF);
LCD_WriteRAM((VDP>>8)&0X00FF); //Set VDP
LCD_WriteRAM(VDP&0X00FF);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00B4); //HSYNC
LCD_WriteRAM((HT>>8)&0X00FF); //Set HT
LCD_WriteRAM(HT&0X00FF);
LCD_WriteRAM((HPS>>8)&0X00FF); //Set HPS
LCD_WriteRAM(HPS&0X00FF);
LCD_WriteRAM(HPW); //Set HPW
LCD_WriteRAM((LPS>>8)&0X00FF); //Set HPS
LCD_WriteRAM(LPS&0X00FF);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00B6); //VSYNC
LCD_WriteRAM((VT>>8)&0X00FF); //Set VT
LCD_WriteRAM(VT&0X00FF);
LCD_WriteRAM((VPS>>8)&0X00FF); //Set VPS
LCD_WriteRAM(VPS&0X00FF);
LCD_WriteRAM(VPW); //Set VPW
LCD_WriteRAM((FPS>>8)&0X00FF); //Set FPS
LCD_WriteRAM(FPS&0X00FF);
TimeDelay(1);


LCD_WriteCom(0x00BA);
LCD_WriteRAM(0x0005);//0x000F); //GPIO[3:0] out 1
TimeDelay(1);


LCD_WriteCom(0x00B8);
LCD_WriteRAM(0x0007); //GPIO3=input, GPIO[2:0]=output
LCD_WriteRAM(0x0001); //GPIO0 normal
TimeDelay(1);


LCD_WriteCom(0x0036); //rotation
LCD_WriteRAM(0x0008);
TimeDelay(1);


LCD_WriteCom(0x00F0); //pixel data interface
LCD_WriteRAM(0x0003);
TimeDelay(1);




TimeDelay(1);
LCD_WriteCom(0x0029); //display on
TimeDelay(1);


LCD_WriteCom(0x00BE); //set PWM for B/L
LCD_WriteRAM(0x0006);
LCD_WriteRAM(0x0080);
TimeDelay(1);

LCD_WriteRAM(0x0001);
LCD_WriteRAM(0x00f0);
LCD_WriteRAM(0x0000);
LCD_WriteRAM(0x0000);
TimeDelay(1);


LCD_WriteCom(0x00d0);//??????????
LCD_WriteRAM(0x000d);
TimeDelay(1);
//LCD_Clear(BLACK);
}
//************************************************** ***************************
//************************************************** ***************************
//----------------------------------------------------------------------------------------------------
// Show a farsi-englisg string on the LCD with specific size
// size : Scale factor size:1,2,3,...
//----------------------------------------------------------------------------------------------------




int font_color,x_font,y_font;
char highlight,fa_num;
unsigned int highlight_color;




unsigned int x_text=0,y_text=0;


void lcd_write_pixel(int x,int y,int color)
{
LCD_DrawPixel(x,y,color);
}

//_______________________________________________


void lcd_put_bold_char(char character , int size)
{
int counter_x,counter_y,i,j;
char letter_length,flag_p;



letter_length = font12x16[character][0]>>12;
for(counter_y=0;counter_y<16;counter_y++)
for(counter_x=0;counter_x<letter_length;counter_x++)
{
flag_p = font12x16[character][counter_y]>>(counter_x);
flag_p = flag_p&0x01;


if(flag_p)
{

if(effect == 0)
for(i=0;i<size;i++)
for(j=0;j<size;j++)
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + i -(x_font+(size*counter_x)),y_font+size*counter_y + j,font_color);
// Very good effect (1)
else if(effect == 1)
{
// good for size = 2
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
}
else if(effect == 2)
{
// good for size = 2
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 2,font_color);
}
else if(effect == 3)
{
// good for size = 3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
}
else if(effect == 4)
{
// good for size = 3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y - 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 2,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 2,font_color);
}
else if(effect == 5)
{
// good for size = 1,3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,font_color);
}

//lcd_draw_circle(TS_SIZE_X - 3 -(x_font+(size*counter_x)),y_font+size*counter_y,si ze,1,font_color);

}
else if(highlight)
{


if(effect == 0)
for(i=0;i<size;i++)
for(j=0;j<size;j++)
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + i -(x_font+(size*counter_x)),y_font+size*counter_y + j,highlight_color);
// Very good effect (1)
else if(effect == 1)
{
// good for size = 2
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,fo nt_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
}
else if(effect == 2)
{
// good for size = 2
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 2,highlight_color);
}
else if(effect == 3)
{
// good for size = 3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
}
else if(effect == 4)
{
// good for size = 3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y - 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) - 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 2 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 2,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 2,highlight_color);
}
else if(effect == 5)
{
// good for size = 1,3
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y,hi ghlight_color);
lcd_write_pixel(TS_SIZE_X - 3 + italic*(-counter_y+7) + 1 -(x_font+(size*counter_x)),y_font+size*counter_y + 1,highlight_color);
}



//lcd_draw_circle(TS_SIZE_X - 3 + italic*(-counter_y+7) -(x_font+(size*counter_x)),y_font+size*counter_y,si ze,1,highlight_color);


}
}


x_font += size*letter_length;
if(x_font > TS_SIZE_X - 1)
{
x_font = x_base;
y_font += size*16;
if(y_font > TS_SIZE_Y-0)
y_font = 0;
}

}


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void lcd_putsf_mix(int x,int y,const unsigned char *string , int size,int highlight, int color)
{
unsigned int letter,nt_letter,pr_letter;
unsigned int CN=0,CP=0,pr_CN=0,nt_CP=0,place=0,flag1=0;
unsigned int letter_counter=0,letter_count=0,length=0,enter=0;
unsigned int text_buffer[32];
lcd_text_highlight_color(highlight);
lcd_goto_xy(x,y);
font_color = color;
flag1 = 0;


while(*string)
{
if(*string > 0x80)
{
while(*string > 0x80)
{
if (flag1 == 0)
pr_letter = 0x20;
else
pr_letter = *(string - 1);


letter = *string++;


if (*string == 0)
nt_letter = 0x20;
else
nt_letter = *string;

flag1 = 1;


if(letter > 0x98) letter = letter;
else if(letter == 0x98) letter = 0xBC;
else if(letter == 0x90) letter = 0xC0;
else if(letter == 0x8D) letter = 0xBE;
else if(letter == 0x81) letter = 0xBD;
else if(letter == 0x8E) letter = 0xBF;


if(pr_letter > 0x98) pr_letter = pr_letter;
else if(pr_letter == 0x98) pr_letter = 0xBC;
else if(pr_letter == 0x90) pr_letter = 0xC0;
else if(pr_letter == 0x8D) pr_letter = 0xBE;
else if(pr_letter == 0x81) pr_letter = 0xBD;
else if(pr_letter == 0x8E) pr_letter = 0xBF;


if(nt_letter > 0x98) nt_letter = nt_letter;
else if(nt_letter == 0x98) nt_letter=0xBC;
else if(nt_letter == 0x90) nt_letter=0xC0;
else if(nt_letter == 0x8D) nt_letter=0xBE;
else if(nt_letter == 0x81) nt_letter=0xBD;
else if(nt_letter == 0x8E) nt_letter=0xBF;





if(pr_letter > 0x80)
pr_CN = ((FAmap[(pr_letter - 0xBC)][5]) == 1);
else
pr_CN = 0;

if(nt_letter > 0x80)
nt_CP = ((FAmap[(nt_letter - 0xBC)][4]) == 1);
else
nt_CP = 0;

if(letter > 0x80)
CP = ((FAmap[(letter - 0xBC)][4]) == 1);
else
CP = 0;

if(letter > 0x80)
CN = ((FAmap[(letter-0xBC)][5]) == 1);
else
CN = 0;


CP = pr_CN && CP;
CN = CN && nt_CP;
place = (CP << 1) | CN;

text_buffer[letter_counter++] = FAmap[(letter - 0xBC)][place];


length += size*(font12x16 [FAmap[(letter - 0xBC)][place]][1]>>12);
}




if(length < TS_SIZE_X - x_font - 3)
for(letter_count=0;letter_count<letter_counter;letter_count++)
lcd_put_bold_char(text_buffer[letter_count],size);
else
{

x_font = x_base;
y_font += size*16;
if(y_font > TS_SIZE_Y - size*16)
y_font = 0;

for(letter_count=0;letter_count<letter_counter;letter_count++)
lcd_put_bold_char(text_buffer[letter_count],size);
}
letter_counter = 0;
length = 0;
}
else if(*string == 0x20) //Space detect
lcd_put_bold_char(*string++,size);
else //English letter & Number & Enter detect
{
if(*string == 0x0D) //Enter detect
{
x_font = x_base;
y_font += size*16;
if(y_font > TS_SIZE_Y - size*16)
y_font = 0;

string += 2;
goto p1;
}
//letter_counter = 0;
while((*string < 0x81) && (*(string+1) < 0x81) && (*string != 0x00))
{


if(fa_num)
{
if((*string > 0x2F) && (*string < 0x3A) && (*string != 0x00))
{
letter = (*string) - 0x20;
text_buffer[letter_counter++] = letter;
string++;
goto P2;
}
}
text_buffer[letter_counter++] = *string++;
P2:
if((*string == 0x20) && ((letter_counter * size*8) < (TS_SIZE_X - x_font - 1)))
flag1 = letter_counter;

if((letter_counter * size*8) > (TS_SIZE_X - x_font - 1))
{
string -= (letter_counter - flag1 + 1);
letter_counter = flag1 - 1;
enter = 1;


break;
}

}
if((letter_counter * size*8) < (TS_SIZE_X - x_font - 1))
{
for(letter_count=(letter_counter);letter_count>0;letter_count--)
lcd_put_bold_char(text_buffer[letter_count - 1],size);

if(enter)
{
enter = 0;
x_font = x_base;
y_font += size*16;
if(y_font > TS_SIZE_Y - size*16)
y_font = 0;
}
}
p1:
letter_counter = 0;
flag1 = 0;


}
}
flag1 = 0;


}
//-------------------------------------TAVABE JADID AZ 2.8 INCH


//----------------------------------------------------------------------------------------------------
// Set number format to farsi
//----------------------------------------------------------------------------------------------------
void lcd_fa_num(void)
{
fa_num = 1;
}


// Set number format to english
//----------------------------------------------------------------------------------------------------
void lcd_en_num(void)
{
fa_num = 0;
}




// Set efect of the farsi font
// ef : effect number ef:1,2,...,5
//----------------------------------------------------------------------------------------------------
void lcd_font_effect(int ef)
{
if(ef >= 0 && ef <= 5)
effect = ef;
}




//----------------------------------------------------------------------------------------------------
// Enable Italic effect for farsi font
//----------------------------------------------------------------------------------------------------
void lcd_italic_on(void)
{
italic = 1;
}


//----------------------------------------------------------------------------------------------------
// Disable Italic effect for farsi font
//----------------------------------------------------------------------------------------------------
void lcd_italic_off(void)
{
italic = 0;
}
// Enable Farsi font Highlight
//----------------------------------------------------------------------------------------------------
void lcd_text_highlight_on(void)
{
highlight = 1;
}
//----------------------------------------------------------------------------------------------------
// Disable Farsi font Highlight
//----------------------------------------------------------------------------------------------------
void lcd_text_highlight_off(void)
{
highlight = 0;
}
//----------------------------------------------------------------------------------------------------
// Set Farsi font Highlight color
//----------------------------------------------------------------------------------------------------
void lcd_text_highlight_color(unsigned int color)
{
highlight_color = color;
}
//----------------------------------------------------------------------------------------------------
// Make an ascii string from an unicode string
//----------------------------------------------------------------------------------------------------
void unicode2ascii(char *uni_str , char *ascii_str)
{
int counter = 0;
int Uch = 0;
char chl,chh;


while(*uni_str)
{
chl = *uni_str++;
chh = *uni_str++;

Uch = 0;
Uch = ((Uch | chh) << 8) | chl;

if(Uch > 1574 && Uch < 1591)
*(ascii_str + counter) = (char)(Uch - 1376);
else if(Uch > 1590 && Uch < 1595)
*(ascii_str + counter) = (char)(Uch - 1375);
else if(Uch > 1600 && Uch < 1603)
*(ascii_str + counter) = (char)(Uch - 1380);
else if(Uch == 1705)
*(ascii_str + counter) = (char)(Uch - 1482);
else if(Uch == 1604)
*(ascii_str + counter) = (char)(Uch - 1379);
else if(Uch > 1604 && Uch < 1609)
*(ascii_str + counter) = (char)(Uch - 1378);
else if(Uch == 1740)
*(ascii_str + counter) = (char)(Uch - 1503);
else if(Uch == 1574)
*(ascii_str + counter) = (char)(Uch - 1381);
else if(Uch == 1662)
*(ascii_str + counter) = (char)(Uch - 1533);
else if(Uch == 1670)
*(ascii_str + counter) = (char)(Uch - 1529);
else if(Uch == 1688)
*(ascii_str + counter) = (char)(Uch - 1546);
else if(Uch == 1711)
*(ascii_str + counter) = (char)(Uch - 1567);
else if(Uch == 1570)
*(ascii_str + counter) = (char)(Uch - 1376);
else if(Uch > 1631 && Uch < 1642)
*(ascii_str + counter) = (char)(Uch - 1584);
else if(Uch == 65536)
*(ascii_str + counter) = NULL;
else
*(ascii_str + counter) = (char) Uch;


counter++;

}
*(ascii_str + counter) = NULL;

}


//++++++++++++++++++++++++++++++++++++++++++++++++++


void LCD_WRITE_ICONE32(int Xi , int Yi , int COLOR,int BACKLIGHT,char SIZE ,const char *pic){


int i,T=0;
int i2;
long x,y;
char data;
int s,c;


y=Yi;
for(i2=0 ; i2<128 ; i2+=4){
data=pic[i2+3];
x=Xi;
for(i=0 ; i<32 ; i++){


if(i==8)data=pic[i2+2];
else if(i==16)data=pic[i2+1];
else if(i==24)data=pic[i2];
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
if((data & 1)==0 ){
for(c=0 ; c<SIZE; c++)
{
LCD_SetCursor(x+s+i,y+c);
for(s=0 ; s<SIZE ; s++)LCD_DrawPixel(x+s+i,y+c,BACKLIGHT);
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
else {
for(c=0 ; c<SIZE; c++){
LCD_SetCursor(x+s+i,y+c);
for(s=0 ; s<SIZE ; s++)LCD_DrawPixel(x+s+i,y+c,COLOR);
}

}
data>>=1;
x=(x+SIZE)-2;


}
y=y+(SIZE)-1;
}

}




//++++++++++++++++++++++++++++++++++++++++++++++++++


void LCD_WRITE_ICONE16(int Xi , int Yi , int COLOR,int BACKLIGHT,char SIZE ,const char *pik){
int i,T=0;
int i2;
long x,y;
char data;
int s,c;
y=Yi;
for(i2=0 ; i2<32 ; i2+=2){
data=pik[i2+1];
x=Xi;
for(i=0 ; i<16 ; i++){


if(i==8)data=pik[i2];
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
if((data & 1)==0 ){
for(c=0 ; c<SIZE; c++)
{
for(s=0 ; s<SIZE ; s++)lcd_write_pixel(x+s+i,y+c,BACKLIGHT);
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++
else {
for(c=0 ; c<SIZE; c++){
for(s=0 ; s<SIZE ; s++)lcd_write_pixel(x+s+i,y+c,COLOR);
}

}
data>>=1;
x=(x+SIZE)-2;


}
y=y+(SIZE)-1;
}

}






void Command_Write(unsigned char command,unsigned char data1)
{
#define Write_Command LCD_WR_REG
#define Write_Data LCD_WR_REG
Write_Command(command);
Write_Data(data1);
}

mzarkoob
16-12-2017, 22:56
من دیدم به این شکل بود که همینکه برای نمایش یک تابعی دیگر باید جای r و b را با هم عوض کند زمان نمایش را بیشتر می کند :
LCD_WriteRAM(LCD_BGR2RGB(Color)) -> LCD_WriteRAM(Color)

ولی باید اینیشیالیز اصلاح شود وگرنه جای رنگ قرمز و آبی عوض می شود.

jonbakhsh
17-12-2017, 14:55
ممنون میشه یه مثال بزارید ؟؟؟

mzarkoob
30-12-2017, 01:29
با قرمز مشخص کردم . احتمالش هست مال این باشه ؟؟؟


/* Timing */
Timing.AddressSetupTime = 3;
Timing.AddressHoldTime = 15;
Timing.DataSetupTime = 1;
Timing.BusTurnAroundDuration = 0;
Timing.CLKDivision = 16;
Timing.DataLatency = 17;
Timing.AccessMode = FSMC_ACCESS_MODE_A;

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

jonbakhsh
30-12-2017, 09:18
من فکر می کنم از این تایمینگ هاتون باشه.
این اعداد را از کجا آوردید؟
با سعی و خطا گذاشتید یا با توجه به توضیحات منوال !؟

ممنون
تایمینگ هارو توی چند تا مثال از اینترنت که دیدم گزاشتم ولی من این اعداد خیلی زیاد ترم کردم . باز همینجور میشه
منوال پیدا نکردم که تایمینگ های ssd گفته باشه

jonbakhsh
02-01-2018, 22:40
یه موردی متوجه شدم . توی قسمت هایی که رنگ مختلف داره و انواع خطوط و مربع .... میکشه بیشتر هنگ میکنه ؟؟؟؟
چرا ؟؟؟