Dependencies: mbed lwip EAOLED
spioled.h@0:eb1247cc069b, 2011-01-12 (annotated)
- 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?
User | Revision | Line number | New 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 |