Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: co657_lcdplay co657_nrf52_beacons door_lock co657_IoT
Fork of C12832 by
Diff: C12832_lcd.cpp
- Revision:
- 12:4affce236743
- Parent:
- 11:1d68011a277c
- Parent:
- 10:8f86576007d6
- Child:
- 13:8a9cad03124b
--- a/C12832_lcd.cpp Sat Nov 09 01:00:59 2013 +0000
+++ b/C12832_lcd.cpp Sat Nov 09 01:02:48 2013 +0000
@@ -14,7 +14,8 @@
// 13.10.12 initial design
// 25.10.12 add autorefresh of screen
-// 25.10.12 add standart font
+// 25.10.12 add standart font
+// 20.12.12 add bitmap graphics
// optional defines :
// #define debug_lcd 1
@@ -107,7 +108,7 @@
#else
_spi.write(cmd);
#endif
-_CS = 1;
+ _CS = 1;
}
// write data to lcd controller
@@ -160,7 +161,7 @@
wr_cmd(0xA6); // display normal
-
+
#if defined TARGET_LPC1768 //setup DMA channel 0
LPC_SC->PCONP |= (1UL << 29); // Power up the GPDMA
LPC_GPDMA->DMACConfig = 1; // enable DMA controller
@@ -172,9 +173,10 @@
memset(buffer,0x00,512); // clear display buffer
copy_to_lcd();
auto_up = 1; // switch on auto update
- claim(stdout); // redirekt printf to lcd
+ // dont do this by default. Make the user call
+ //claim(stdout); // redirekt printf to lcd
locate(0,0);
- set_font((unsigned char*)Small_7); // standart font
+ set_font((unsigned char*)Small_7); // standart font
}
// set one pixel in buffer
@@ -199,7 +201,7 @@
void C12832_LCD::copy_to_lcd(void)
{
-#ifndef TARGET_LPC1768
+#ifndef TARGET_LPC1768
int i;
#endif
//page 0
@@ -207,7 +209,7 @@
wr_cmd(0x10); // set column hi nibble 0
wr_cmd(0xB0); // set page address 0
_A0 = 1;
-#if defined TARGET_LPC1768
+#if defined TARGET_LPC1768
_CS = 0;
// start 128 byte DMA transfer to SPI1
LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP1->DR; // we send to SSP1
@@ -224,17 +226,17 @@
} while ((LPC_SSP1->SR & 0x10) == 0x10); // SPI1 not idle
_CS = 1;
#else // no DMA
- for(i=0;i<128;i++){
+ for(i=0; i<128; i++) {
wr_dat(buffer[i]);
- }
-#endif
+ }
+#endif
// 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;
-#if defined TARGET_LPC1768
+#if defined TARGET_LPC1768
_CS = 0;
// start 128 byte DMA transfer to SPI1
LPC_GPDMA->DMACIntTCClear = 0x1;
@@ -249,17 +251,17 @@
} while ((LPC_SSP1->SR & 0x10) == 0x10); // SPI1 not idle
_CS = 1;
#else // no DMA
- for(i=128;i<256;i++){
+ for(i=128; i<256; i++) {
wr_dat(buffer[i]);
- }
-#endif
+ }
+#endif
//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;
-#if defined TARGET_LPC1768
+#if defined TARGET_LPC1768
_CS = 0;
// start 128 byte DMA transfer to SPI1
LPC_GPDMA->DMACIntTCClear = 0x1;
@@ -274,19 +276,19 @@
} while ((LPC_SSP1->SR & 0x10) == 0x10); // SPI1 not idle
_CS = 1;
#else // no DMA
- for(i=256;i<384;i++){
+ for(i=256; i<384; i++) {
wr_dat(buffer[i]);
- }
-#endif
+ }
+#endif
//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;
-#if defined TARGET_LPC1768
+
+ _CS = 0;
+#if defined TARGET_LPC1768
// start 128 byte DMA transfer to SPI1
LPC_GPDMA->DMACIntTCClear = 0x1;
LPC_GPDMA->DMACIntErrClr = 0x1;
@@ -300,10 +302,10 @@
} while ((LPC_SSP1->SR & 0x10) == 0x10); // SPI1 not idle
_CS = 1;
#else // no DMA
- for(i=384;i<512;i++){
+ for(i=384; i<512; i++) {
wr_dat(buffer[i]);
- }
-#endif
+ }
+#endif
}
void C12832_LCD::cls(void)
@@ -542,7 +544,7 @@
for (i = 0; i <= r; i++)
circle(x,y,i,color);
auto_up = up;
- if(auto_up) copy_to_lcd();
+ if(auto_up) copy_to_lcd();
}
void C12832_LCD::setmode(int mode)
@@ -637,10 +639,33 @@
void C12832_LCD::set_auto_up(unsigned int up)
{
if(up ) auto_up = 1;
+ else auto_up = 0;
}
-unsigned int C12832_LCD::get_auto_up(void){
+unsigned int C12832_LCD::get_auto_up(void)
+{
return (auto_up);
}
+void C12832_LCD::print_bm(Bitmap bm, int x, int y)
+{
+ int h,v,b;
+ char d;
+ for(v=0; v < bm.ySize; v++) { // lines
+ for(h=0; h < bm.xSize; h++) { // pixel
+ if(h + x > 127) break;
+ if(v + y > 31) break;
+ d = bm.data[bm.Byte_in_Line * v + ((h & 0xF8) >> 3)];
+ b = 0x80 >> (h & 0x07);
+ if((d & b) == 0) {
+ pixel(x+h,y+v,0);
+ } else {
+ pixel(x+h,y+v,1);
+ }
+ }
+ }
+
+}
+
+
