درک اصل صفحه نمایش OLED - روش های مختلف استفاده از ماژول های OLED
ماژول OLED دارای چهار حالت کار است، یعنی رابط های موازی 6800 و 8080، حالت رابط SPI سریال 4 سیم و حالت رابط IIC.رابطه بین تنظیمات BS1/BS2 و حالت رابط ماژول در جدول زیر نشان داده شده است.:
تنظیم پیش فرض ماژول OLED SAEF Technology BS0 به GND، BS1 و BS2 به VCC (وضع 8080) است، اگر می خواهید آن را به حالت های دیگر تنظیم کنید،شما نیاز به تغییر تنظیمات BS0-BS2 با یک آهن جوش در پشت OLED. (تغییر سخت افزار)
از طرح می توانیم بدانیم که در مجموع 16 پین کشیده شده است و از 16 خط، ما فقط از 15 پین استفاده کرده ایم و یکی از آن ها آویزان است. از 15 خط، 2 قدرت و زمین هستند،و 13 تا موندهدر حالت های مختلف، تعداد خطوط سیگنال مورد نیاز ما متفاوت است، در حالت 8080، همه 13 مورد نیاز است، یکی از آن ها رایج است، یعنی خط تنظیم مجدد RST (RES) ،که ما می توانیم به طور مستقیم به تنظیم مجدد MCU متصل (برای تأیید اینکه روش تنظیم مجدد همان است)در حالت IIC، فقط 2 خط لازم است!
ما تازه در مورد آن آموخته ایم. حالت کار IIC فقط به دو خط نیاز دارد، و حالت کار IIC استفاده از دو سیم برای شبیه سازی IIC برای به دست آوردن داده است.
کنترل کننده OLED SSD1306 است، به این معنی که: صفحه نمایش برهنه توسط SSD1306 که همچنین یک تراشه راننده LED به طور گسترده استفاده می شود، هدایت می شود.
حافظه ویدئویی ماژول OLED
OLED خود حافظه ویدیویی ندارد و حافظه ویدیویی آن به SSD1306 بستگی دارد. کل حافظه SSD1306 128 * 64 بیت است و SSD1306 حافظه را به 8 صفحه تقسیم می کند.هر صفحه 128 بایت دارد، در مجموع 8 صفحه، که دقیقا 128 * 64 اندازه ماتریس نقطه است.
با این حال، چون OLED نمی تواند یک ماتریس نقطه ای را در یک زمان کنترل کند، فقط می تواند یک ماتریس ۸ نقطه ای را کنترل کند؛ و این یک کنترل پاک کننده عمودی است؛
از آنجا که هر نوشتن در بایت نوشته شده است، یک مشکل وجود دارد، اگر ما از حالت نوشتن تنها برای کار ماژول استفاده می کنیم، پس، ما باید به نوشتن 8 نقطه در یک زمان، بنابراین زمانی که ما یک نقطه را ترسیم،ما باید وضعیت فعلی هر بیت از بایت که در آن نقطه برای تنظیم واقع شده است (0/1در غیر این صورت، داده های نوشته شده وضعیت قبلی را بر روی آن می نویسد و نتیجه آن این است که برخی از نقاطی که نیازی به نمایش ندارند، نمایش داده می شوند.یا آنهایی که باید نمایش داده شوند نمایش داده نمی شوند. در حالت قابل خواندن، ما می توانیم بایت را که باید ابتدا نوشته شود بخوانیم، وضعیت فعلی را بدست آوریم، و سپس آن را در گرام پس از اصلاح بیت که باید دوباره نوشته شود، بنویسیم،تا بر وضعیت قبلی تاثیر نداشته باشهبا این حال، این نیاز به توانایی خواندن GRAM دارد، برای حالت SPI 3 سیم یا 4 سیم، ماژول از خواندن پشتیبانی نمی کند و حالت خواندن> به> نوشتن نیز نسبتا آهسته است.
بنابراین روش ما استفاده می شود برای ایجاد یک GRAM OLED (در کل 128 بایت) در داخل STM32، و در هر اصلاح، فقط تغییر GRAM در STM32 (در واقع SRAM) و پس از اصلاح،یک بار GRAM را در STM32 به OLED GRAM بنویسیدالبته، این روش نیز معایب دارد، یعنی برای آن میکروکنترلرها با SRAM بسیار کوچک (مانند سری ۵۱) ، مشکل بیشتری دارد.
حافظه ویدئویی OLED
فرمت ذخیره سازی به شرح زیر است:
.....
//[1]0 1 2 3... 127
//[2]0 1 2 3... 127
...
.//[4]0 1 2 3... 127
....
//[6]0 1 2 3... 127
//[7]0 1 2 3... 127
u16 OLED_GRAM[128][8]؛
حافظه ویدیو را به صفحه LCD آپدیت کنید
null OLED_Refresh_Gram (غیرفعال)
{
u8 i،n؛
برای ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD) ؛ آدرس صفحه را تنظیم کنید (0~7)
OLED_WR_Byte (0x00,OLED_CMD) ؛ موقعیت نمایش را تنظیم کنید
OLED_WR_Byte (0x10,OLED_CMD) ؛ موقعیت نمایش را تنظیم کنید
برای ((n=0; n<128; n++) OLED_WR_Byte ((OLED_GRAM[n][i],OLED_DATA) ؛
}
}
دستور SSD1306
1: دستور 0X81: کنتراست را تنظیم کنید. حاوی دو بایت است، اولین 0X81 فرمان است و یک بایت بعدی ارزش کنتراست است که تنظیم می شود. هرچه این مقدار بزرگتر تنظیم شود،روشن تر صفحه نمایش خواهد بود.
2: دستور 0XAE/0XAF: 0XAE برای خاموش کردن دستور نمایش؛ 0XAF برای روشن کردن دستور نمایش.
3: فرمان 0X8D: حاوی 2 بایت است، اولین کلمه فرمان است، دوم ارزش تنظیم شده است، بایت دوم BIT2 حالت سوئیچ پمپ شارژ را نشان می دهد، بیت 1 است،پمپ شارژ روشن است، و 0 خاموش است. هنگامی که ماژول شروع می شود، این باید فعال شود، در غیر این صورت شما صفحه نمایش را نمی بینید.
4: دستور 0XB0 ~ B7: برای تنظیم آدرس صفحه استفاده می شود و سه رقم پایین با آدرس صفحه GRAM مطابقت دارد.
5: دستور 0X00~0X0F: برای تنظیم چهار رقم پایین آدرس ستون شروع در هنگام نمایش استفاده می شود.
6: دستور 0X10~0X1F: برای تنظیم آدرس ستون شروع صفحه نمایش چهار رقم بالاتر استفاده می شود.
برای دستورات بیشتر، لطفا به این مراجعه کنید، به شدت توصیه می شود که آن را ببینید، آن را بسیار دقیق است: SSD1306 (چیپ راننده OLED) دستورالعمل در جزئیات
پس از معرفی حالت کار و تراشه راننده، ما می توانیم شروع به استفاده از این IIC ماژول OLED
کد دقیق
#define OLED_CMD 0 // دستور نوشتن
#definedOLED_DATA 1 //داده ها را بنویسید
اوليت کردن OLED
SSD1306 رو شروع کن
void OLED_Init (غیرفعال)
GPIO_InitTypeDef ساختار GPIO_Init
RCC_APB2PeriphClockCmd ((RCC_APB2Periph_GPIOA، فعال کنید) ؛ ساعت در پورت A را فعال کنید
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ؛ خروجی فشار کشیدن
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz سرعت 50MHz
GPIO_Init ((GPIOA، & GPIO_InitStructure) ؛ GPIO را شروع کنید
GPIO_SetBits ((GPIOA،GPIO_Pin_5 در مورد GPIO_Pin_7) ؛
delay_ms ((200) ؛
OLED_WR_Byte ((0xAE,OLED_CMD);//-- نمایش خاموش
OLED_WR_Byte ((0x00,OLED_CMD) ؛//---قرارداد ستون پایین را تنظیم کنید
OLED_WR_Byte ((0x10,OLED_CMD) ؛//---قرارداد ستون بالا را تنظیم کنید
OLED_WR_Byte ((0x40,OLED_CMD) ؛//--آدرس خط شروع را تنظیم کنید
OLED_WR_Byte ((0xB0,OLED_CMD) ؛//-- آدرس صفحه تنظیم شده
OLED_WR_Byte ((0x81,OLED_CMD) ؛ // کنترل قرارداد
OLED_WR_Byte ((0xFF,OLED_CMD) ؛//- 128
OLED_WR_Byte ((0xA1,OLED_CMD) ؛//بازنویسی بخش مجموعه
OLED_WR_Byte ((0xA6,OLED_CMD);//--عادي / معکوس
OLED_WR_Byte ((0xA8,OLED_CMD);//-- نسبت چندگانه تنظیم شده ((۱ تا ۶۴)
OLED_WR_Byte ((0x3F,OLED_CMD);//--1/32 وظیفه
OLED_WR_Byte ((0xC8,OLED_CMD);//Com جهت اسکن
OLED_WR_Byte ((0xD3,OLED_CMD) ؛//-set display offset
OLED_WR_Byte ((0x00,OLED_CMD) ؛//
OLED_WR_Byte ((0xD5,OLED_CMD);//set osc division
OLED_WR_Byte ((0x80,OLED_CMD) ؛//
OLED_WR_Byte ((0xD8,OLED_CMD) ؛//وضع رنگ منطقه را خاموش کنید
OLED_WR_Byte ((0x05,OLED_CMD) ؛//
OLED_WR_Byte ((0xD9,OLED_CMD) ؛//مدت شارژ پیش تنظیم
OLED_WR_Byte ((0xF1,OLED_CMD) ؛//
OLED_WR_Byte ((0xDA,OLED_CMD);// تنظیم پیکربندی کامپین
OLED_WR_Byte ((0x12,OLED_CMD);//
OLED_WR_Byte ((0xDB,OLED_CMD) ؛//set Vcomh
OLED_WR_Byte ((0x30,OLED_CMD) ؛//
OLED_WR_Byte ((0x8D,OLED_CMD) ؛//پمپ شارژ را فعال کنید
OLED_WR_Byte ((0x14,OLED_CMD);//
OLED_WR_Byte ((0xAF,OLED_CMD) ؛//--کنترل پنل OLED}
OLED_Clear ((); پاک کردن صفحه نمایش، توصیه می شود برای تمیز کردن صفحه نمایش اول پس از هر آغاز تکمیل شده است
عملکرد پاک کردن صفحه، پس از پاک کردن صفحه، کل صفحه سیاه می شود! این همان چیزی است که روشن نمی شود!!
void OLED_Clear ((غیرفعال)
{
u8 i،n؛
برای ((i=0; i<8; i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD) ؛ آدرس صفحه را تنظیم کنید (0~7)
OLED_WR_Byte (0x00,OLED_CMD) ؛ موقعیت نمایش را تنظیم کنید
OLED_WR_Byte (0x10,OLED_CMD) ؛ موقعیت نمایش را تنظیم کنید
برای ((n=0; n<128; n++) OLED_WR_Byte ((0,OLED_DATA) ؛
} // صفحه نمایش را به روز کنید
}
در خود ماژول ما معمولا استفاده می شود، دو راه رایج برای گرفتن ماژول وجود دارد، یکی 6 × 8 است، و دیگری 8 × 16 است،اولین کار این است که از یک جدول مستطیل با 8 ردیف و 6 ستون، حروف مورد نظر را حذف کنیم.، و دوم این است که شخصیت ها را در یک جدول مستطیل با 16 ردیف و 8 ستون حذف کنید. همانطور که در تفسیر کد در زیر نوشته شده است، از آنجا که تنها 8 خط در هر صفحه در OLED وجود دارد،فضای صفحه بعدی باید استفاده شودبنابراین ما اندازه فونتی که معمولا استفاده می کنیم، البته، این اندازه های فونتی است که معمولا استفاده می شود، ما همچنین می توانیم اندازه فونت مورد علاقه خود را از طریق نرم افزار تعدیل کاراکتر ایجاد کنیم.
/* یک کاراکتر را در محل مشخص شده نشان می دهد، از جمله برخی از کاراکترها
x:0~127
y:0~63
اندازه: فونت 16/12*/ را انتخاب کنید
void OLED_ShowChar ((u8 x,u8 y,u8 chr,u8 Char_Size)
{
char بدون علامت c=0,i=0؛
c=chr-' '؛ مقدار آفست را می توان از الگوی فونت بدست آورد، اولین آن " " است، و کاراکتر مربوطه را می توان با کم کردن
if(x>Max_Column-1) {x=0; y=y+2; } //Max_Column: حداکثر ستون: 128؛ x: تعداد ستون ها را تنظیم کنید؛ y: تعداد صفحات را تنظیم کنید
if(Char_Size ==16) // در این مورد همان ستون دو صفحه مورد نیاز است، و ماتریس نقطه ای از 8*16 مورد نیاز است
{
OLED_Set_Pos ((x,y) ؛ اگر x = y = 2، سپس آن را به ستون 3 در صفحه 3 تنظیم کنید، توجه داشته باشید: تنها هشت ردیف در هر صفحه وجود دارد
برای ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA) ؛ با افزایش i، نقاط در یک حلقه کشیده می شوند و تمام 8 ردیف ستون دوم در صفحه 2 به داده ها نوشته می شود
OLED_Set_Pos ((x,y+1) ؛ از آنجا که تعداد نقاط کافی نیست، شما نیاز به ادامه نقاط در ستون 2 در صفحه 3
برای ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA) ؛ ادامه به تکمیل نقشه تا پایان نقطه 16
}
ديگر
{
OLED_Set_Pos ((x,y) ؛ ماتریس نقطه ای 6x8، نیازی به صفحات دیگر برای ادامه نقاشی نیست
برای ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA) ؛ در یک آرایه دو بعدی، C ردیف ها را کنترل می کند و I ستون ها را کنترل می کند، بنابراین نیازی به عملیات دیگری برای پایان رساندن نیست
}
}
اگر (x>120) یک خطا نیست، چون x+=8 قبلی است. در یادداشت های زیر توضیحی وجود دارد، بنابراین می توانید در مورد آن فکر کنید.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // رشته را نشان می دهد
{
char j=0 بدون علامت؛
در حالی که (chr[j]!='0') // بررسی کنید که آیا رشته پایان می یابد
{
OLED_ShowChar ((x,y,chr[j],Char_Size); حروف را یک به یک بکشید
x+=8؛ x به یک ستون تنظیم شده است، اندازه یک کاراکتر 8*16 است، یعنی ردیف 16 است و ستون 8 است، و هر بار که به عنوان یک نمایش داده می شود، شما نیاز به حرکت 8 ستون به ستون بالاتر
if(x>120) {x=0; y+=2; } // حداکثر 128 ستون است، اگر آن را بیش از حد، شما نیاز به شروع از ستون صفر دوباره، زیرا شما نیاز به صفحات دیگر برای ادامه نقاشی در این زمان،برای جلوگیری از همپوشانی، شما نیاز به y += 2 دارید.
j++؛ رشته ها را در یک حلقه بکشید
}
}
2 عدد نشان داده می شود، هر دو در کد زیر نوشته شده است و باید توجه داشته باشید که "" در زیر نشان دهنده ارزش ASCII 32 است.
m^n تابع
u32 oled_pow ((u8 m,u8 n)
{
نتیجه u32=1؛
در حالیکه ((n--) نتیجه*=m؛
نتیجه بازگشت؛
}
نمایش 2 عدد
x,y: مختصات شروع
len: تعداد رقمهای عدد
اندازه: اندازه فونت
حالت: حالت 0، حالت پر کردن، حالت 1.
num: مقدار عددی (0~4294967295)
void OLED_ShowNum ((u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t،temp؛
u8 enshow=0؛
برای t=0; t { temp=(num/oled_pow(10,len-t-1)) %10؛ if ((display==0&&t<(len-1)) { if ((temp==0) { OLED_ShowChar ((x+(size2/2) *t,y,' ',size2) ؛ ادامه بده {else enshow=1) ؛ } صفحه نمایش OLED Char ((x+(size2/2) *t,y,temp+'0',size2) ؛ } چند مورد بالا استفاده های اساسی ما هستند، برخی از شی می خواهند از آن برای تکمیل عملیات های مختلف استفاده کنند، موارد زیر، قبل از معرفی،ابتدا نرم افزار مدل سازی مورد استفاده ما را معرفی کنید. PC به LCD 2002 اينطوري کار ميکنه وقتی از آن استفاده می کنیم، ابتدا فایل را در گوشه سمت چپ بالا باز می کنیم و یک فایل جدید ایجاد می کنیم. عرض و ارتفاع خود را وارد کنید، 6*8 یا 8*16 بر اساس این قالب است، می توانید اندازه را خودتان تنظیم کنید.يه چيز مثل دنده توي گوشه ي بالاست، و ما باید آن را باز کنیم هنگامی که اندازه آن را تنظیم کنیم. همانطور که در شکل نشان داده شده است: هنگامی که همه چیز را در بالای آن دارید، می توانید آنچه را که می خواهید بکشید. چون OLED 128 × 64 است، حداکثر اندازه ما این است، می توانیم روی 128 × 64 بنویسیم، بکشید، و غیره، آنچه که به دست می آید یک تصویر کامل است،که همچنین یک راه برای پر کردن صفحه نمایش است، و یک نوع نرم افزار چاپ در پشت وجود دارد، که به عنوان یک تصویر به دست می آید، مانند برخی از شخصیت های انیمیشن. حالا که ابزارها رو معرفی کردیم، آماده ایم که به عملیات خود ادامه دهیم! 1: خط مستقيم بکش 2: نشان دادن تصاویر (مانند برخی از شخصیت های انیمیشن) احساس می کنم کمی طولانی است. راه های بیشتری برای بازی وجود دارد، برای به روز رسانی بعدی.
معمولا ما از همان نقطه ای که در شکل زیر استفاده می کنیم وقتی می خواهیم یک خط مستقیم بکشیم، همیشه یک نقطه دریافت می کنیم، این به این دلیل است که اندازه کاراکتر که معمولاً استفاده می کنیم 6 * 8 یا 8 * 16 است.و اندازه نقطه در داخل از کل مستطیل پر نیست (که در بالا توضیح داده شد)، کاری که باید بکنیم اینه که نرم افزار شخصیت هایمون رو باز کنیم و موضوع رو بزرگتر کنیم!
تماس با شخص: Mrs. Christina
تلفن: +8618922869670
فکس: 86-755-2370-9419