OLEDディスプレイの原理を理解する - OLEDモジュールの使用方法
OLEDモジュールは,平行インターフェース6800と8080,四線連続SPIインターフェイスモード,IICインターフェイスモードという4つの動作モードを有する.BS1/BS2設定とモジュールインターフェースモードの関係が次の表で示されています.:
SAEF Technology OLED モジュールのデフォルト設定は BS0 から GND, BS1 から BS2 から VCC (8080 モード) です.OLEDの裏側にある溶接鉄でBS0-BS2の設定を変更する必要があります(ハードウェア交換)
図からわかるのは 合計16本のピンが描かれていて 16本のラインのうち 15本のピンしか使っていないし そのうちの1つはぶら下がっています 15本のラインのうち 2つはパワーと地面ですそして13が残っています異なるモードでは,必要な信号線の数が異なります. 8080モードでは,全部で 13 つが必要です.MCUのリセットに直接接続できます (リセット方法が同じであることを確認するために)2行しか必要ない!
2つの線しか使えなくなり 2つのワイヤーを使ってデータをシミュレートします
OLEDコントローラはSSD1306で,つまり裸の画面はSSD1306で動いている.これはより広く使用されているLEDドライバーチップでもある.
OLEDモジュールビデオメモリ
OLED自体にはビデオメモリがないため,ビデオメモリ提供はSSD1306に依存している.SSD1306の総メモリは128 * 64ビットで,SSD1306はメモリを8ページに分けています.各ページには 128 バイトがあります合計8ページで 128*64点マトリックスサイズです
8点のマトリックスしか制御できません これは垂直スイープ制御です
モジュールを操作するには,書き込みのみモードを使用すると, 8つのポイントを同時に書き込む必要があります.設定するポイントが位置するバイトの各ビット (0/1書き込みのデータが上書きされ,表示する必要のない点が表示される結果になります.または表示されるべきものは表示されません.読み取れるモードでは,最初に書き出すバイトを読み,現在の状況を得て,それを書き直すビットを変更した後,それをグラムに書き込むことができます.前の状況に影響しないようにしかし,このためには,GRAMを読み取れる能力が必要であり,3ワイヤーまたは4ワイヤーSPIモードでは,モジュールは読み取りをサポートせず,読み取れ>書き取れ>書き取れモードも比較的遅い.
STM32の内部に OLED GRAM (合計128バイト) を作成し,各変更で,STM32の GRAM (実際 SRAM) を変更します.STM32 の GRAM を OLED の GRAM に一度に書き込むもちろん,この方法には欠点もあります. SRAMが非常に小さいマイクロコントローラー (例えば51シリーズ) の場合,より面倒です.
OLEDのビデオメモリ
保存形式は以下のとおりです.
1 2 3... 127
//[1]0 1 2 3... 127
/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];
ビデオメモリをLCDに更新する
無効 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);
}
}
SSD1306 コマンド
1: コマンド 0X81:コントラストを設定します. 2バイトを含みます.最初の0X81はコマンドで,次の1バイトは設定されるコントラストの値です.この値が設定されるほど大きくなります.画面が明るくなるほど.
2: コマンド 0XAE/0XAF: 0XAE 表示コマンドをオフにする 0XAF 表示コマンドをオンにする
3: コマンド 0X8D: 2バイトを含んでいます. 最初のバイトはコマンドワードで, 2番目のバイトはセット値で, BIT2の2番目のバイトは充電ポンプの切り替え状態を示します. ビットは1です.充電ポンプがオンになっているプログラムが起動すると,この機能が有効にする必要があります.そうでなければ,画面が表示されません.
4: コマンド 0XB0~B7: ページアドレスを設定するために使用され,下の3桁はGRAMのページアドレスに対応します.
5: コマンド 0X00~0X0F: 開始列のアドレスの下4桁を表示する際に設定する.
6: コマンド 0X10~0X1F: ディスプレイの開始列アドレスを4桁高く設定するために使用されます.
詳細は: SSD1306 (OLEDドライバーチップ) 詳細の指示
このIIC OLEDモジュールを使用することができます.
詳細なコード
#define OLED_CMD 0 // コマンドを書く
#OLED_DATAを定義する 1 //データを書く
OLED を初期化する
SSD1306を初期化する
無効 OLED_Init (無効)
GPIO_InitTypeDef GPIO_InitStructure について
RCC_APB2PeriphClockCmd ((RCC_APB2Periph_GPIOA, ENABLE); Aポートのクロックを有効にする
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 で,GPIO_Pin_7 を表示する
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 ((1から64)
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);//セット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);//前充電期間を設定する
OLED_WR_Byte ((0xF1,OLED_CMD);//
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;
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);
} // ディスプレイを更新
}
2つの一般的な方法があります. 1つは6*8で,もう1つは8*16です.8行6列の長方形表から 必要な文字を取り出すことです16行8列の長方形表から文字を取り出す. OLEDでは1ページに8行しかないので,次のページのスペースを使用する必要があります.文字の変容ソフトウェアを使って 好きな文字のサイズを作ることもできます. 文字の変容ソフトウェアを使って 好きな文字のサイズを作ることもできます.
/* 指定された位置に文字を表示します.
x:0~127
y:0~63
サイズ: フォント 16/12*/を選択
無効 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) // この場合は,同じ2ページの列が必要で,8*16のドット行列が必要です
{
OLED_Set_Pos ((x,y); もし x = y = 2 の場合は,ページ 3 の列 3 に設定します. 注:ページあたり8 行だけです.
for ((i=0; i<8; i++)
OLED_WR_Byte ((F8X16[c*16+i],OLED_DATA); i を増やして,ドットがループに描かれ,ページ2の第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);二次元配列では,Cが列を制御し,Iが列を制御するので,図の完成には他の操作は必要ありません.
}
}
前の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 です. そして,それが1つとして表示されるたびに,あなたはより高い列に 8 列を移動する必要があります.
if(x>120) {x=0; y+=2; } // 最大は128列で,それを超えると,あなたは再びゼロの列から開始する必要があります,あなたがこの時点で絵を継続するために他のページを必要としているため,重複を避けるためにy+=2です. そして,y+=2です.
j++;ループで文字列を描く
}
}
2つの数字が表示され,どちらも下記のコードで書かれており,下記の""は32のASCII値を表していることに注意してください.
m^n 機能
u32 oled_pow ((u8 m,u8 n)
{
u32 の結果=1;
となる場合 (n--) 結果*=m
返信結果
}
2つの数字を表示する
x,y:スタート座標
len: 番号の桁数
サイズ: フォントサイズ
モード: モード 0, 充填モード, 1. オーバーレイモード
num:数値 (0~4294967295)
無効 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 ((表示==0&&t<(len-1)) { if (仮) { OLED_ShowChar ((x+(size2/2) *t,y,' ',size2); 継続する {else enshow=1;} (他の場合は表示=1) } OLED Char ((x+(size2/2) *t,y,temp+'0',size2) を表示する. } いくつかのXiは,より多くの異なる操作を完了するためにそれを使用したい, 次の,紹介の前に,まず,一般的なモデリングソフトウェアを紹介します.. PCからLCD 2002 こんな感じで! 幅と高さを入力してください. 6 * 8 または 8 * 16 は,この上に基づいて模具を取ります. サイズを自分で設定できます.上角にギアみたいなものがあるサイズを設定すると開きます. 図のように: OLEDは128*64なので 最大サイズはこれです 128*64に書き,描きます.画面を埋めることもできますアニメのキャラクターのような画像として取得されます. ツールが導入されたので 作業を進めます! 1線を引く 2: 画像 を 展示 する (アニメ の 登場人物 など) もう少し長く感じます プレイする方法もたくさんあります 次は更新します
文字の大きさは6*8か8*16です. 文字の大きさは6*8か8*16です.そして,その内側の点の大きさは,直角形全体を満たしていない (上記のように)ポイントを大きくする! ポイントを大きくする!
コンタクトパーソン: Mrs. Christina
電話番号: +8618922869670
ファックス: 86-755-2370-9419