Testbespiel 1
Dependencies: mbed
C12832.cpp
00001 /* mbed library for the mbed Lab Board 128*32 pixel LCD 00002 * use C12832 controller 00003 * Copyright (c) 2012 Peter Drescher - DC2PD 00004 * Released under the MIT License: http://mbed.org/license/mit 00005 * 00006 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00007 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00008 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00009 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00010 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00011 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00012 * THE SOFTWARE. 00013 * 00014 * Library überarbeitet: 15.1.2014 Copyright (c) Dr.C.Eichtinger 00015 * File GraphicDisplay und TextDisplay, sowie small_7 font gestrichen 00016 * C12832.h und C12832.cpp überarbeitet und mit Ziffernfont ergänzt 00017 * Erweiterung: Zeichengröße 1..4 00018 */ 00019 00020 #include "mbed.h" 00021 #include "C12832.h" 00022 #include <stdio.h> 00023 #include "font.h" 00024 00025 00026 00027 C12832::C12832(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs) 00028 : _spi(mosi,NC,sck),_reset(reset),_A0(a0),_CS(ncs) 00029 { 00030 lcd_reset(); 00031 } 00032 00033 void C12832::invert(unsigned int o) 00034 { 00035 if(o == 0) wr_cmd(0xA6); 00036 else wr_cmd(0xA7); 00037 } 00038 00039 00040 00041 void C12832::wr_cmd(unsigned char cmd) 00042 { 00043 _A0 = 0; 00044 _CS = 0; 00045 _spi.write(cmd); 00046 _CS = 1; 00047 } 00048 00049 void C12832::wr_dat(unsigned char dat) 00050 { 00051 _A0 = 1; 00052 _CS = 0; 00053 _spi.write(dat); 00054 _CS = 1; 00055 } 00056 00057 void C12832::lcd_reset() 00058 { 00059 00060 _spi.format(8,3); // 8 bit spi mode 3 00061 _spi.frequency(20000000); // 19,2 Mhz SPI clock 00062 _A0 = 0; 00063 _CS = 1; 00064 _reset = 0; // display reset 00065 wait_us(50); 00066 _reset = 1; // end reset 00067 wait_ms(5); 00068 00069 /* Start Initial Sequence ----------------------------------------------------*/ 00070 00071 wr_cmd(0xAE); // display off 00072 wr_cmd(0xA2); // bias voltage 00073 00074 wr_cmd(0xA0); 00075 wr_cmd(0xC8); // colum normal 00076 00077 wr_cmd(0x22); // voltage resistor ratio 00078 wr_cmd(0x2F); // power on 00079 //wr_cmd(0xA4); // LCD display ram 00080 wr_cmd(0x40); // start line = 0 00081 wr_cmd(0xAF); // display ON 00082 00083 wr_cmd(0x81); // set contrast 00084 wr_cmd(0x17); // set contrast 00085 00086 wr_cmd(0xA6); // display normal 00087 00088 00089 // clear and update LCD 00090 memset(buffer,0x00,512); // clear display buffer 00091 copy_to_lcd(); 00092 } 00093 00094 void C12832::pixel(int x, int y, int color) 00095 { 00096 // first check parameter 00097 if(x > 127 || y > 31 || x < 0 || y < 0) return; 00098 00099 if(color == 0) 00100 buffer[x + ((y/8) * 128)] &= ~(1 << (y%8)); // erase pixel 00101 else 00102 buffer[x + ((y/8) * 128)] |= (1 << (y%8)); // set pixel 00103 00104 } 00105 00106 void C12832::copy_to_lcd(void) 00107 { 00108 00109 int i=0; 00110 00111 //page 0 00112 wr_cmd(0x00); // set column low nibble 0 00113 wr_cmd(0x10); // set column hi nibble 0 00114 wr_cmd(0xB0); // set page address 0 00115 _A0 = 1; 00116 for(i=0; i<128; i++) { 00117 wr_dat(buffer[i]); 00118 } 00119 00120 // page 1 00121 wr_cmd(0x00); // set column low nibble 0 00122 wr_cmd(0x10); // set column hi nibble 0 00123 wr_cmd(0xB1); // set page address 1 00124 _A0 = 1; 00125 for(i=128; i<256; i++) { 00126 wr_dat(buffer[i]); 00127 } 00128 00129 //page 2 00130 wr_cmd(0x00); // set column low nibble 0 00131 wr_cmd(0x10); // set column hi nibble 0 00132 wr_cmd(0xB2); // set page address 2 00133 _A0 = 1; 00134 for(i=256; i<384; i++) { 00135 wr_dat(buffer[i]); 00136 } 00137 00138 //page 3 00139 wr_cmd(0x00); // set column low nibble 0 00140 wr_cmd(0x10); // set column hi nibble 0 00141 wr_cmd(0xB3); // set page address 3 00142 _A0 = 1; 00143 00144 _CS = 0; 00145 00146 for(i=384; i<512; i++) { 00147 wr_dat(buffer[i]); 00148 } 00149 00150 } 00151 00152 void C12832::cls(void) 00153 { 00154 memset(buffer,0x00,512); // clear display buffer 00155 copy_to_lcd(); 00156 } 00157 00158 void C12832::rectangle(int x1, int x2, int y1, int y2) 00159 { 00160 for(int i=x1;i<=x2;i++) 00161 { 00162 pixel(i,y1,1); 00163 pixel(i,y2,1); 00164 } 00165 00166 for(int i=y1;i<=y2;i++) 00167 { 00168 pixel(x1,i,1); 00169 pixel(x2,i,1); 00170 } 00171 } 00172 00173 00174 void C12832::text(int ix, int iy, char* ctext, int length, int size) 00175 { 00176 int i; 00177 for(i=0;i<length;i++) 00178 { 00179 character(ix+i*6*size,iy,ctext[i],size); 00180 } 00181 } 00182 00183 00184 int C12832::character(int ix, int iy, char c, int size) 00185 { 00186 int code = 0; 00187 00188 if(ix >127 || ix < 0) return -1; 00189 if(iy >31 || iy < 0) return -1; 00190 if(c>= 0x20){ 00191 code = (int)(c - 0x20); 00192 } else if(c == 0x00) { 00193 code = 96; 00194 } else { 00195 return -1; 00196 } 00197 if((size < 0)||(size > 4)) return -1; 00198 00199 int index = code*5; 00200 unsigned char codebyte = 0; 00201 unsigned char codebit = 0; 00202 00203 00204 for(int i=0; i< 5 ; i++) 00205 { 00206 codebyte = font[index+i]; 00207 for(int j=0; j<7; j++) 00208 { 00209 codebit = codebyte & (1<<j); 00210 for (int k=0; k<size; k++) { 00211 for(int l=0;l<size;l++) { 00212 pixel(ix+i*size+k,iy+l+j*size,codebit); 00213 } 00214 } 00215 00216 } 00217 } 00218 return 0; 00219 } 00220 00221 void C12832::set_contrast(unsigned char volume) 00222 { 00223 wr_cmd(0x81); // set volume 00224 wr_cmd(volume & 0x3F); 00225 } 00226 00227
Generated on Mon Aug 15 2022 15:46:31 by
1.7.2
BULME_AHEL20