فهم مبدأ شاشة 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 دبوساً فقط،و بقي 13في الوضع المختلف، عدد خطوط الإشارة التي نحتاجها مختلفة، في الوضع 8080، كل 13 مطلوبة، واحدة منها شائعة، وهذا هو خط إعادة ضبط RST (RES) ،الذي يمكننا توصيله مباشرة إلى إعادة تعيين MCU (لتأكيد أن طريقة إعادة تعيين هي نفسها)، بحيث يمكن حذف سطر واحد. في وضع IIC، هناك حاجة فقط 2 سطر!
لقد تعلمنا للتو عن ذلك، وضع عمل المركز يحتاج فقط إلى خطين، ووضع عمل المركز هو استخدام سلكين لمحاكاة المركز للحصول على البيانات.
جهاز التحكم OLED هو SSD1306، وهذا يعني: يتم تشغيل الشاشة العارية بواسطة SSD1306، والتي هي أيضا رقاقة سائق LED الأكثر استخداما.
ذاكرة الفيديو في وحدة OLED
OLED نفسه ليس لديه ذاكرة فيديو ، وتعتمد ذاكرة الفيديو الخاصة به على SSD1306 لتوفيرها. يبلغ إجمالي ذاكرة SSD1306 128 * 64 بت ، ويقسم SSD1306 الذاكرة إلى 8 صفحات.كل صفحة تحتوي على 128 بايت، ما مجموعه 8 صفحات، والتي هي بالضبط 128 * 64 حجم مصفوفة نقطة.
ومع ذلك، لأن OLED لا يمكن التحكم في مصفوفة نقطة واحدة في وقت واحد، فإنه يمكن أن تتحكم فقط 8 مصفوفة نقطة؛
لأن كل كتابة مكتوبة في بايت، هناك مشكلة، إذا استخدمنا وضع الكتابة فقط لتشغيل الوحدة، ثم، علينا أن نكتب 8 نقاط في وقت واحد، لذلك عندما نرسم نقطة،يجب علينا معرفة الحالة الحالية لكل بت من بايت حيث توجد النقطة التي سيتم تعيين (0/1وإلا، فإن البيانات المكتوبة سوف تكتب فوق الحالة السابقة، والنتيجة ستكون أن بعض النقاط التي لا تحتاج إلى عرض يتم عرضها،أو تلك التي ينبغي أن تظهر لا تظهر. في وضع القراءة، يمكننا قراءة بايت ليكون مكتوبا أولا، والحصول على الوضع الحالي، ومن ثم كتابته في الجرام بعد تعديل بت لتكون مكتوبة من جديد،حتى لا يؤثر على الوضع السابقومع ذلك ، يتطلب هذا القدرة على قراءة GRAM ، لوضع SPI ذي 3 أسلاك أو 4 أسلاك ، لا تدعم الوحدة القراءة ، كما أن وضع القراءة> إلى> الكتابة بطيء نسبياً.
لذا الطريقة التي نستخدمها هي إنشاء غرام OLED (بما مجموعه 128 بايت) داخل STM32، وفي كل تعديل، فقط تعديل غرام على STM32 (في الواقع SRAM) ، وبعد التعديل،كتابة GRAM على STM32 إلى OLED GRAM في وقت واحدبطبيعة الحال، هذه الطريقة لديها أيضا عيوب، وهذا هو، بالنسبة لتلك الحواسيب الصغيرة مع SRAM صغيرة جدا (مثل 51 سلسلة) ، فمن أكثر إزعاجا.
ذاكرة الفيديو من OLED
شكل التخزين هو كما يلي:
0 1 2 3... 127
//[1]0 1 2 3... 127
//[2]0 1 2 3... 127
0 1 2 3... 127
0 1 2 3... 127
//[5]0 1 2 3... 127
//[6]0 1 2 3... 127
//[7]0 1 2 3... 127
u16 OLED_GRAM[128][8]؛
تحديث ذاكرة الفيديو على شاشة LCD
غير صحيح 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) ؛ حدد موقع العرض
for ((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: يحتوي على بايتين، الأول هو كلمة الأمر، والثاني هو القيمة المحددة، والبايت الثاني من BIT2 يشير إلى حالة التبديل من مضخة الشحن، والبيت هو 1،يتم تشغيل مضخة الشحن، و 0 مغلقة. عندما يتم إطلاق الوحدة، يجب تمكين هذا، وإلا لن ترى شاشة العرض.
4: يأمر 0XB0 ~ B7: يستخدم لتحديد عنوان الصفحة، والرقم الثلاثة السفلية تتوافق مع عنوان الصفحة من غرام.
5: أمر 0X00~0X0F: يستخدم لتحديد الأرقام الأربعة السفلية لعنوان العمود الأول عند عرضها.
6: الأمر 0X10~0X1F: يستخدم لتحديد عنوان عمود البدء للشاشة أربع أرقام أعلى.
لمزيد من الأوامر، يرجى الرجوع إلى هذا، فمن المستحسن للغاية أن نرى ذلك، فهي مفصلة جدا: SSD1306 (شريحة سائق OLED) التعليمات بالتفصيل
بعد إدخال وضع العمل وشريحة السائق، يمكننا البدء في استخدام هذه الوحدة IIC OLED
الرمز بالتفصيل
# define OLED_CMD 0 // كتابة الأمر
# define OLED_DATA 1 //كتابة البيانات
بدء تشغيل OLED
بدء SSD1306
void OLED_Init ((باطل))
GPIO_InitTypeDef GPIO_InitStructure؛
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) ؛ // مراقبة العقد
أوليد_وير_بايت ((0xFF،أوليد_سي إم دي) ؛//- 128
OLED_WR_Byte ((0xA1,OLED_CMD) ؛//إعادة رسم مخطط لقطاع المجموعة
OLED_WR_Byte ((0xA6,OLED_CMD) ؛//--العادي / عكس
OLED_WR_Byte ((0xA8,OLED_CMD) ؛//--معدل تعدد الكليات ((1 إلى 64)
أوليد_دبليو آر_بايت ((0x3F،أوليد_سي إم دي) ؛//--1/32 واجب
OLED_WR_Byte ((0xC8,OLED_CMD) ؛//Com اتجاه المسح
OLED_WR_Byte ((0xD3,OLED_CMD) ؛//-تعيين تحويل العرض
OLED_WR_Byte ((0x00,OLED_CMD) ؛//
OLED_WR_Byte ((0xD5,OLED_CMD) ؛//تقسيم أوسك
OLED_WR_Byte ((0x80,OLED_CMD) ؛//
OLED_WR_Byte ((0xD8,OLED_CMD) ؛//أغلق وضع لون المنطقة
OLED_WR_Byte ((0x05,OLED_CMD) ؛//
OLED_WR_Byte ((0xD9,OLED_CMD) ؛//حدد فترة الشحن المسبق
أوليد_وير_بايت ((0xF1,أوليد_سي إم دي) ؛//
OLED_WR_Byte ((0xDA,OLED_CMD) ؛//تكوين المجموعة
OLED_WR_Byte ((0x12,OLED_CMD) ؛//
OLED_WR_Byte ((0xDB,OLED_CMD) ؛//مجموعة 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 (() ؛ مسح الشاشة ، فمن المستحسن لتنظيف الشاشة أولا بعد كل إكمال التمهيدية
وظيفة مسح الشاشة، بعد مسح الشاشة، الشاشة بأكملها سوداء!
باطلة 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) ؛ حدد موقع العرض
for ((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*/
عبارة عبارة عن عبارة عن عبارة عن عبارة عن عبارة عن عبارة عن عبارة عن عبارة عن عبارة
{
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 يتحكم في الأعمدة ، لذلك لا حاجة إلى عمليات أخرى لإنهاء الرسم
}
}
التالي if(x>120) ليس خطأ، لأن x+=8 السابق؛ هناك تفسير في الملاحظات التالية، لذلك يمكنك التفكير في ذلك.
void OLED_ShowString ((u8 x,u8 y,u8 *chr,u8 Char_Size) // يعرض السلسلة
{
char غير الموقعة j=0؛
while (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++; رسم السلاسل في حلقة
}
}
يتم عرض رقمين، وكلاهما مكتوب في الرمز أدناه، ويجب ملاحظة أن "" أدناه تمثل قيمة ASCII من 32
m^n الوظيفة
u32 oled_pow ((u8 m,u8 n)
{
نتيجة u32=1
بينما ((n--) النتيجة*=m؛
نتيجة العودة
}
عرض رقمين
x,y: إحداثيات البداية
len: عدد أرقام الرقم
الحجم: حجم الخط
الوضع: الوضع 0، وضع التعبئة
الرقم: القيمة العددية (0~4294967295) ؛
الرقم غير الصحيح 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؛ إذا ((بإظهار==0&&t<(len-1)) { إذا ((المؤقت==0) { أوليدي_شوبشار ((x+(size2/2) *t,y,' ',size2) ؛ مواصلة {\pos (190,230) }إلاّ يظهر=1; } عرض OLED Char ((x+(size2/2) *t,y,temp+'0',size2) ؛ } العديد من أعلاه هي الاستخدام الأساسي لدينا، وبعض شي تريد استخدامها لإكمال عمليات مختلفة أكثر، التالي هو، قبل المقدمة،أولاً تعريف برنامج النمذجة المستخدم بشكل شائع. من الكمبيوتر إلى شاشة LCD 2002 إليك كيفية عملها! عندما نستخدمه، نحن أولا فتح الملف في الزاوية العلوية اليسرى وإنشاء واحدة جديدة. أدخل عرضنا وارتفاعنا، 6 * 8 أو 8 * 16 تستند إلى هذا لاتخاذ القالب، يمكنك تعيين الحجم بنفسك.هناك شيء يشبه التروس في الزاوية العلوية، ونحن بحاجة إلى فتحها بمجرد تعيين الحجم. كما هو مبين في الشكل: بمجرد الحصول على كل شيء فوق، يمكنك رسم ما تريد. لأن OLED هو 128 × 64, الحجم الأقصى لدينا هو هذا، يمكننا كتابة على 128 × 64, رسم، وما إلى ذلك، ما يخرج هو صورة كاملة،والتي هي أيضا وسيلة لملء الشاشة، وهناك نوع من برنامج التصور في الخلف، والتي يتم الحصول عليها كصورة، مثل بعض شخصيات الأنيمي. الآن بعد أن قدمنا الأدوات، نحن مستعدون للمضي قدما في عملياتنا! 1اسحب خط مستقيم 2: عرض الصور (مثل بعض شخصيات الرسوم المتحركة) يبدو أنها طويلة قليلاً هناك طرق أخرى للعب، للتحديث التالي
عادةً ما نستخدم نفس النقطة كما في الشكل أدناه عندما نريد رسم خط مستقيم، نحصل دائماً على نقطة، هذا لأن حجم الحرف الذي نستخدمه عادةً هو 6 * 8 أو 8 * 16وحجم النقطة في الداخل لا يمتلئ المستطيل بأكمله (شرح أعلاه)، ما نحن بحاجة إلى القيام به هو فتح برنامج شخصية لدينا وجعل النقطة أكبر!
اتصل شخص: Mrs. Christina
الهاتف :: +8618922869670
الفاكس: 86-755-2370-9419