ওএলইডি ডিসপ্লে এর নীতি বোঝা - ওএলইডি মডিউল ব্যবহারের বিভিন্ন উপায়
ওএলইডি মডিউলের চারটি কাজের মোড রয়েছে, যথা 6800 এবং 8080 সমান্তরাল ইন্টারফেস, 4-ডায়ার সিরিয়াল এসপিআই ইন্টারফেস মোড এবং আইআইসি ইন্টারফেস মোড।BS1/BS2 সেটিংস এবং মডিউল ইন্টারফেস মোডের মধ্যে সম্পর্ক নিম্নলিখিত টেবিলে দেখানো হয়েছে:
SAEF Technology OLED মডিউলের ডিফল্ট সেটিংস হল BS0 থেকে GND, BS1 এবং BS2 থেকে VCC (8080 মোড), যদি আপনি এটিকে অন্যান্য মোডে সেট করতে চান,আপনি OLED পিছনে একটি সোলাইডিং লোহা সঙ্গে BS0-BS2 সেটিংস পরিবর্তন করতে হবে(হার্ডওয়্যার পরিবর্তন)
স্কিম থেকে আমরা জানতে পারি যে মোট ১৬ টি পিন আছে, এবং ১৬ টি লাইনের মধ্যে আমরা মাত্র ১৫ টি পিন ব্যবহার করেছি, এবং তাদের মধ্যে একটি ঝুলছে। ১৫ টি লাইনের মধ্যে ২ টি পাওয়ার এবং গ্রাউন্ড,আর বাকি আছে ১৩টি।. বিভিন্ন মোডে, সিগন্যাল লাইন সংখ্যা আমরা প্রয়োজন ভিন্ন, 8080 মোডে, সব 13 প্রয়োজন হয়, যার মধ্যে একটি সাধারণ, অর্থাৎ রিসেট লাইন RST (RES),যা আমরা সরাসরি MCU পুনরায় সেট করতে সংযোগ করতে পারেন (নিশ্চিত করুন যে পুনরায় সেট পদ্ধতি একই), যাতে একটি লাইন বাদ দেওয়া যেতে পারে। আইআইসি মোডে, শুধুমাত্র 2 লাইন প্রয়োজন হয়!
আমরা সবে শিখেছি, আইআইসির কাজের মোডে মাত্র দুটি লাইন প্রয়োজন, এবং আইআইসির কাজের মোডে দুইটি তারের ব্যবহার করা হয় আইআইসিকে সিমুলেট করতে এবং তথ্য সংগ্রহ করতে।
ওএলইডি কন্ট্রোলারটি এসএসডি ১৩০৬, অর্থাৎঃ খালি স্ক্রিনটি এসএসডি ১৩০৬ দ্বারা চালিত হয়, যা আরও ব্যাপকভাবে ব্যবহৃত LED ড্রাইভার চিপ।
OLED মডিউল ভিডিও মেমরি
ওএলইডি নিজেই ভিডিও মেমরি নেই, এবং এর ভিডিও মেমরি SSD1306 এর উপর নির্ভর করে। এসএসডি1306 এর মোট মেমরি 128 * 64 বিট, এবং এসএসডি1306 মেমরিকে 8 পৃষ্ঠায় বিভক্ত করে।প্রতিটি পৃষ্ঠায় 128 বাইট রয়েছে, মোট ৮টি পৃষ্ঠা, যা ঠিক ১২৮*৬৪ ডট ম্যাট্রিক্সের আকার।
কিন্তু যেহেতু OLED এক সময়ে একটি ডট ম্যাট্রিক্স নিয়ন্ত্রণ করতে পারে না, তাই এটি শুধুমাত্র ৮ ডট ম্যাট্রিক্স নিয়ন্ত্রণ করতে পারে; এবং এটি একটি উল্লম্ব সুইপ নিয়ন্ত্রণ;
কারণ প্রতিটি লিখতে বাইটে লেখা হয়, একটি সমস্যা আছে, যদি আমরা শুধুমাত্র লিখতে মোড ব্যবহার মডিউল পরিচালনা করতে, তারপর, আমরা একটি সময়ে 8 পয়েন্ট লিখতে হবে, তাই যখন আমরা একটি বিন্দু আঁকা,আমরা বাইট প্রতিটি বিট বর্তমান অবস্থা খুঁজে বের করতে হবে যেখানে বিন্দু সেট করা হয় অবস্থিত (0/1?) অন্যথায়, লিখিত তথ্য পূর্ববর্তী রাষ্ট্র overwrite হবে, এবং ফলাফল হবে যে কিছু পয়েন্ট যে প্রদর্শিত করা প্রয়োজন হয় না প্রদর্শিত হয়,অথবা প্রদর্শিত হওয়া উচিত যারা প্রদর্শিত হয় না. পাঠযোগ্য মোডে, আমরা প্রথমে লিখতে বাইট পড়তে পারেন, বর্তমান অবস্থা পেতে, এবং তারপর এটি গ্রাম মধ্যে লিখুন বিট পুনর্লিখন করা পরিবর্তন করার পরে,যাতে পূর্ববর্তী পরিস্থিতির উপর প্রভাব না পড়ে।. তবে, এর জন্য GRAM পড়ার ক্ষমতা প্রয়োজন, 3-ওয়্যার বা 4-ওয়্যার SPI মোডের জন্য, মডিউলটি পড়া সমর্থন করে না, এবং পড়া->-থেকে-> লেখার মোডটিও তুলনামূলকভাবে ধীর।
সুতরাং আমরা যে পদ্ধতিটি ব্যবহার করি তা হল STM32 এর ভিতরে একটি OLED GRAM (মোট 128 বাইট) তৈরি করা, এবং প্রতিটি সংশোধনীতে, শুধুমাত্র STM32 এর GRAM সংশোধন করা (সত্যিই SRAM), এবং সংশোধনের পরে,STM32 এর GRAM কে OLED GRAM এ একবারে লিখুনঅবশ্যই, এই পদ্ধতির অসুবিধাও রয়েছে, অর্থাৎ, খুব ছোট SRAM (যেমন 51 সিরিজ) সহ মাইক্রোকন্ট্রোলারগুলির জন্য এটি আরও সমস্যাযুক্ত।
ওএলইডি ভিডিও মেমরি
স্টোরেজ ফরম্যাট নিম্নরূপঃ
//[0]0 1 2 3... 127
//[1]0 1 2 3... 127
//[2]0 1 2 3... 127
//[3]0 1 2 3... 127
//[4]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];
এলসিডিতে ভিডিও মেমরি আপডেট করুন
null OLED_Refresh_Gram (বিনামূল্যে)
{
u8 i,n;
for ((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);
}
}
এসএসডি 1306 কমান্ড
1: কমান্ড 0X81: বৈসাদৃশ্য সেট করুন. দুটি বাইট ধারণ করে, প্রথম 0X81 হল কমান্ড, এবং পরবর্তী এক বাইট হল সেট করা বৈসাদৃশ্যের মান। যত বড় এই মান সেট করা হয়,স্ক্রিন যত উজ্জ্বল হবে.
2: কমান্ড 0XAE/0XAF: 0XAE প্রদর্শন কমান্ড বন্ধ করতে; 0XAF প্রদর্শন কমান্ড চালু করতে।
3: কমান্ড 0X8D: 2 বাইট ধারণ করে, প্রথমটি কমান্ড শব্দ, দ্বিতীয়টি সেট মান, BIT2 এর দ্বিতীয় বাইট চার্জ পাম্পের সুইচিং অবস্থা নির্দেশ করে, বিট হল 1,চার্জ পাম্প চালু আছে, এবং 0 নিষ্ক্রিয় করা হয়. যখন মডিউলটি শুরু করা হয়, এটি সক্ষম করা আবশ্যক, অন্যথায় আপনি স্ক্রিন প্রদর্শন দেখতে পাবেন না.
4: কমান্ড 0XB0~B7: পৃষ্ঠা ঠিকানা সেট করতে ব্যবহৃত হয়, এবং নীচের তিনটি সংখ্যা গ্র্যামের পৃষ্ঠার ঠিকানার সাথে মিলে যায়।
5: কমান্ড 0X00~0X0F: প্রদর্শনের সময় শুরু কলামের ঠিকানার নীচের চারটি সংখ্যা সেট করতে ব্যবহৃত হয়।
6: কমান্ড 0X10~0X1F: ডিসপ্লের স্টার্ট কলামের ঠিকানা চার অঙ্কের উপরে সেট করতে ব্যবহৃত হয়।
আরো কমান্ডের জন্য, দয়া করে এই পড়ুন, এটা দেখতে অত্যন্ত সুপারিশ করা হয়, এটা খুব বিস্তারিতঃ SSD1306 (OLED ড্রাইভার চিপ) বিস্তারিত নির্দেশাবলী
কাজের মোড এবং ড্রাইভার চিপ চালু করার পর, আমরা এই IIC OLED মডিউল ব্যবহার শুরু করতে পারেন
বিস্তারিত কোড
#define OLED_CMD 0 // কমান্ড লিখুন
#define OLED_DATA 1 //ডেটা লিখুন
ওএলইডি শুরু করুন
এসএসডি1306 শুরু করুন
null OLED_Init (null)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 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);//--set multiplex ratio ((১ থেকে ৬৪)
OLED_WR_Byte ((0x3F,OLED_CMD);//--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);//set osc বিভাজন
OLED_WR_Byte ((0x80,OLED_CMD);//
OLED_WR_Byte ((0xD8,OLED_CMD);//অঞ্চল রঙ মোড বন্ধ করুন
OLED_WR_Byte ((0x05,OLED_CMD);//
OLED_WR_Byte ((0xD9,OLED_CMD);//Pre-Charge Period সেট করুন
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);//set charge pump enable
OLED_WR_Byte ((0x14,OLED_CMD);//
OLED_WR_Byte ((0xAF,OLED_CMD);//--ওল্ড প্যানেল চালু}
OLED_Clear ((); পর্দা পরিষ্কার, এটি প্রতিটি প্রারম্ভিকীকরণ সম্পন্ন হয় পরে প্রথম পর্দা পরিষ্কার করার পরামর্শ দেওয়া হয়
ক্লিয়ার স্ক্রিন ফাংশন, স্ক্রিন ক্লিয়ার করার পর, পুরো স্ক্রিন কালো হয়ে যায়! এটা ঠিক একই রকম যে আলো জ্বলছে না!
null OLED_Clear (ভুল)
{
u8 i,n;
for ((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,প্রথমটি হল আমরা যে অক্ষরগুলো চাই তা বের করা ৮টি সারি এবং ৬টি কলামের একটি আয়তক্ষেত্রাকার টেবিল থেকে, এবং দ্বিতীয়টি হল 16 টি সারি এবং 8 টি কলাম সহ একটি আয়তক্ষেত্রাকার টেবিলে অক্ষরগুলি বের করা। নীচের কোড মন্তব্যে যেমন লেখা আছে, যেহেতু OLED তে প্রতি পৃষ্ঠায় মাত্র 8 টি লাইন রয়েছে,পরবর্তী পৃষ্ঠার জন্য স্থান ব্যবহার করা প্রয়োজনতাই আমরা ফন্ট আকার আমরা সাধারণত ব্যবহার, অবশ্যই, এই সাধারণত ব্যবহৃত ফন্ট আকার, আমরা এছাড়াও অক্ষর মডুলেশন সফটওয়্যার মাধ্যমে আমাদের নিজস্ব প্রিয় ফন্ট আকার করতে পারেন।
/* নির্দিষ্ট অবস্থানে কিছু অক্ষর সহ একটি অক্ষর প্রদর্শন করে
x:0~127
y:0~63
আকারঃ ফন্ট নির্বাচন করুন 16/12*/
void OLED_ShowChar ((u8 x,u8 y,u8 chr,u8 Char_Size)
{
unsigned 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 এ সেট করুন, দ্রষ্টব্যঃ প্রতি পৃষ্ঠায় মাত্র আটটি সারি রয়েছে
for ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); আই বাড়িয়ে, বিন্দুগুলি একটি লুপে আঁকা হয়, এবং পৃষ্ঠার 2 দ্বিতীয় কলামের সমস্ত 8 সারি তথ্য লিখিত হয়
OLED_Set_Pos(x,y+1); কারণ বিন্দু সংখ্যা যথেষ্ট নয়, আপনি পৃষ্ঠা 3 এ কলামে 2 বিন্দু চালিয়ে যেতে হবে
for ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i+8],OLED_DATA); ১৬ নং পয়েন্টের শেষ পর্যন্ত অঙ্কন শেষ করুন।
}
অন্য
{
OLED_Set_Pos ((x,y); 6x8 ডট ম্যাট্রিক্স, পেইন্টিং চালিয়ে যাওয়ার জন্য অন্য পৃষ্ঠাগুলির প্রয়োজন নেই
for ((i=0; i<6; i++)
OLED_WR_Byte ((F6x8[c][i],OLED_DATA); একটি দ্বি-মাত্রিক অ্যারেতে, সি সারিগুলি নিয়ন্ত্রণ করে এবং আমি কলামগুলি নিয়ন্ত্রণ করি, তাই অঙ্কনটি শেষ করার জন্য অন্য কোনও ক্রিয়াকলাপের প্রয়োজন হয় না
}
}
নিম্নলিখিত 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++; একটি লুপ মধ্যে স্ট্রিং আঁকা
}
}
2 সংখ্যা প্রদর্শিত হয়, উভয় নীচের কোডে লেখা হয় এবং এটি লক্ষ করা উচিত যে নীচের "" 32 এর ASCII মান প্রতিনিধিত্ব করে
m^n ফাংশন
u32 oled_pow ((u8 m,u8 n)
{
u32 ফলাফল=1;
while ((n--) result*=m;
রিটার্ন ফলাফল;
}
২ টি সংখ্যা প্রদর্শন করুন
x,y: শুরু স্থানাঙ্ক
len: সংখ্যার সংখ্যা
আকারঃ ফন্টের আকার
মোডঃ মোড ০, ভরাট মোড; ১. ওভারলে মোড
num: সংখ্যাগত মান (0~4294967295);
void OLED_ShowNum ((u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
for(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); চালিয়ে যান; }অন্যথায় দেখাবে=1; } OLED প্রদর্শন Char ((x+(size2/2) *t,y,temp+'0',size2); } উপরের কয়েকটি আমাদের সবচেয়ে মৌলিক ব্যবহার, কিছু Xi আরো বিভিন্ন অপারেশন সম্পন্ন করতে এটি ব্যবহার করতে চান, নিম্নলিখিত হল, ভূমিকা আগে,প্রথম আমাদের সাধারণভাবে ব্যবহৃত মডেলিং সফটওয়্যার পরিচয় করিয়ে. পিসি থেকে এলসিডি 2002 এটা কিভাবে কাজ করে! যখন আমরা এটি ব্যবহার, আমরা প্রথম উপরের বাম কোণে ফাইল খুলুন এবং একটি নতুন এক তৈরি করুন। আমাদের প্রস্থ এবং উচ্চতা লিখুন, 6 * 8 বা 8 * 16 এই উপর ভিত্তি করে ছাঁচ নিতে, আপনি নিজের দ্বারা আকার সেট করতে পারেন।উপরের কোণে একটা গিয়ার-এর মত জিনিস আছে, এবং আমরা এটি খুলতে হবে একবার আমরা আকার সেট করেছি. চিত্র দেখানো হয়েছেঃ একবার আপনি উপরে সবকিছু পেয়ে গেলে, আপনি যা চান তা আঁকতে পারেন। কারণ OLED 128x64 হয়, আমাদের সর্বোচ্চ আকার এই, আমরা 128x64 লিখতে পারি, আঁকতে পারি, ইত্যাদি, যা বের হয় তা একটি সম্পূর্ণ ছবি,যা স্ক্রিন পূরণ করার একটি উপায়, এবং পিছনে একটি ধরনের ইমপ্রেশন সফটওয়্যার রয়েছে, যা একটি ছবি হিসাবে প্রাপ্ত হয়, যেমন কিছু এনিমে চরিত্র। এখন যেহেতু আমরা সরঞ্জাম চালু করেছি, আমরা আমাদের অপারেশন এগিয়ে যেতে প্রস্তুত! 1: একটি সরল রেখা আঁকুন 2: ছবি দেখান (যেমন কিছু এনিমে চরিত্র) মনে হচ্ছে একটু লম্বা, খেলার আরো উপায় আছে, পরবর্তী আপডেট করার জন্য।
সাধারণত আমরা নিচের চিত্রের মত একই বিন্দু ব্যবহার করি যখন আমরা একটি সরলরেখা আঁকতে চাই, আমরা সবসময় একটি বিন্দু পাই, কারণ আমরা সাধারণত যে অক্ষরের আকার ব্যবহার করি তা হল 6 * 8 অথবা 8 * 16,এবং ভিতরে বিন্দু আকার পুরো আয়তক্ষেত্রের পূর্ণ নয় (উপরে ব্যাখ্যা), আমাদের যা করতে হবে তা হল আমাদের চরিত্র সফটওয়্যার খুলতে হবে এবং পয়েন্টটি বড় করতে হবে!
ব্যক্তি যোগাযোগ: Mrs. Christina
টেল: +8618922869670
ফ্যাক্স: 86-755-2370-9419