Testbespiel 1
Dependencies: mbed
C12832.cpp
- Committer:
- Bulme2
- Date:
- 2019-01-16
- Revision:
- 0:9718a8784c1b
File content as of revision 0:9718a8784c1b:
/* mbed library for the mbed Lab Board 128*32 pixel LCD * use C12832 controller * Copyright (c) 2012 Peter Drescher - DC2PD * Released under the MIT License: http://mbed.org/license/mit * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * Library überarbeitet: 15.1.2014 Copyright (c) Dr.C.Eichtinger * File GraphicDisplay und TextDisplay, sowie small_7 font gestrichen * C12832.h und C12832.cpp überarbeitet und mit Ziffernfont ergänzt * Erweiterung: Zeichengröße 1..4 */ #include "mbed.h" #include "C12832.h" #include <stdio.h> #include "font.h" C12832::C12832(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs) : _spi(mosi,NC,sck),_reset(reset),_A0(a0),_CS(ncs) { lcd_reset(); } void C12832::invert(unsigned int o) { if(o == 0) wr_cmd(0xA6); else wr_cmd(0xA7); } void C12832::wr_cmd(unsigned char cmd) { _A0 = 0; _CS = 0; _spi.write(cmd); _CS = 1; } void C12832::wr_dat(unsigned char dat) { _A0 = 1; _CS = 0; _spi.write(dat); _CS = 1; } void C12832::lcd_reset() { _spi.format(8,3); // 8 bit spi mode 3 _spi.frequency(20000000); // 19,2 Mhz SPI clock _A0 = 0; _CS = 1; _reset = 0; // display reset wait_us(50); _reset = 1; // end reset wait_ms(5); /* Start Initial Sequence ----------------------------------------------------*/ wr_cmd(0xAE); // display off wr_cmd(0xA2); // bias voltage wr_cmd(0xA0); wr_cmd(0xC8); // colum normal wr_cmd(0x22); // voltage resistor ratio wr_cmd(0x2F); // power on //wr_cmd(0xA4); // LCD display ram wr_cmd(0x40); // start line = 0 wr_cmd(0xAF); // display ON wr_cmd(0x81); // set contrast wr_cmd(0x17); // set contrast wr_cmd(0xA6); // display normal // clear and update LCD memset(buffer,0x00,512); // clear display buffer copy_to_lcd(); } void C12832::pixel(int x, int y, int color) { // first check parameter if(x > 127 || y > 31 || x < 0 || y < 0) return; if(color == 0) buffer[x + ((y/8) * 128)] &= ~(1 << (y%8)); // erase pixel else buffer[x + ((y/8) * 128)] |= (1 << (y%8)); // set pixel } void C12832::copy_to_lcd(void) { int i=0; //page 0 wr_cmd(0x00); // set column low nibble 0 wr_cmd(0x10); // set column hi nibble 0 wr_cmd(0xB0); // set page address 0 _A0 = 1; for(i=0; i<128; i++) { wr_dat(buffer[i]); } // page 1 wr_cmd(0x00); // set column low nibble 0 wr_cmd(0x10); // set column hi nibble 0 wr_cmd(0xB1); // set page address 1 _A0 = 1; for(i=128; i<256; i++) { wr_dat(buffer[i]); } //page 2 wr_cmd(0x00); // set column low nibble 0 wr_cmd(0x10); // set column hi nibble 0 wr_cmd(0xB2); // set page address 2 _A0 = 1; for(i=256; i<384; i++) { wr_dat(buffer[i]); } //page 3 wr_cmd(0x00); // set column low nibble 0 wr_cmd(0x10); // set column hi nibble 0 wr_cmd(0xB3); // set page address 3 _A0 = 1; _CS = 0; for(i=384; i<512; i++) { wr_dat(buffer[i]); } } void C12832::cls(void) { memset(buffer,0x00,512); // clear display buffer copy_to_lcd(); } void C12832::rectangle(int x1, int x2, int y1, int y2) { for(int i=x1;i<=x2;i++) { pixel(i,y1,1); pixel(i,y2,1); } for(int i=y1;i<=y2;i++) { pixel(x1,i,1); pixel(x2,i,1); } } void C12832::text(int ix, int iy, char* ctext, int length, int size) { int i; for(i=0;i<length;i++) { character(ix+i*6*size,iy,ctext[i],size); } } int C12832::character(int ix, int iy, char c, int size) { int code = 0; if(ix >127 || ix < 0) return -1; if(iy >31 || iy < 0) return -1; if(c>= 0x20){ code = (int)(c - 0x20); } else if(c == 0x00) { code = 96; } else { return -1; } if((size < 0)||(size > 4)) return -1; int index = code*5; unsigned char codebyte = 0; unsigned char codebit = 0; for(int i=0; i< 5 ; i++) { codebyte = font[index+i]; for(int j=0; j<7; j++) { codebit = codebyte & (1<<j); for (int k=0; k<size; k++) { for(int l=0;l<size;l++) { pixel(ix+i*size+k,iy+l+j*size,codebit); } } } } return 0; } void C12832::set_contrast(unsigned char volume) { wr_cmd(0x81); // set volume wr_cmd(volume & 0x3F); }