アットウィキロゴ
javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。

oledとは


有機ELのディスプレイデバイスのこと。
それ自体が発行物のため、液晶のように何層にも分かれる
必要がなく薄くできる。

入手

http://strawberry-linux.com/catalog/items?code=18052
このサイトで仕様書もゲットできます。

表示


表示に成功し。
視野角がとてつもなく広く、きれいな表示ができる。
最大256k色の表示が可能。

アニメーション

どんな感じになるか分からないが、とりあえず習得しているコマンドで、
アニメーションをしてみた。
しているのは、 1画面クリア
2玉の表示
玉の移動
1へもどる
の繰り返しである。壁にぶつかるたびにランダムで片方向の速度を
変化させている。
ol.amc

プログラム

#include <24FJ64GA002.h>
#include <stdlib.h>
#fuses FRC,NOJTAG,OSCIO,NOWDT,NOPROTECT//内部クロック
#use delay(internal=8000000) //クロック8MHz

#define D0 PIN_B6
#define D1 PIN_B7
#define D2 PIN_B8
#define D3 PIN_B9
#define D4 PIN_B10
#define D5 PIN_B11
#define D6 PIN_B12
#define D7 PIN_B13
#define D8 PIN_B14
#define RD PIN_A0
#define RW PIN_A1
#define CS PIN_B4
#define DC PIN_A4
#define RES PIN_A3


void write_c(unsigned char cmd);
void write(unsigned char cmd);
void write_d(unsigned char cmd);
void init();
void main(){
	int i;
	init();
  delay_ms(120);


  write_c(0x8e);    // clear window command
  write_d(0);
  write_d(0);
  write_d(130);
  write_d(130); 

  delay_ms(100);
  
  write_c(0x92);    // fill enable command
  write_d(0x01); 
  
  delay_ms(10);

  // draw 100 random circles
  for(i = 0;i < 100;i++){
      write_c(0x86);    // draw circle command
      write_d(rand() % 130);
      write_d(rand() % 130);
      write_d(rand() % 64);
      write_d(rand());
      write_d(rand());
      write_d(rand());
      write_d(rand());

      delay_ms(10);
  }

  // write directly to ram,  this fills up bottom 1/3 of display with  color pattern 
  write_c(0x5c);
  for (i = 0; i < 2000; i++){
  write_c(0x5c);  
   write_d(i);
   write_d(i);
   write_d(i);
  }

	while(1){
		output_toggle(PIN_B15);
		delay_ms(200);
   	                                                                                                                                                                                                                                                                                	}
}
void init(){
	write(0);
	output_low(RD);
	output_low(DC);
	output_low(RW);
	output_low(CS);
	output_low(RES);
	delay_ms(100);
	output_high(RES);
   write_c(0xa0); // Set Re-map / Color Depth
   write_d(0x34);//0xb4); // 262K 8bit R->G->B
   write_c(0xa1); // Set display start line
   write_d(0x00); // 00h start
  write_c(0xA6); // Normal display
  write_c(0xad); // Set Master Configuration
  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre -charge voltage
  write_c(0xb0); // Power saving mode
  write_d(0x05);
  write_c(0xb1); // Set pre & dis_charge
  write_d(0x11); // pre=1h dis=1h
  write_c(0xb3); // clock & frequency
  write_d(0xf0); // clock=Divser+1 frequency=fh
  write_c(0xbb); // Set pre-charge voltage of color A B C
  write_d(0x1c); // color A
  write_d(0x1c); // color B
  write_d(0x1c); // color C
  write_c(0xbe); // Set VcomH
  write_d(0x1f); //
  write_c(0xc1); // Set contrast current for A B C
  write_d(0xaa); // Color A
  write_d(0xb4); // Color B
  write_d(0xc8); // Color C
  write_c(0xc7); // Set master contrast
  write_d(0x0f); // no change
  write_c(0xca); // Duty
  write_d(0x7f); // 127+1
  write_c(0xaf); // Display on
}
	
	
void write_c(unsigned char cmd){
	output_high(RD);
	output_low(DC);
	output_low(CS);
	output_low(RW);
	delay_us(20);
	write(cmd);
	delay_us(20);
	output_high(DC);
	output_high(CS);
	output_high(RW);
	output_low(RD);
} 
void write_d(unsigned char cmd){
	output_high(RD);
	output_high(DC);
	output_low(RW);
	output_low(CS);
	delay_us(20);
	write(cmd);
	delay_us(20);
	output_high(DC);
	output_high(CS);
	output_high(RW);
	output_low(RD);
} 

void write(unsigned char cmd){
/*	output_bit(D0,(cmd&0b10000000)>>7);
	output_bit(D1,(cmd&0b01000000)>>6);
	output_bit(D2,(cmd&0b00100000)>>5);
	output_bit(D3,(cmd&0b00010000)>>4);
	output_bit(D4,(cmd&0b00001000)>>3);
	output_bit(D5,(cmd&0b00000100)>>2);
	output_bit(D6,(cmd&0b00000010)>>1);
	output_bit(D7,cmd&0b00000001);*/

	output_bit(D7,(cmd&0b10000000)>>7);
	output_bit(D6,(cmd&0b01000000)>>6);
	output_bit(D5,(cmd&0b00100000)>>5);
	output_bit(D4,(cmd&0b00010000)>>4);
	output_bit(D3,(cmd&0b00001000)>>3);
	output_bit(D2,(cmd&0b00000100)>>2);
	output_bit(D1,(cmd&0b00000010)>>1);
	output_bit(D0,cmd&0b00000001);
} 

戻る

最終更新:2010年01月28日 10:11