Dependencies:   mbed lwip EAOLED

Committer:
lynxeyed_atsu
Date:
Wed Jan 12 06:46:04 2011 +0000
Revision:
0:eb1247cc069b
Network clock and OLED driver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lynxeyed_atsu 0:eb1247cc069b 1 // ALO-095BWNN-J9 test program
lynxeyed_atsu 0:eb1247cc069b 2 // See also "http://www.aitendo.co.jp/product/2099"
lynxeyed_atsu 0:eb1247cc069b 3
lynxeyed_atsu 0:eb1247cc069b 4
lynxeyed_atsu 0:eb1247cc069b 5 #ifndef __SPIOLED_H__
lynxeyed_atsu 0:eb1247cc069b 6 #define __SPIOLED_H__
lynxeyed_atsu 0:eb1247cc069b 7
lynxeyed_atsu 0:eb1247cc069b 8 #include "mbed.h"
lynxeyed_atsu 0:eb1247cc069b 9 #include "small_font.h"
lynxeyed_atsu 0:eb1247cc069b 10
lynxeyed_atsu 0:eb1247cc069b 11 class SPIOLED {
lynxeyed_atsu 0:eb1247cc069b 12 private:
lynxeyed_atsu 0:eb1247cc069b 13 DigitalOut CS, RES, DC;
lynxeyed_atsu 0:eb1247cc069b 14 SPI spi; // mosi, miso, sclk
lynxeyed_atsu 0:eb1247cc069b 15
lynxeyed_atsu 0:eb1247cc069b 16 #define Dis_X_MAX 96-1 // Max X axial direction in screen
lynxeyed_atsu 0:eb1247cc069b 17 #define Dis_Y_MAX 64-1 // Max Y axial direction in screen
lynxeyed_atsu 0:eb1247cc069b 18 #define X_Witch 8 // character's width
lynxeyed_atsu 0:eb1247cc069b 19 #define Y_Witch 8 // character's height
lynxeyed_atsu 0:eb1247cc069b 20
lynxeyed_atsu 0:eb1247cc069b 21 unsigned int Char_Color; //character's color
lynxeyed_atsu 0:eb1247cc069b 22 unsigned int BGround_Color;
lynxeyed_atsu 0:eb1247cc069b 23
lynxeyed_atsu 0:eb1247cc069b 24
lynxeyed_atsu 0:eb1247cc069b 25
lynxeyed_atsu 0:eb1247cc069b 26 void Init(void){
lynxeyed_atsu 0:eb1247cc069b 27 spi.format(8,0); // nazo
lynxeyed_atsu 0:eb1247cc069b 28 spi.frequency(20000000); // modify later
lynxeyed_atsu 0:eb1247cc069b 29
lynxeyed_atsu 0:eb1247cc069b 30 // reset
lynxeyed_atsu 0:eb1247cc069b 31 wait_ms(200);
lynxeyed_atsu 0:eb1247cc069b 32 RES = 0; //Reset active
lynxeyed_atsu 0:eb1247cc069b 33 wait_ms(200);
lynxeyed_atsu 0:eb1247cc069b 34 RES = 1;
lynxeyed_atsu 0:eb1247cc069b 35
lynxeyed_atsu 0:eb1247cc069b 36
lynxeyed_atsu 0:eb1247cc069b 37 // initialize sequence
lynxeyed_atsu 0:eb1247cc069b 38 RegWrite(0xae); //OLED display OFF
lynxeyed_atsu 0:eb1247cc069b 39
lynxeyed_atsu 0:eb1247cc069b 40 //Row Address
lynxeyed_atsu 0:eb1247cc069b 41 RegWrite(0x75); /* Set Row Address */
lynxeyed_atsu 0:eb1247cc069b 42 RegWrite(0x00); /* Start = 0 */
lynxeyed_atsu 0:eb1247cc069b 43 RegWrite(0x3f); /* End = 63 */
lynxeyed_atsu 0:eb1247cc069b 44 RegWrite(0x15); /* Set Column Address */
lynxeyed_atsu 0:eb1247cc069b 45 RegWrite(0x00); /* Start = 0 */
lynxeyed_atsu 0:eb1247cc069b 46 RegWrite(0x5F); /* End = 96 */
lynxeyed_atsu 0:eb1247cc069b 47
lynxeyed_atsu 0:eb1247cc069b 48 //Contrast
lynxeyed_atsu 0:eb1247cc069b 49 RegWrite(0xa0); //Set remap & data format 0111 0000
lynxeyed_atsu 0:eb1247cc069b 50 RegWrite(0x74);
lynxeyed_atsu 0:eb1247cc069b 51 RegWrite(0xa1); //set display star row RAM
lynxeyed_atsu 0:eb1247cc069b 52 RegWrite(0x00);
lynxeyed_atsu 0:eb1247cc069b 53 RegWrite(0xa2); //set dispaly offset
lynxeyed_atsu 0:eb1247cc069b 54 RegWrite(0x00);
lynxeyed_atsu 0:eb1247cc069b 55 RegWrite(0xa4); //Set Display Mode
lynxeyed_atsu 0:eb1247cc069b 56 RegWrite(0xa8); //Set Multiplex Ratio
lynxeyed_atsu 0:eb1247cc069b 57 RegWrite(0x3f);
lynxeyed_atsu 0:eb1247cc069b 58 RegWrite(0xad); //Set Master Configuration
lynxeyed_atsu 0:eb1247cc069b 59 RegWrite(0x8f); //(External VCC Supply Selected)
lynxeyed_atsu 0:eb1247cc069b 60 RegWrite(0xB0); //Set Power Saving Mode
lynxeyed_atsu 0:eb1247cc069b 61 RegWrite(0x1a);
lynxeyed_atsu 0:eb1247cc069b 62 RegWrite(0xB1); //Set Phase 1 & 2 Period Adjustment
lynxeyed_atsu 0:eb1247cc069b 63 RegWrite(0x74);
lynxeyed_atsu 0:eb1247cc069b 64 RegWrite(0xb3); //Set Display Clock Divide Ratio / Oscillator Frequency
lynxeyed_atsu 0:eb1247cc069b 65 RegWrite(0xd0);
lynxeyed_atsu 0:eb1247cc069b 66 RegWrite(0x8A); //Set Second Pre-charge Speed of Color A
lynxeyed_atsu 0:eb1247cc069b 67 RegWrite(0x81);
lynxeyed_atsu 0:eb1247cc069b 68 RegWrite(0x8B); //Set Second Pre-charge Speed of Color B
lynxeyed_atsu 0:eb1247cc069b 69 RegWrite(0x82);
lynxeyed_atsu 0:eb1247cc069b 70 RegWrite(0x8C); //Set Second Pre-charge Speed of Color C
lynxeyed_atsu 0:eb1247cc069b 71 RegWrite(0x83);
lynxeyed_atsu 0:eb1247cc069b 72 RegWrite(0xBB); //Set Pre-charge Level
lynxeyed_atsu 0:eb1247cc069b 73 RegWrite(0x3e);
lynxeyed_atsu 0:eb1247cc069b 74 RegWrite(0xBE); //Set VCOMH
lynxeyed_atsu 0:eb1247cc069b 75 RegWrite(0x3e);
lynxeyed_atsu 0:eb1247cc069b 76 RegWrite(0x87); //Set Master Current Control
lynxeyed_atsu 0:eb1247cc069b 77 RegWrite(0x0f);
lynxeyed_atsu 0:eb1247cc069b 78 RegWrite(0x81); //Set Contrast Control for Color gAh
lynxeyed_atsu 0:eb1247cc069b 79 RegWrite(0x80);
lynxeyed_atsu 0:eb1247cc069b 80 RegWrite(0x82); //Set Contrast Control for Color gBh
lynxeyed_atsu 0:eb1247cc069b 81 RegWrite(0x80);
lynxeyed_atsu 0:eb1247cc069b 82 RegWrite(0x83); //Set Contrast Control for Color gCh
lynxeyed_atsu 0:eb1247cc069b 83 RegWrite(0x80);
lynxeyed_atsu 0:eb1247cc069b 84 RegWrite(0xaf); //display ON
lynxeyed_atsu 0:eb1247cc069b 85
lynxeyed_atsu 0:eb1247cc069b 86 }
lynxeyed_atsu 0:eb1247cc069b 87 public:
lynxeyed_atsu 0:eb1247cc069b 88 // constructor
lynxeyed_atsu 0:eb1247cc069b 89 SPIOLED(PinName cs_pin, PinName rst_pin, PinName a0_pin, PinName mosi_pin, PinName miso_pin, PinName sclk_pin)
lynxeyed_atsu 0:eb1247cc069b 90 : CS(cs_pin), RES(rst_pin), DC(a0_pin), spi(mosi_pin, miso_pin, sclk_pin) {
lynxeyed_atsu 0:eb1247cc069b 91
lynxeyed_atsu 0:eb1247cc069b 92 Init();
lynxeyed_atsu 0:eb1247cc069b 93 }
lynxeyed_atsu 0:eb1247cc069b 94
lynxeyed_atsu 0:eb1247cc069b 95
lynxeyed_atsu 0:eb1247cc069b 96
lynxeyed_atsu 0:eb1247cc069b 97
lynxeyed_atsu 0:eb1247cc069b 98 void RegWrite(unsigned char Command)
lynxeyed_atsu 0:eb1247cc069b 99 {
lynxeyed_atsu 0:eb1247cc069b 100 DC = 0; // Command
lynxeyed_atsu 0:eb1247cc069b 101 CS = 0; // CS active(toggle OLED)
lynxeyed_atsu 0:eb1247cc069b 102 spi.write(Command);
lynxeyed_atsu 0:eb1247cc069b 103 CS = 1;
lynxeyed_atsu 0:eb1247cc069b 104 }
lynxeyed_atsu 0:eb1247cc069b 105
lynxeyed_atsu 0:eb1247cc069b 106
lynxeyed_atsu 0:eb1247cc069b 107
lynxeyed_atsu 0:eb1247cc069b 108 void DataWrite(unsigned char c){
lynxeyed_atsu 0:eb1247cc069b 109 DC = 1; // DATA
lynxeyed_atsu 0:eb1247cc069b 110 CS = 0; // CS active(toggle OLED)
lynxeyed_atsu 0:eb1247cc069b 111 spi.write(c);
lynxeyed_atsu 0:eb1247cc069b 112 CS = 1;
lynxeyed_atsu 0:eb1247cc069b 113 }
lynxeyed_atsu 0:eb1247cc069b 114
lynxeyed_atsu 0:eb1247cc069b 115 void DataWrite_to(unsigned int Dat)
lynxeyed_atsu 0:eb1247cc069b 116 {
lynxeyed_atsu 0:eb1247cc069b 117 DataWrite((unsigned char)((Dat >> 8)& 0x00ff));
lynxeyed_atsu 0:eb1247cc069b 118 DataWrite((unsigned char)(Dat & 0x00ff));
lynxeyed_atsu 0:eb1247cc069b 119 }
lynxeyed_atsu 0:eb1247cc069b 120
lynxeyed_atsu 0:eb1247cc069b 121
lynxeyed_atsu 0:eb1247cc069b 122
lynxeyed_atsu 0:eb1247cc069b 123
lynxeyed_atsu 0:eb1247cc069b 124 void Draw_Dot(unsigned char x,unsigned char y,unsigned int Color)
lynxeyed_atsu 0:eb1247cc069b 125 {
lynxeyed_atsu 0:eb1247cc069b 126 RegWrite(0x15);
lynxeyed_atsu 0:eb1247cc069b 127 RegWrite(x);
lynxeyed_atsu 0:eb1247cc069b 128 RegWrite(x);
lynxeyed_atsu 0:eb1247cc069b 129 RegWrite(0x75);
lynxeyed_atsu 0:eb1247cc069b 130 RegWrite(y);
lynxeyed_atsu 0:eb1247cc069b 131 RegWrite(y);
lynxeyed_atsu 0:eb1247cc069b 132 DataWrite_to(Color);
lynxeyed_atsu 0:eb1247cc069b 133 DataWrite_to(Color);
lynxeyed_atsu 0:eb1247cc069b 134 }
lynxeyed_atsu 0:eb1247cc069b 135
lynxeyed_atsu 0:eb1247cc069b 136 void Full_Screen(unsigned int Dot)
lynxeyed_atsu 0:eb1247cc069b 137 {
lynxeyed_atsu 0:eb1247cc069b 138 unsigned char i,j;
lynxeyed_atsu 0:eb1247cc069b 139 BGround_Color = Dot;
lynxeyed_atsu 0:eb1247cc069b 140 for(i=0;i<=64;i++)
lynxeyed_atsu 0:eb1247cc069b 141 {
lynxeyed_atsu 0:eb1247cc069b 142 for(j=0;j<96;j++)
lynxeyed_atsu 0:eb1247cc069b 143 {
lynxeyed_atsu 0:eb1247cc069b 144 Draw_Dot(j,i,Dot);
lynxeyed_atsu 0:eb1247cc069b 145 // DataWrite_to(Dot);
lynxeyed_atsu 0:eb1247cc069b 146 }
lynxeyed_atsu 0:eb1247cc069b 147 }
lynxeyed_atsu 0:eb1247cc069b 148 }
lynxeyed_atsu 0:eb1247cc069b 149
lynxeyed_atsu 0:eb1247cc069b 150 void ChangeFontColor(unsigned int color)
lynxeyed_atsu 0:eb1247cc069b 151 {
lynxeyed_atsu 0:eb1247cc069b 152 Char_Color = color;
lynxeyed_atsu 0:eb1247cc069b 153 }
lynxeyed_atsu 0:eb1247cc069b 154
lynxeyed_atsu 0:eb1247cc069b 155 void PutChar(unsigned char x,unsigned char y,unsigned int a)
lynxeyed_atsu 0:eb1247cc069b 156 {
lynxeyed_atsu 0:eb1247cc069b 157 int i,j;
lynxeyed_atsu 0:eb1247cc069b 158 unsigned char Temp=0;
lynxeyed_atsu 0:eb1247cc069b 159 j = 0;
lynxeyed_atsu 0:eb1247cc069b 160 i = 0;
lynxeyed_atsu 0:eb1247cc069b 161 //if(a < 32)a=32;
lynxeyed_atsu 0:eb1247cc069b 162 for(i=0; i<X_Witch; i++)
lynxeyed_atsu 0:eb1247cc069b 163 {
lynxeyed_atsu 0:eb1247cc069b 164 Temp = FontLookup[a][i];
lynxeyed_atsu 0:eb1247cc069b 165 for(j=Y_Witch;j!=0;j--){
lynxeyed_atsu 0:eb1247cc069b 166 if((Temp & 0x80)==0x80){
lynxeyed_atsu 0:eb1247cc069b 167 Draw_Dot(x+i,y+j,Char_Color);
lynxeyed_atsu 0:eb1247cc069b 168 }else{
lynxeyed_atsu 0:eb1247cc069b 169 Draw_Dot(x+i,y+j,BGround_Color);
lynxeyed_atsu 0:eb1247cc069b 170 }
lynxeyed_atsu 0:eb1247cc069b 171 Temp = Temp << 1;
lynxeyed_atsu 0:eb1247cc069b 172 }
lynxeyed_atsu 0:eb1247cc069b 173 }
lynxeyed_atsu 0:eb1247cc069b 174
lynxeyed_atsu 0:eb1247cc069b 175
lynxeyed_atsu 0:eb1247cc069b 176 }
lynxeyed_atsu 0:eb1247cc069b 177
lynxeyed_atsu 0:eb1247cc069b 178 void PutChar_ABC(unsigned char x,unsigned char y,unsigned int a)
lynxeyed_atsu 0:eb1247cc069b 179 {
lynxeyed_atsu 0:eb1247cc069b 180 int i,j;
lynxeyed_atsu 0:eb1247cc069b 181 unsigned char Temp=0;
lynxeyed_atsu 0:eb1247cc069b 182 j = 0;
lynxeyed_atsu 0:eb1247cc069b 183 i = 0;
lynxeyed_atsu 0:eb1247cc069b 184 for(i=0; i<5; i++)
lynxeyed_atsu 0:eb1247cc069b 185 {
lynxeyed_atsu 0:eb1247cc069b 186 if(a < 32)a=32;
lynxeyed_atsu 0:eb1247cc069b 187 Temp = FontLookup_ABC[a-32][i];
lynxeyed_atsu 0:eb1247cc069b 188 for(j=Y_Witch;j!=0;j--){
lynxeyed_atsu 0:eb1247cc069b 189 if((Temp & 0x80)==0x80){
lynxeyed_atsu 0:eb1247cc069b 190 Draw_Dot(x+i,y+j,Char_Color);
lynxeyed_atsu 0:eb1247cc069b 191 }else{
lynxeyed_atsu 0:eb1247cc069b 192 Draw_Dot(x+i,y+j,BGround_Color);
lynxeyed_atsu 0:eb1247cc069b 193 }
lynxeyed_atsu 0:eb1247cc069b 194 Temp = Temp << 1;
lynxeyed_atsu 0:eb1247cc069b 195 }
lynxeyed_atsu 0:eb1247cc069b 196 }
lynxeyed_atsu 0:eb1247cc069b 197
lynxeyed_atsu 0:eb1247cc069b 198
lynxeyed_atsu 0:eb1247cc069b 199 }
lynxeyed_atsu 0:eb1247cc069b 200
lynxeyed_atsu 0:eb1247cc069b 201
lynxeyed_atsu 0:eb1247cc069b 202
lynxeyed_atsu 0:eb1247cc069b 203 };
lynxeyed_atsu 0:eb1247cc069b 204
lynxeyed_atsu 0:eb1247cc069b 205
lynxeyed_atsu 0:eb1247cc069b 206 #endif