Arducam_UTFT_SPI_Library
Dependents: DigitalCamera_OV5642_WIZwiki-W7500 Prelude_OV5642_dev
UTFT_SPI.cpp@0:53f8d6b23687, 2015-10-29 (annotated)
- Committer:
- justinkim
- Date:
- Thu Oct 29 06:26:48 2015 +0000
- Revision:
- 0:53f8d6b23687
spi test failed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
justinkim | 0:53f8d6b23687 | 1 | /* |
justinkim | 0:53f8d6b23687 | 2 | UTFT.cpp - Arduino library support for Color TFT LCD Boards |
justinkim | 0:53f8d6b23687 | 3 | This is special porting for ArduCAM shield LCD screen. |
justinkim | 0:53f8d6b23687 | 4 | Use SPI bus interface and SSD1289 controller. Only work on |
justinkim | 0:53f8d6b23687 | 5 | ArduCAM shield Rev.C. |
justinkim | 0:53f8d6b23687 | 6 | For more information about ArduCAM shield please visit |
justinkim | 0:53f8d6b23687 | 7 | www.arducam.com |
justinkim | 0:53f8d6b23687 | 8 | Copyright (C)2010-2014 Henning Karlsen. All right reserved |
justinkim | 0:53f8d6b23687 | 9 | |
justinkim | 0:53f8d6b23687 | 10 | This library is the continuation of my ITDB02_Graph, ITDB02_Graph16 |
justinkim | 0:53f8d6b23687 | 11 | and RGB_GLCD libraries for Arduino and chipKit. As the number of |
justinkim | 0:53f8d6b23687 | 12 | supported display modules and controllers started to increase I felt |
justinkim | 0:53f8d6b23687 | 13 | it was time to make a single, universal library as it will be much |
justinkim | 0:53f8d6b23687 | 14 | easier to maintain in the future. |
justinkim | 0:53f8d6b23687 | 15 | |
justinkim | 0:53f8d6b23687 | 16 | Basic functionality of this library was origianlly based on the |
justinkim | 0:53f8d6b23687 | 17 | demo-code provided by ITead studio (for the ITDB02 modules) and |
justinkim | 0:53f8d6b23687 | 18 | NKC Electronics (for the RGB GLCD module/shield). |
justinkim | 0:53f8d6b23687 | 19 | |
justinkim | 0:53f8d6b23687 | 20 | This library supports a number of 8bit, 16bit and serial graphic |
justinkim | 0:53f8d6b23687 | 21 | displays, and will work with both Arduino and chipKit boards. For a |
justinkim | 0:53f8d6b23687 | 22 | full list of tested display modules and controllers, see the |
justinkim | 0:53f8d6b23687 | 23 | document UTFT_Supported_display_modules_&_controllers.pdf. |
justinkim | 0:53f8d6b23687 | 24 | |
justinkim | 0:53f8d6b23687 | 25 | When using 8bit and 16bit display modules there are some |
justinkim | 0:53f8d6b23687 | 26 | requirements you must adhere to. These requirements can be found |
justinkim | 0:53f8d6b23687 | 27 | in the document UTFT_Requirements.pdf. |
justinkim | 0:53f8d6b23687 | 28 | There are no special requirements when using serial displays. |
justinkim | 0:53f8d6b23687 | 29 | |
justinkim | 0:53f8d6b23687 | 30 | You can always find the latest version of the library at |
justinkim | 0:53f8d6b23687 | 31 | http://electronics.henningkarlsen.com/ |
justinkim | 0:53f8d6b23687 | 32 | |
justinkim | 0:53f8d6b23687 | 33 | If you make any modifications or improvements to the code, I would |
justinkim | 0:53f8d6b23687 | 34 | appreciate that you share the code with me so that I might include |
justinkim | 0:53f8d6b23687 | 35 | it in the next release. I can be contacted through |
justinkim | 0:53f8d6b23687 | 36 | http://electronics.henningkarlsen.com/contact.php. |
justinkim | 0:53f8d6b23687 | 37 | |
justinkim | 0:53f8d6b23687 | 38 | This library is free software; you can redistribute it and/or |
justinkim | 0:53f8d6b23687 | 39 | modify it under the terms of the GNU Lesser General Public |
justinkim | 0:53f8d6b23687 | 40 | License as published by the Free Software Foundation; either |
justinkim | 0:53f8d6b23687 | 41 | version 2.1 of the License, or (at your option) any later version. |
justinkim | 0:53f8d6b23687 | 42 | |
justinkim | 0:53f8d6b23687 | 43 | This library is distributed in the hope that it will be useful, |
justinkim | 0:53f8d6b23687 | 44 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
justinkim | 0:53f8d6b23687 | 45 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
justinkim | 0:53f8d6b23687 | 46 | Lesser General Public License for more details. |
justinkim | 0:53f8d6b23687 | 47 | |
justinkim | 0:53f8d6b23687 | 48 | You should have received a copy of the GNU Lesser General Public |
justinkim | 0:53f8d6b23687 | 49 | License along with this library; if not, write to the Free Software |
justinkim | 0:53f8d6b23687 | 50 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
justinkim | 0:53f8d6b23687 | 51 | */ |
justinkim | 0:53f8d6b23687 | 52 | |
justinkim | 0:53f8d6b23687 | 53 | #include "mbed.h" |
justinkim | 0:53f8d6b23687 | 54 | #include "UTFT_SPI.h" |
justinkim | 0:53f8d6b23687 | 55 | |
justinkim | 0:53f8d6b23687 | 56 | ArduLCD::ArduLCD(PinName mosi, PinName miso, PinName sck, PinName cs) |
justinkim | 0:53f8d6b23687 | 57 | : spi(mosi,miso,sck), _cs(cs) |
justinkim | 0:53f8d6b23687 | 58 | { |
justinkim | 0:53f8d6b23687 | 59 | //Must initialize the Bus default status |
justinkim | 0:53f8d6b23687 | 60 | _cs = 1; |
justinkim | 0:53f8d6b23687 | 61 | model = SSD1289; |
justinkim | 0:53f8d6b23687 | 62 | disp_x_size=239; |
justinkim | 0:53f8d6b23687 | 63 | disp_y_size=319; |
justinkim | 0:53f8d6b23687 | 64 | display_transfer_mode=8; |
justinkim | 0:53f8d6b23687 | 65 | |
justinkim | 0:53f8d6b23687 | 66 | display_model=model; |
justinkim | 0:53f8d6b23687 | 67 | |
justinkim | 0:53f8d6b23687 | 68 | //_set_direction_registers(display_transfer_mode); |
justinkim | 0:53f8d6b23687 | 69 | //P_CS = portOutputRegister(digitalPinToPort(CS)); |
justinkim | 0:53f8d6b23687 | 70 | //B_CS = digitalPinToBitMask(CS); |
justinkim | 0:53f8d6b23687 | 71 | //pinMode(CS,OUTPUT); |
justinkim | 0:53f8d6b23687 | 72 | } |
justinkim | 0:53f8d6b23687 | 73 | |
justinkim | 0:53f8d6b23687 | 74 | int ArduLCD::bus_write(int address, int value) |
justinkim | 0:53f8d6b23687 | 75 | { |
justinkim | 0:53f8d6b23687 | 76 | _cs = 0; |
justinkim | 0:53f8d6b23687 | 77 | spi.write(address); |
justinkim | 0:53f8d6b23687 | 78 | spi.write(value); |
justinkim | 0:53f8d6b23687 | 79 | _cs = 1; |
justinkim | 0:53f8d6b23687 | 80 | return value; |
justinkim | 0:53f8d6b23687 | 81 | } |
justinkim | 0:53f8d6b23687 | 82 | |
justinkim | 0:53f8d6b23687 | 83 | uint8_t ArduLCD::bus_read(int address) |
justinkim | 0:53f8d6b23687 | 84 | { |
justinkim | 0:53f8d6b23687 | 85 | uint8_t value = 0; |
justinkim | 0:53f8d6b23687 | 86 | _cs = 0; |
justinkim | 0:53f8d6b23687 | 87 | spi.write(address); |
justinkim | 0:53f8d6b23687 | 88 | value = spi.write(0x00); |
justinkim | 0:53f8d6b23687 | 89 | _cs = 1; |
justinkim | 0:53f8d6b23687 | 90 | return value; |
justinkim | 0:53f8d6b23687 | 91 | } |
justinkim | 0:53f8d6b23687 | 92 | |
justinkim | 0:53f8d6b23687 | 93 | void ArduLCD::LCD_Write_COM(char VL) |
justinkim | 0:53f8d6b23687 | 94 | { |
justinkim | 0:53f8d6b23687 | 95 | bus_write(0xBE, VL); |
justinkim | 0:53f8d6b23687 | 96 | } |
justinkim | 0:53f8d6b23687 | 97 | |
justinkim | 0:53f8d6b23687 | 98 | void ArduLCD::LCD_Write_DATA(char VH,char VL) |
justinkim | 0:53f8d6b23687 | 99 | { |
justinkim | 0:53f8d6b23687 | 100 | bus_write(0xBF, VH); |
justinkim | 0:53f8d6b23687 | 101 | bus_write(0xBF, VL); |
justinkim | 0:53f8d6b23687 | 102 | } |
justinkim | 0:53f8d6b23687 | 103 | |
justinkim | 0:53f8d6b23687 | 104 | void ArduLCD::LCD_Write_COM_DATA(char com1,int dat1) |
justinkim | 0:53f8d6b23687 | 105 | { |
justinkim | 0:53f8d6b23687 | 106 | LCD_Write_COM(com1); |
justinkim | 0:53f8d6b23687 | 107 | LCD_Write_DATA(dat1>>8,dat1); |
justinkim | 0:53f8d6b23687 | 108 | |
justinkim | 0:53f8d6b23687 | 109 | } |
justinkim | 0:53f8d6b23687 | 110 | |
justinkim | 0:53f8d6b23687 | 111 | void ArduLCD::LCD_Writ_Bus(char VH,char VL) |
justinkim | 0:53f8d6b23687 | 112 | { |
justinkim | 0:53f8d6b23687 | 113 | LCD_Write_DATA(VH,VL); |
justinkim | 0:53f8d6b23687 | 114 | } |
justinkim | 0:53f8d6b23687 | 115 | |
justinkim | 0:53f8d6b23687 | 116 | void ArduLCD::InitLCD(uint8_t orientation) |
justinkim | 0:53f8d6b23687 | 117 | { |
justinkim | 0:53f8d6b23687 | 118 | orient=orientation; |
justinkim | 0:53f8d6b23687 | 119 | |
justinkim | 0:53f8d6b23687 | 120 | LCD_Write_COM_DATA(0x00,0x0001); |
justinkim | 0:53f8d6b23687 | 121 | LCD_Write_COM_DATA(0x03,0xA8A4); |
justinkim | 0:53f8d6b23687 | 122 | LCD_Write_COM_DATA(0x0C,0x0000); |
justinkim | 0:53f8d6b23687 | 123 | LCD_Write_COM_DATA(0x0D,0x080C); |
justinkim | 0:53f8d6b23687 | 124 | LCD_Write_COM_DATA(0x0E,0x2B00); |
justinkim | 0:53f8d6b23687 | 125 | LCD_Write_COM_DATA(0x1E,0x00B7); |
justinkim | 0:53f8d6b23687 | 126 | LCD_Write_COM_DATA(0x01,0x693F); |
justinkim | 0:53f8d6b23687 | 127 | LCD_Write_COM_DATA(0x02,0x0600); |
justinkim | 0:53f8d6b23687 | 128 | LCD_Write_COM_DATA(0x10,0x0000); |
justinkim | 0:53f8d6b23687 | 129 | LCD_Write_COM_DATA(0x11,0x6078); |
justinkim | 0:53f8d6b23687 | 130 | LCD_Write_COM_DATA(0x05,0x0000); |
justinkim | 0:53f8d6b23687 | 131 | LCD_Write_COM_DATA(0x06,0x0000); |
justinkim | 0:53f8d6b23687 | 132 | LCD_Write_COM_DATA(0x16,0xEF1C); |
justinkim | 0:53f8d6b23687 | 133 | LCD_Write_COM_DATA(0x17,0x0003); |
justinkim | 0:53f8d6b23687 | 134 | LCD_Write_COM_DATA(0x07,0x0233); |
justinkim | 0:53f8d6b23687 | 135 | LCD_Write_COM_DATA(0x0B,0x0000); |
justinkim | 0:53f8d6b23687 | 136 | LCD_Write_COM_DATA(0x0F,0x0000); |
justinkim | 0:53f8d6b23687 | 137 | LCD_Write_COM_DATA(0x41,0x0000); |
justinkim | 0:53f8d6b23687 | 138 | LCD_Write_COM_DATA(0x42,0x0000); |
justinkim | 0:53f8d6b23687 | 139 | LCD_Write_COM_DATA(0x48,0x0000); |
justinkim | 0:53f8d6b23687 | 140 | LCD_Write_COM_DATA(0x49,0x013F); |
justinkim | 0:53f8d6b23687 | 141 | LCD_Write_COM_DATA(0x4A,0x0000); |
justinkim | 0:53f8d6b23687 | 142 | LCD_Write_COM_DATA(0x4B,0x0000); |
justinkim | 0:53f8d6b23687 | 143 | LCD_Write_COM_DATA(0x44,0xEF00); |
justinkim | 0:53f8d6b23687 | 144 | LCD_Write_COM_DATA(0x45,0x0000); |
justinkim | 0:53f8d6b23687 | 145 | LCD_Write_COM_DATA(0x46,0x013F); |
justinkim | 0:53f8d6b23687 | 146 | LCD_Write_COM_DATA(0x30,0x0707); |
justinkim | 0:53f8d6b23687 | 147 | LCD_Write_COM_DATA(0x31,0x0204); |
justinkim | 0:53f8d6b23687 | 148 | LCD_Write_COM_DATA(0x32,0x0204); |
justinkim | 0:53f8d6b23687 | 149 | LCD_Write_COM_DATA(0x33,0x0502); |
justinkim | 0:53f8d6b23687 | 150 | LCD_Write_COM_DATA(0x34,0x0507); |
justinkim | 0:53f8d6b23687 | 151 | LCD_Write_COM_DATA(0x35,0x0204); |
justinkim | 0:53f8d6b23687 | 152 | LCD_Write_COM_DATA(0x36,0x0204); |
justinkim | 0:53f8d6b23687 | 153 | LCD_Write_COM_DATA(0x37,0x0502); |
justinkim | 0:53f8d6b23687 | 154 | LCD_Write_COM_DATA(0x3A,0x0302); |
justinkim | 0:53f8d6b23687 | 155 | LCD_Write_COM_DATA(0x3B,0x0302); |
justinkim | 0:53f8d6b23687 | 156 | LCD_Write_COM_DATA(0x23,0x0000); |
justinkim | 0:53f8d6b23687 | 157 | LCD_Write_COM_DATA(0x24,0x0000); |
justinkim | 0:53f8d6b23687 | 158 | LCD_Write_COM_DATA(0x25,0x8000); |
justinkim | 0:53f8d6b23687 | 159 | LCD_Write_COM_DATA(0x4f,0x0000); |
justinkim | 0:53f8d6b23687 | 160 | LCD_Write_COM_DATA(0x4e,0x0000); |
justinkim | 0:53f8d6b23687 | 161 | LCD_Write_COM(0x22); |
justinkim | 0:53f8d6b23687 | 162 | |
justinkim | 0:53f8d6b23687 | 163 | //setColor(255, 255, 255); |
justinkim | 0:53f8d6b23687 | 164 | //setBackColor(0, 0, 0); |
justinkim | 0:53f8d6b23687 | 165 | cfont.font=0; |
justinkim | 0:53f8d6b23687 | 166 | clrScr(); |
justinkim | 0:53f8d6b23687 | 167 | } |
justinkim | 0:53f8d6b23687 | 168 | |
justinkim | 0:53f8d6b23687 | 169 | void ArduLCD::setXY(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) |
justinkim | 0:53f8d6b23687 | 170 | { |
justinkim | 0:53f8d6b23687 | 171 | if (orient==LANDSCAPE) |
justinkim | 0:53f8d6b23687 | 172 | { |
justinkim | 0:53f8d6b23687 | 173 | swap(uint16_t, x1, y1); |
justinkim | 0:53f8d6b23687 | 174 | swap(uint16_t, x2, y2) |
justinkim | 0:53f8d6b23687 | 175 | y1=disp_y_size-y1; |
justinkim | 0:53f8d6b23687 | 176 | y2=disp_y_size-y2; |
justinkim | 0:53f8d6b23687 | 177 | swap(uint16_t, y1, y2) |
justinkim | 0:53f8d6b23687 | 178 | } |
justinkim | 0:53f8d6b23687 | 179 | |
justinkim | 0:53f8d6b23687 | 180 | LCD_Write_COM_DATA(0x44,(x2<<8)+x1); |
justinkim | 0:53f8d6b23687 | 181 | LCD_Write_COM_DATA(0x45,y1); |
justinkim | 0:53f8d6b23687 | 182 | LCD_Write_COM_DATA(0x46,y2); |
justinkim | 0:53f8d6b23687 | 183 | LCD_Write_COM_DATA(0x4e,x1); |
justinkim | 0:53f8d6b23687 | 184 | LCD_Write_COM_DATA(0x4f,y1); |
justinkim | 0:53f8d6b23687 | 185 | LCD_Write_COM(0x22); |
justinkim | 0:53f8d6b23687 | 186 | } |
justinkim | 0:53f8d6b23687 | 187 | |
justinkim | 0:53f8d6b23687 | 188 | void ArduLCD::clrXY() |
justinkim | 0:53f8d6b23687 | 189 | { |
justinkim | 0:53f8d6b23687 | 190 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 191 | setXY(0,0,disp_x_size,disp_y_size); |
justinkim | 0:53f8d6b23687 | 192 | else |
justinkim | 0:53f8d6b23687 | 193 | setXY(0,0,disp_y_size,disp_x_size); |
justinkim | 0:53f8d6b23687 | 194 | } |
justinkim | 0:53f8d6b23687 | 195 | |
justinkim | 0:53f8d6b23687 | 196 | void ArduLCD::resetXY() |
justinkim | 0:53f8d6b23687 | 197 | { |
justinkim | 0:53f8d6b23687 | 198 | clrXY(); |
justinkim | 0:53f8d6b23687 | 199 | } |
justinkim | 0:53f8d6b23687 | 200 | |
justinkim | 0:53f8d6b23687 | 201 | void ArduLCD::drawRect(int x1, int y1, int x2, int y2) |
justinkim | 0:53f8d6b23687 | 202 | { |
justinkim | 0:53f8d6b23687 | 203 | if (x1>x2) |
justinkim | 0:53f8d6b23687 | 204 | { |
justinkim | 0:53f8d6b23687 | 205 | swap(int, x1, x2); |
justinkim | 0:53f8d6b23687 | 206 | } |
justinkim | 0:53f8d6b23687 | 207 | if (y1>y2) |
justinkim | 0:53f8d6b23687 | 208 | { |
justinkim | 0:53f8d6b23687 | 209 | swap(int, y1, y2); |
justinkim | 0:53f8d6b23687 | 210 | } |
justinkim | 0:53f8d6b23687 | 211 | |
justinkim | 0:53f8d6b23687 | 212 | drawHLine(x1, y1, x2-x1); |
justinkim | 0:53f8d6b23687 | 213 | drawHLine(x1, y2, x2-x1); |
justinkim | 0:53f8d6b23687 | 214 | drawVLine(x1, y1, y2-y1); |
justinkim | 0:53f8d6b23687 | 215 | drawVLine(x2, y1, y2-y1); |
justinkim | 0:53f8d6b23687 | 216 | } |
justinkim | 0:53f8d6b23687 | 217 | |
justinkim | 0:53f8d6b23687 | 218 | void ArduLCD::drawRoundRect(int x1, int y1, int x2, int y2) |
justinkim | 0:53f8d6b23687 | 219 | { |
justinkim | 0:53f8d6b23687 | 220 | if (x1>x2) |
justinkim | 0:53f8d6b23687 | 221 | { |
justinkim | 0:53f8d6b23687 | 222 | swap(int, x1, x2); |
justinkim | 0:53f8d6b23687 | 223 | } |
justinkim | 0:53f8d6b23687 | 224 | if (y1>y2) |
justinkim | 0:53f8d6b23687 | 225 | { |
justinkim | 0:53f8d6b23687 | 226 | swap(int, y1, y2); |
justinkim | 0:53f8d6b23687 | 227 | } |
justinkim | 0:53f8d6b23687 | 228 | if ((x2-x1)>4 && (y2-y1)>4) |
justinkim | 0:53f8d6b23687 | 229 | { |
justinkim | 0:53f8d6b23687 | 230 | drawPixel(x1+1,y1+1); |
justinkim | 0:53f8d6b23687 | 231 | drawPixel(x2-1,y1+1); |
justinkim | 0:53f8d6b23687 | 232 | drawPixel(x1+1,y2-1); |
justinkim | 0:53f8d6b23687 | 233 | drawPixel(x2-1,y2-1); |
justinkim | 0:53f8d6b23687 | 234 | drawHLine(x1+2, y1, x2-x1-4); |
justinkim | 0:53f8d6b23687 | 235 | drawHLine(x1+2, y2, x2-x1-4); |
justinkim | 0:53f8d6b23687 | 236 | drawVLine(x1, y1+2, y2-y1-4); |
justinkim | 0:53f8d6b23687 | 237 | drawVLine(x2, y1+2, y2-y1-4); |
justinkim | 0:53f8d6b23687 | 238 | } |
justinkim | 0:53f8d6b23687 | 239 | } |
justinkim | 0:53f8d6b23687 | 240 | |
justinkim | 0:53f8d6b23687 | 241 | void ArduLCD::fillRect(int x1, int y1, int x2, int y2) |
justinkim | 0:53f8d6b23687 | 242 | { |
justinkim | 0:53f8d6b23687 | 243 | if (x1>x2) |
justinkim | 0:53f8d6b23687 | 244 | { |
justinkim | 0:53f8d6b23687 | 245 | swap(int, x1, x2); |
justinkim | 0:53f8d6b23687 | 246 | } |
justinkim | 0:53f8d6b23687 | 247 | if (y1>y2) |
justinkim | 0:53f8d6b23687 | 248 | { |
justinkim | 0:53f8d6b23687 | 249 | swap(int, y1, y2); |
justinkim | 0:53f8d6b23687 | 250 | } |
justinkim | 0:53f8d6b23687 | 251 | |
justinkim | 0:53f8d6b23687 | 252 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 253 | { |
justinkim | 0:53f8d6b23687 | 254 | for (int i=0; i<((y2-y1)/2)+1; i++) |
justinkim | 0:53f8d6b23687 | 255 | { |
justinkim | 0:53f8d6b23687 | 256 | drawHLine(x1, y1+i, x2-x1); |
justinkim | 0:53f8d6b23687 | 257 | drawHLine(x1, y2-i, x2-x1); |
justinkim | 0:53f8d6b23687 | 258 | } |
justinkim | 0:53f8d6b23687 | 259 | } |
justinkim | 0:53f8d6b23687 | 260 | else |
justinkim | 0:53f8d6b23687 | 261 | { |
justinkim | 0:53f8d6b23687 | 262 | for (int i=0; i<((x2-x1)/2)+1; i++) |
justinkim | 0:53f8d6b23687 | 263 | { |
justinkim | 0:53f8d6b23687 | 264 | drawVLine(x1+i, y1, y2-y1); |
justinkim | 0:53f8d6b23687 | 265 | drawVLine(x2-i, y1, y2-y1); |
justinkim | 0:53f8d6b23687 | 266 | } |
justinkim | 0:53f8d6b23687 | 267 | } |
justinkim | 0:53f8d6b23687 | 268 | } |
justinkim | 0:53f8d6b23687 | 269 | |
justinkim | 0:53f8d6b23687 | 270 | void ArduLCD::fillRoundRect(int x1, int y1, int x2, int y2) |
justinkim | 0:53f8d6b23687 | 271 | { |
justinkim | 0:53f8d6b23687 | 272 | if (x1>x2) |
justinkim | 0:53f8d6b23687 | 273 | { |
justinkim | 0:53f8d6b23687 | 274 | swap(int, x1, x2); |
justinkim | 0:53f8d6b23687 | 275 | } |
justinkim | 0:53f8d6b23687 | 276 | if (y1>y2) |
justinkim | 0:53f8d6b23687 | 277 | { |
justinkim | 0:53f8d6b23687 | 278 | swap(int, y1, y2); |
justinkim | 0:53f8d6b23687 | 279 | } |
justinkim | 0:53f8d6b23687 | 280 | |
justinkim | 0:53f8d6b23687 | 281 | if ((x2-x1)>4 && (y2-y1)>4) |
justinkim | 0:53f8d6b23687 | 282 | { |
justinkim | 0:53f8d6b23687 | 283 | for (int i=0; i<((y2-y1)/2)+1; i++) |
justinkim | 0:53f8d6b23687 | 284 | { |
justinkim | 0:53f8d6b23687 | 285 | switch(i) |
justinkim | 0:53f8d6b23687 | 286 | { |
justinkim | 0:53f8d6b23687 | 287 | case 0: |
justinkim | 0:53f8d6b23687 | 288 | drawHLine(x1+2, y1+i, x2-x1-4); |
justinkim | 0:53f8d6b23687 | 289 | drawHLine(x1+2, y2-i, x2-x1-4); |
justinkim | 0:53f8d6b23687 | 290 | break; |
justinkim | 0:53f8d6b23687 | 291 | case 1: |
justinkim | 0:53f8d6b23687 | 292 | drawHLine(x1+1, y1+i, x2-x1-2); |
justinkim | 0:53f8d6b23687 | 293 | drawHLine(x1+1, y2-i, x2-x1-2); |
justinkim | 0:53f8d6b23687 | 294 | break; |
justinkim | 0:53f8d6b23687 | 295 | default: |
justinkim | 0:53f8d6b23687 | 296 | drawHLine(x1, y1+i, x2-x1); |
justinkim | 0:53f8d6b23687 | 297 | drawHLine(x1, y2-i, x2-x1); |
justinkim | 0:53f8d6b23687 | 298 | } |
justinkim | 0:53f8d6b23687 | 299 | } |
justinkim | 0:53f8d6b23687 | 300 | } |
justinkim | 0:53f8d6b23687 | 301 | } |
justinkim | 0:53f8d6b23687 | 302 | |
justinkim | 0:53f8d6b23687 | 303 | void ArduLCD::drawCircle(int x, int y, int radius) |
justinkim | 0:53f8d6b23687 | 304 | { |
justinkim | 0:53f8d6b23687 | 305 | int f = 1 - radius; |
justinkim | 0:53f8d6b23687 | 306 | int ddF_x = 1; |
justinkim | 0:53f8d6b23687 | 307 | int ddF_y = -2 * radius; |
justinkim | 0:53f8d6b23687 | 308 | int x1 = 0; |
justinkim | 0:53f8d6b23687 | 309 | int y1 = radius; |
justinkim | 0:53f8d6b23687 | 310 | |
justinkim | 0:53f8d6b23687 | 311 | _cs = 0; |
justinkim | 0:53f8d6b23687 | 312 | setXY(x, y + radius, x, y + radius); |
justinkim | 0:53f8d6b23687 | 313 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 314 | setXY(x, y - radius, x, y - radius); |
justinkim | 0:53f8d6b23687 | 315 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 316 | setXY(x + radius, y, x + radius, y); |
justinkim | 0:53f8d6b23687 | 317 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 318 | setXY(x - radius, y, x - radius, y); |
justinkim | 0:53f8d6b23687 | 319 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 320 | |
justinkim | 0:53f8d6b23687 | 321 | while(x1 < y1) |
justinkim | 0:53f8d6b23687 | 322 | { |
justinkim | 0:53f8d6b23687 | 323 | if(f >= 0) |
justinkim | 0:53f8d6b23687 | 324 | { |
justinkim | 0:53f8d6b23687 | 325 | y1--; |
justinkim | 0:53f8d6b23687 | 326 | ddF_y += 2; |
justinkim | 0:53f8d6b23687 | 327 | f += ddF_y; |
justinkim | 0:53f8d6b23687 | 328 | } |
justinkim | 0:53f8d6b23687 | 329 | x1++; |
justinkim | 0:53f8d6b23687 | 330 | ddF_x += 2; |
justinkim | 0:53f8d6b23687 | 331 | f += ddF_x; |
justinkim | 0:53f8d6b23687 | 332 | setXY(x + x1, y + y1, x + x1, y + y1); |
justinkim | 0:53f8d6b23687 | 333 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 334 | setXY(x - x1, y + y1, x - x1, y + y1); |
justinkim | 0:53f8d6b23687 | 335 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 336 | setXY(x + x1, y - y1, x + x1, y - y1); |
justinkim | 0:53f8d6b23687 | 337 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 338 | setXY(x - x1, y - y1, x - x1, y - y1); |
justinkim | 0:53f8d6b23687 | 339 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 340 | setXY(x + y1, y + x1, x + y1, y + x1); |
justinkim | 0:53f8d6b23687 | 341 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 342 | setXY(x - y1, y + x1, x - y1, y + x1); |
justinkim | 0:53f8d6b23687 | 343 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 344 | setXY(x + y1, y - x1, x + y1, y - x1); |
justinkim | 0:53f8d6b23687 | 345 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 346 | setXY(x - y1, y - x1, x - y1, y - x1); |
justinkim | 0:53f8d6b23687 | 347 | LCD_Write_DATA(fch,fcl); |
justinkim | 0:53f8d6b23687 | 348 | } |
justinkim | 0:53f8d6b23687 | 349 | _cs = 1; |
justinkim | 0:53f8d6b23687 | 350 | clrXY(); |
justinkim | 0:53f8d6b23687 | 351 | } |
justinkim | 0:53f8d6b23687 | 352 | |
justinkim | 0:53f8d6b23687 | 353 | void ArduLCD::fillCircle(int x, int y, int radius) |
justinkim | 0:53f8d6b23687 | 354 | { |
justinkim | 0:53f8d6b23687 | 355 | for(int y1=-radius; y1<=0; y1++) |
justinkim | 0:53f8d6b23687 | 356 | for(int x1=-radius; x1<=0; x1++) |
justinkim | 0:53f8d6b23687 | 357 | if(x1*x1+y1*y1 <= radius*radius) |
justinkim | 0:53f8d6b23687 | 358 | { |
justinkim | 0:53f8d6b23687 | 359 | drawHLine(x+x1, y+y1, 2*(-x1)); |
justinkim | 0:53f8d6b23687 | 360 | drawHLine(x+x1, y-y1, 2*(-x1)); |
justinkim | 0:53f8d6b23687 | 361 | break; |
justinkim | 0:53f8d6b23687 | 362 | } |
justinkim | 0:53f8d6b23687 | 363 | } |
justinkim | 0:53f8d6b23687 | 364 | |
justinkim | 0:53f8d6b23687 | 365 | void ArduLCD::clrScr() |
justinkim | 0:53f8d6b23687 | 366 | { |
justinkim | 0:53f8d6b23687 | 367 | long i; |
justinkim | 0:53f8d6b23687 | 368 | |
justinkim | 0:53f8d6b23687 | 369 | clrXY(); |
justinkim | 0:53f8d6b23687 | 370 | |
justinkim | 0:53f8d6b23687 | 371 | for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) |
justinkim | 0:53f8d6b23687 | 372 | { |
justinkim | 0:53f8d6b23687 | 373 | if (display_transfer_mode!=1) |
justinkim | 0:53f8d6b23687 | 374 | LCD_Writ_Bus(0x00,0x00); |
justinkim | 0:53f8d6b23687 | 375 | else |
justinkim | 0:53f8d6b23687 | 376 | { |
justinkim | 0:53f8d6b23687 | 377 | LCD_Writ_Bus(1,0); |
justinkim | 0:53f8d6b23687 | 378 | LCD_Writ_Bus(1,0); |
justinkim | 0:53f8d6b23687 | 379 | |
justinkim | 0:53f8d6b23687 | 380 | //LCD_Writ_Bus(00,0x55); |
justinkim | 0:53f8d6b23687 | 381 | } |
justinkim | 0:53f8d6b23687 | 382 | //delay(1); |
justinkim | 0:53f8d6b23687 | 383 | #if defined(ESP8266) |
justinkim | 0:53f8d6b23687 | 384 | yield(); |
justinkim | 0:53f8d6b23687 | 385 | #endif |
justinkim | 0:53f8d6b23687 | 386 | } |
justinkim | 0:53f8d6b23687 | 387 | } |
justinkim | 0:53f8d6b23687 | 388 | |
justinkim | 0:53f8d6b23687 | 389 | void ArduLCD::fillScr(uint8_t r, uint8_t g, uint8_t b) |
justinkim | 0:53f8d6b23687 | 390 | { |
justinkim | 0:53f8d6b23687 | 391 | uint16_t color = ((r&248)<<8 | (g&252)<<3 | (b&248)>>3); |
justinkim | 0:53f8d6b23687 | 392 | fillScr(color); |
justinkim | 0:53f8d6b23687 | 393 | } |
justinkim | 0:53f8d6b23687 | 394 | |
justinkim | 0:53f8d6b23687 | 395 | void ArduLCD::fillScr(uint16_t color) |
justinkim | 0:53f8d6b23687 | 396 | { |
justinkim | 0:53f8d6b23687 | 397 | long i; |
justinkim | 0:53f8d6b23687 | 398 | char ch, cl; |
justinkim | 0:53f8d6b23687 | 399 | |
justinkim | 0:53f8d6b23687 | 400 | ch=uint8_t(color>>8); |
justinkim | 0:53f8d6b23687 | 401 | cl=uint8_t(color & 0xFF); |
justinkim | 0:53f8d6b23687 | 402 | |
justinkim | 0:53f8d6b23687 | 403 | clrXY(); |
justinkim | 0:53f8d6b23687 | 404 | |
justinkim | 0:53f8d6b23687 | 405 | for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) |
justinkim | 0:53f8d6b23687 | 406 | { |
justinkim | 0:53f8d6b23687 | 407 | if (display_transfer_mode!=1) |
justinkim | 0:53f8d6b23687 | 408 | LCD_Writ_Bus(ch,cl); |
justinkim | 0:53f8d6b23687 | 409 | else |
justinkim | 0:53f8d6b23687 | 410 | { |
justinkim | 0:53f8d6b23687 | 411 | LCD_Writ_Bus(1,ch); |
justinkim | 0:53f8d6b23687 | 412 | LCD_Writ_Bus(1,cl); |
justinkim | 0:53f8d6b23687 | 413 | } |
justinkim | 0:53f8d6b23687 | 414 | #if defined(ESP8266) |
justinkim | 0:53f8d6b23687 | 415 | yield(); |
justinkim | 0:53f8d6b23687 | 416 | #endif |
justinkim | 0:53f8d6b23687 | 417 | } |
justinkim | 0:53f8d6b23687 | 418 | |
justinkim | 0:53f8d6b23687 | 419 | } |
justinkim | 0:53f8d6b23687 | 420 | |
justinkim | 0:53f8d6b23687 | 421 | void ArduLCD::setColor(uint8_t r, uint8_t g, uint8_t b) |
justinkim | 0:53f8d6b23687 | 422 | { |
justinkim | 0:53f8d6b23687 | 423 | fch=((r&248)|g>>5); |
justinkim | 0:53f8d6b23687 | 424 | fcl=((g&28)<<3|b>>3); |
justinkim | 0:53f8d6b23687 | 425 | } |
justinkim | 0:53f8d6b23687 | 426 | |
justinkim | 0:53f8d6b23687 | 427 | void ArduLCD::setColor(uint16_t color) |
justinkim | 0:53f8d6b23687 | 428 | { |
justinkim | 0:53f8d6b23687 | 429 | fch=uint8_t(color>>8); |
justinkim | 0:53f8d6b23687 | 430 | fcl=uint8_t(color & 0xFF); |
justinkim | 0:53f8d6b23687 | 431 | } |
justinkim | 0:53f8d6b23687 | 432 | |
justinkim | 0:53f8d6b23687 | 433 | uint16_t ArduLCD::getColor() |
justinkim | 0:53f8d6b23687 | 434 | { |
justinkim | 0:53f8d6b23687 | 435 | return (fch<<8) | fcl; |
justinkim | 0:53f8d6b23687 | 436 | } |
justinkim | 0:53f8d6b23687 | 437 | |
justinkim | 0:53f8d6b23687 | 438 | void ArduLCD::setBackColor(uint8_t r, uint8_t g, uint8_t b) |
justinkim | 0:53f8d6b23687 | 439 | { |
justinkim | 0:53f8d6b23687 | 440 | bch=((r&248)|g>>5); |
justinkim | 0:53f8d6b23687 | 441 | bcl=((g&28)<<3|b>>3); |
justinkim | 0:53f8d6b23687 | 442 | _transparent=false; |
justinkim | 0:53f8d6b23687 | 443 | } |
justinkim | 0:53f8d6b23687 | 444 | |
justinkim | 0:53f8d6b23687 | 445 | void ArduLCD::setBackColor(uint32_t color) |
justinkim | 0:53f8d6b23687 | 446 | { |
justinkim | 0:53f8d6b23687 | 447 | if (color==VGA_TRANSPARENT) |
justinkim | 0:53f8d6b23687 | 448 | _transparent=true; |
justinkim | 0:53f8d6b23687 | 449 | else |
justinkim | 0:53f8d6b23687 | 450 | { |
justinkim | 0:53f8d6b23687 | 451 | bch=uint8_t(color>>8); |
justinkim | 0:53f8d6b23687 | 452 | bcl=uint8_t(color & 0xFF); |
justinkim | 0:53f8d6b23687 | 453 | _transparent=false; |
justinkim | 0:53f8d6b23687 | 454 | } |
justinkim | 0:53f8d6b23687 | 455 | } |
justinkim | 0:53f8d6b23687 | 456 | |
justinkim | 0:53f8d6b23687 | 457 | uint16_t ArduLCD::getBackColor() |
justinkim | 0:53f8d6b23687 | 458 | { |
justinkim | 0:53f8d6b23687 | 459 | return (bch<<8) | bcl; |
justinkim | 0:53f8d6b23687 | 460 | } |
justinkim | 0:53f8d6b23687 | 461 | |
justinkim | 0:53f8d6b23687 | 462 | void ArduLCD::setPixel(uint16_t color) |
justinkim | 0:53f8d6b23687 | 463 | { |
justinkim | 0:53f8d6b23687 | 464 | LCD_Write_DATA((color>>8),(color&0xFF)); // rrrrrggggggbbbbb |
justinkim | 0:53f8d6b23687 | 465 | } |
justinkim | 0:53f8d6b23687 | 466 | |
justinkim | 0:53f8d6b23687 | 467 | void ArduLCD::drawPixel(int x, int y) |
justinkim | 0:53f8d6b23687 | 468 | { |
justinkim | 0:53f8d6b23687 | 469 | setXY(x, y, x, y); |
justinkim | 0:53f8d6b23687 | 470 | setPixel((fch<<8)|fcl); |
justinkim | 0:53f8d6b23687 | 471 | clrXY(); |
justinkim | 0:53f8d6b23687 | 472 | } |
justinkim | 0:53f8d6b23687 | 473 | |
justinkim | 0:53f8d6b23687 | 474 | void ArduLCD::drawLine(int x1, int y1, int x2, int y2) |
justinkim | 0:53f8d6b23687 | 475 | { |
justinkim | 0:53f8d6b23687 | 476 | if (y1==y2) |
justinkim | 0:53f8d6b23687 | 477 | drawHLine(x1, y1, x2-x1); |
justinkim | 0:53f8d6b23687 | 478 | else if (x1==x2) |
justinkim | 0:53f8d6b23687 | 479 | drawVLine(x1, y1, y2-y1); |
justinkim | 0:53f8d6b23687 | 480 | else |
justinkim | 0:53f8d6b23687 | 481 | { |
justinkim | 0:53f8d6b23687 | 482 | unsigned int dx = (x2 > x1 ? x2 - x1 : x1 - x2); |
justinkim | 0:53f8d6b23687 | 483 | short xstep = x2 > x1 ? 1 : -1; |
justinkim | 0:53f8d6b23687 | 484 | unsigned int dy = (y2 > y1 ? y2 - y1 : y1 - y2); |
justinkim | 0:53f8d6b23687 | 485 | short ystep = y2 > y1 ? 1 : -1; |
justinkim | 0:53f8d6b23687 | 486 | int col = x1, row = y1; |
justinkim | 0:53f8d6b23687 | 487 | |
justinkim | 0:53f8d6b23687 | 488 | if (dx < dy) |
justinkim | 0:53f8d6b23687 | 489 | { |
justinkim | 0:53f8d6b23687 | 490 | int t = - (dy >> 1); |
justinkim | 0:53f8d6b23687 | 491 | while (true) |
justinkim | 0:53f8d6b23687 | 492 | { |
justinkim | 0:53f8d6b23687 | 493 | setXY (col, row, col, row); |
justinkim | 0:53f8d6b23687 | 494 | LCD_Write_DATA (fch, fcl); |
justinkim | 0:53f8d6b23687 | 495 | if (row == y2) |
justinkim | 0:53f8d6b23687 | 496 | return; |
justinkim | 0:53f8d6b23687 | 497 | row += ystep; |
justinkim | 0:53f8d6b23687 | 498 | t += dx; |
justinkim | 0:53f8d6b23687 | 499 | if (t >= 0) |
justinkim | 0:53f8d6b23687 | 500 | { |
justinkim | 0:53f8d6b23687 | 501 | col += xstep; |
justinkim | 0:53f8d6b23687 | 502 | t -= dy; |
justinkim | 0:53f8d6b23687 | 503 | } |
justinkim | 0:53f8d6b23687 | 504 | } |
justinkim | 0:53f8d6b23687 | 505 | } |
justinkim | 0:53f8d6b23687 | 506 | else |
justinkim | 0:53f8d6b23687 | 507 | { |
justinkim | 0:53f8d6b23687 | 508 | int t = - (dx >> 1); |
justinkim | 0:53f8d6b23687 | 509 | while (true) |
justinkim | 0:53f8d6b23687 | 510 | { |
justinkim | 0:53f8d6b23687 | 511 | setXY (col, row, col, row); |
justinkim | 0:53f8d6b23687 | 512 | LCD_Write_DATA (fch, fcl); |
justinkim | 0:53f8d6b23687 | 513 | if (col == x2) |
justinkim | 0:53f8d6b23687 | 514 | return; |
justinkim | 0:53f8d6b23687 | 515 | col += xstep; |
justinkim | 0:53f8d6b23687 | 516 | t += dy; |
justinkim | 0:53f8d6b23687 | 517 | if (t >= 0) |
justinkim | 0:53f8d6b23687 | 518 | { |
justinkim | 0:53f8d6b23687 | 519 | row += ystep; |
justinkim | 0:53f8d6b23687 | 520 | t -= dx; |
justinkim | 0:53f8d6b23687 | 521 | } |
justinkim | 0:53f8d6b23687 | 522 | } |
justinkim | 0:53f8d6b23687 | 523 | } |
justinkim | 0:53f8d6b23687 | 524 | } |
justinkim | 0:53f8d6b23687 | 525 | clrXY(); |
justinkim | 0:53f8d6b23687 | 526 | } |
justinkim | 0:53f8d6b23687 | 527 | |
justinkim | 0:53f8d6b23687 | 528 | void ArduLCD::drawHLine(int x, int y, int l) |
justinkim | 0:53f8d6b23687 | 529 | { |
justinkim | 0:53f8d6b23687 | 530 | if (l<0) |
justinkim | 0:53f8d6b23687 | 531 | { |
justinkim | 0:53f8d6b23687 | 532 | l = -l; |
justinkim | 0:53f8d6b23687 | 533 | x -= l; |
justinkim | 0:53f8d6b23687 | 534 | } |
justinkim | 0:53f8d6b23687 | 535 | setXY(x, y, x+l, y); |
justinkim | 0:53f8d6b23687 | 536 | if (display_transfer_mode == 16) |
justinkim | 0:53f8d6b23687 | 537 | { |
justinkim | 0:53f8d6b23687 | 538 | _fast_fill_16(fch,fcl,l); |
justinkim | 0:53f8d6b23687 | 539 | } |
justinkim | 0:53f8d6b23687 | 540 | else if ((display_transfer_mode==8) and (fch==fcl)) |
justinkim | 0:53f8d6b23687 | 541 | { |
justinkim | 0:53f8d6b23687 | 542 | _fast_fill_8(fch,l); |
justinkim | 0:53f8d6b23687 | 543 | } |
justinkim | 0:53f8d6b23687 | 544 | else |
justinkim | 0:53f8d6b23687 | 545 | { |
justinkim | 0:53f8d6b23687 | 546 | for (int i=0; i<l+1; i++) |
justinkim | 0:53f8d6b23687 | 547 | { |
justinkim | 0:53f8d6b23687 | 548 | LCD_Write_DATA(fch, fcl); |
justinkim | 0:53f8d6b23687 | 549 | } |
justinkim | 0:53f8d6b23687 | 550 | } |
justinkim | 0:53f8d6b23687 | 551 | clrXY(); |
justinkim | 0:53f8d6b23687 | 552 | } |
justinkim | 0:53f8d6b23687 | 553 | |
justinkim | 0:53f8d6b23687 | 554 | void ArduLCD::drawVLine(int x, int y, int l) |
justinkim | 0:53f8d6b23687 | 555 | { |
justinkim | 0:53f8d6b23687 | 556 | if (l<0) |
justinkim | 0:53f8d6b23687 | 557 | { |
justinkim | 0:53f8d6b23687 | 558 | l = -l; |
justinkim | 0:53f8d6b23687 | 559 | y -= l; |
justinkim | 0:53f8d6b23687 | 560 | } |
justinkim | 0:53f8d6b23687 | 561 | setXY(x, y, x, y+l); |
justinkim | 0:53f8d6b23687 | 562 | if (display_transfer_mode == 16) |
justinkim | 0:53f8d6b23687 | 563 | { |
justinkim | 0:53f8d6b23687 | 564 | _fast_fill_16(fch,fcl,l); |
justinkim | 0:53f8d6b23687 | 565 | } |
justinkim | 0:53f8d6b23687 | 566 | else if ((display_transfer_mode==8) and (fch==fcl)) |
justinkim | 0:53f8d6b23687 | 567 | { |
justinkim | 0:53f8d6b23687 | 568 | _fast_fill_8(fch,l); |
justinkim | 0:53f8d6b23687 | 569 | } |
justinkim | 0:53f8d6b23687 | 570 | else |
justinkim | 0:53f8d6b23687 | 571 | { |
justinkim | 0:53f8d6b23687 | 572 | for (int i=0; i<l+1; i++) |
justinkim | 0:53f8d6b23687 | 573 | { |
justinkim | 0:53f8d6b23687 | 574 | LCD_Write_DATA(fch, fcl); |
justinkim | 0:53f8d6b23687 | 575 | } |
justinkim | 0:53f8d6b23687 | 576 | } |
justinkim | 0:53f8d6b23687 | 577 | clrXY(); |
justinkim | 0:53f8d6b23687 | 578 | } |
justinkim | 0:53f8d6b23687 | 579 | /* |
justinkim | 0:53f8d6b23687 | 580 | void ArduLCD::printChar(uint8_t c, int x, int y) |
justinkim | 0:53f8d6b23687 | 581 | { |
justinkim | 0:53f8d6b23687 | 582 | uint8_t i,ch; |
justinkim | 0:53f8d6b23687 | 583 | uint16_t j; |
justinkim | 0:53f8d6b23687 | 584 | uint16_t temp; |
justinkim | 0:53f8d6b23687 | 585 | |
justinkim | 0:53f8d6b23687 | 586 | if (!_transparent) |
justinkim | 0:53f8d6b23687 | 587 | { |
justinkim | 0:53f8d6b23687 | 588 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 589 | { |
justinkim | 0:53f8d6b23687 | 590 | setXY(x,y,x+cfont.x_size-1,y+cfont.y_size-1); |
justinkim | 0:53f8d6b23687 | 591 | |
justinkim | 0:53f8d6b23687 | 592 | temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4; |
justinkim | 0:53f8d6b23687 | 593 | for(j=0;j<((cfont.x_size/8)*cfont.y_size);j++) |
justinkim | 0:53f8d6b23687 | 594 | { |
justinkim | 0:53f8d6b23687 | 595 | ch=pgm_read_byte(&cfont.font[temp]); |
justinkim | 0:53f8d6b23687 | 596 | for(i=0;i<8;i++) |
justinkim | 0:53f8d6b23687 | 597 | { |
justinkim | 0:53f8d6b23687 | 598 | if((ch&(1<<(7-i)))!=0) |
justinkim | 0:53f8d6b23687 | 599 | { |
justinkim | 0:53f8d6b23687 | 600 | setPixel((fch<<8)|fcl); |
justinkim | 0:53f8d6b23687 | 601 | } |
justinkim | 0:53f8d6b23687 | 602 | else |
justinkim | 0:53f8d6b23687 | 603 | { |
justinkim | 0:53f8d6b23687 | 604 | setPixel((bch<<8)|bcl); |
justinkim | 0:53f8d6b23687 | 605 | } |
justinkim | 0:53f8d6b23687 | 606 | } |
justinkim | 0:53f8d6b23687 | 607 | temp++; |
justinkim | 0:53f8d6b23687 | 608 | } |
justinkim | 0:53f8d6b23687 | 609 | } |
justinkim | 0:53f8d6b23687 | 610 | else |
justinkim | 0:53f8d6b23687 | 611 | { |
justinkim | 0:53f8d6b23687 | 612 | temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4; |
justinkim | 0:53f8d6b23687 | 613 | |
justinkim | 0:53f8d6b23687 | 614 | for(j=0;j<((cfont.x_size/8)*cfont.y_size);j+=(cfont.x_size/8)) |
justinkim | 0:53f8d6b23687 | 615 | { |
justinkim | 0:53f8d6b23687 | 616 | setXY(x,y+(j/(cfont.x_size/8)),x+cfont.x_size-1,y+(j/(cfont.x_size/8))); |
justinkim | 0:53f8d6b23687 | 617 | for (int zz=(cfont.x_size/8)-1; zz>=0; zz--) |
justinkim | 0:53f8d6b23687 | 618 | { |
justinkim | 0:53f8d6b23687 | 619 | ch=pgm_read_byte(&cfont.font[temp+zz]); |
justinkim | 0:53f8d6b23687 | 620 | for(i=0;i<8;i++) |
justinkim | 0:53f8d6b23687 | 621 | { |
justinkim | 0:53f8d6b23687 | 622 | if((ch&(1<<i))!=0) |
justinkim | 0:53f8d6b23687 | 623 | { |
justinkim | 0:53f8d6b23687 | 624 | setPixel((fch<<8)|fcl); |
justinkim | 0:53f8d6b23687 | 625 | } |
justinkim | 0:53f8d6b23687 | 626 | else |
justinkim | 0:53f8d6b23687 | 627 | { |
justinkim | 0:53f8d6b23687 | 628 | setPixel((bch<<8)|bcl); |
justinkim | 0:53f8d6b23687 | 629 | } |
justinkim | 0:53f8d6b23687 | 630 | } |
justinkim | 0:53f8d6b23687 | 631 | } |
justinkim | 0:53f8d6b23687 | 632 | temp+=(cfont.x_size/8); |
justinkim | 0:53f8d6b23687 | 633 | } |
justinkim | 0:53f8d6b23687 | 634 | } |
justinkim | 0:53f8d6b23687 | 635 | } |
justinkim | 0:53f8d6b23687 | 636 | else |
justinkim | 0:53f8d6b23687 | 637 | { |
justinkim | 0:53f8d6b23687 | 638 | temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4; |
justinkim | 0:53f8d6b23687 | 639 | for(j=0;j<cfont.y_size;j++) |
justinkim | 0:53f8d6b23687 | 640 | { |
justinkim | 0:53f8d6b23687 | 641 | for (int zz=0; zz<(cfont.x_size/8); zz++) |
justinkim | 0:53f8d6b23687 | 642 | { |
justinkim | 0:53f8d6b23687 | 643 | ch=pgm_read_byte(&cfont.font[temp+zz]); |
justinkim | 0:53f8d6b23687 | 644 | for(i=0;i<8;i++) |
justinkim | 0:53f8d6b23687 | 645 | { |
justinkim | 0:53f8d6b23687 | 646 | setXY(x+i+(zz*8),y+j,x+i+(zz*8)+1,y+j+1); |
justinkim | 0:53f8d6b23687 | 647 | |
justinkim | 0:53f8d6b23687 | 648 | if((ch&(1<<(7-i)))!=0) |
justinkim | 0:53f8d6b23687 | 649 | { |
justinkim | 0:53f8d6b23687 | 650 | setPixel((fch<<8)|fcl); |
justinkim | 0:53f8d6b23687 | 651 | } |
justinkim | 0:53f8d6b23687 | 652 | } |
justinkim | 0:53f8d6b23687 | 653 | } |
justinkim | 0:53f8d6b23687 | 654 | temp+=(cfont.x_size/8); |
justinkim | 0:53f8d6b23687 | 655 | } |
justinkim | 0:53f8d6b23687 | 656 | } |
justinkim | 0:53f8d6b23687 | 657 | clrXY(); |
justinkim | 0:53f8d6b23687 | 658 | } |
justinkim | 0:53f8d6b23687 | 659 | |
justinkim | 0:53f8d6b23687 | 660 | void ArduLCD::rotateChar(uint8_t c, int x, int y, int pos, int deg) |
justinkim | 0:53f8d6b23687 | 661 | { |
justinkim | 0:53f8d6b23687 | 662 | uint8_t i,j,ch; |
justinkim | 0:53f8d6b23687 | 663 | uint16_t temp; |
justinkim | 0:53f8d6b23687 | 664 | int newx,newy; |
justinkim | 0:53f8d6b23687 | 665 | double radian; |
justinkim | 0:53f8d6b23687 | 666 | radian=deg*0.0175; |
justinkim | 0:53f8d6b23687 | 667 | |
justinkim | 0:53f8d6b23687 | 668 | temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4; |
justinkim | 0:53f8d6b23687 | 669 | for(j=0;j<cfont.y_size;j++) |
justinkim | 0:53f8d6b23687 | 670 | { |
justinkim | 0:53f8d6b23687 | 671 | for (int zz=0; zz<(cfont.x_size/8); zz++) |
justinkim | 0:53f8d6b23687 | 672 | { |
justinkim | 0:53f8d6b23687 | 673 | ch=pgm_read_byte(&cfont.font[temp+zz]); |
justinkim | 0:53f8d6b23687 | 674 | for(i=0;i<8;i++) |
justinkim | 0:53f8d6b23687 | 675 | { |
justinkim | 0:53f8d6b23687 | 676 | newx=x+(((i+(zz*8)+(pos*cfont.x_size))*cos(radian))-((j)*sin(radian))); |
justinkim | 0:53f8d6b23687 | 677 | newy=y+(((j)*cos(radian))+((i+(zz*8)+(pos*cfont.x_size))*sin(radian))); |
justinkim | 0:53f8d6b23687 | 678 | |
justinkim | 0:53f8d6b23687 | 679 | setXY(newx,newy,newx+1,newy+1); |
justinkim | 0:53f8d6b23687 | 680 | |
justinkim | 0:53f8d6b23687 | 681 | if((ch&(1<<(7-i)))!=0) |
justinkim | 0:53f8d6b23687 | 682 | { |
justinkim | 0:53f8d6b23687 | 683 | setPixel((fch<<8)|fcl); |
justinkim | 0:53f8d6b23687 | 684 | } |
justinkim | 0:53f8d6b23687 | 685 | else |
justinkim | 0:53f8d6b23687 | 686 | { |
justinkim | 0:53f8d6b23687 | 687 | if (!_transparent) |
justinkim | 0:53f8d6b23687 | 688 | setPixel((bch<<8)|bcl); |
justinkim | 0:53f8d6b23687 | 689 | } |
justinkim | 0:53f8d6b23687 | 690 | } |
justinkim | 0:53f8d6b23687 | 691 | } |
justinkim | 0:53f8d6b23687 | 692 | temp+=(cfont.x_size/8); |
justinkim | 0:53f8d6b23687 | 693 | } |
justinkim | 0:53f8d6b23687 | 694 | clrXY(); |
justinkim | 0:53f8d6b23687 | 695 | } |
justinkim | 0:53f8d6b23687 | 696 | |
justinkim | 0:53f8d6b23687 | 697 | void ArduLCD::print(char *st, int x, int y, int deg) |
justinkim | 0:53f8d6b23687 | 698 | { |
justinkim | 0:53f8d6b23687 | 699 | int stl, i; |
justinkim | 0:53f8d6b23687 | 700 | |
justinkim | 0:53f8d6b23687 | 701 | stl = strlen(st); |
justinkim | 0:53f8d6b23687 | 702 | |
justinkim | 0:53f8d6b23687 | 703 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 704 | { |
justinkim | 0:53f8d6b23687 | 705 | if (x==RIGHT) |
justinkim | 0:53f8d6b23687 | 706 | x=(disp_x_size+1)-(stl*cfont.x_size); |
justinkim | 0:53f8d6b23687 | 707 | if (x==CENTER) |
justinkim | 0:53f8d6b23687 | 708 | x=((disp_x_size+1)-(stl*cfont.x_size))/2; |
justinkim | 0:53f8d6b23687 | 709 | } |
justinkim | 0:53f8d6b23687 | 710 | else |
justinkim | 0:53f8d6b23687 | 711 | { |
justinkim | 0:53f8d6b23687 | 712 | if (x==RIGHT) |
justinkim | 0:53f8d6b23687 | 713 | x=(disp_y_size+1)-(stl*cfont.x_size); |
justinkim | 0:53f8d6b23687 | 714 | if (x==CENTER) |
justinkim | 0:53f8d6b23687 | 715 | x=((disp_y_size+1)-(stl*cfont.x_size))/2; |
justinkim | 0:53f8d6b23687 | 716 | } |
justinkim | 0:53f8d6b23687 | 717 | |
justinkim | 0:53f8d6b23687 | 718 | for (i=0; i<stl; i++) |
justinkim | 0:53f8d6b23687 | 719 | if (deg==0) |
justinkim | 0:53f8d6b23687 | 720 | printChar(*st++, x + (i*(cfont.x_size)), y); |
justinkim | 0:53f8d6b23687 | 721 | else |
justinkim | 0:53f8d6b23687 | 722 | rotateChar(*st++, x, y, i, deg); |
justinkim | 0:53f8d6b23687 | 723 | } |
justinkim | 0:53f8d6b23687 | 724 | |
justinkim | 0:53f8d6b23687 | 725 | void ArduLCD::print(string st, int x, int y, int deg) |
justinkim | 0:53f8d6b23687 | 726 | { |
justinkim | 0:53f8d6b23687 | 727 | char buf[st.length()+1]; |
justinkim | 0:53f8d6b23687 | 728 | |
justinkim | 0:53f8d6b23687 | 729 | st.toCharArray(buf, st.length()+1); |
justinkim | 0:53f8d6b23687 | 730 | print(buf, x, y, deg); |
justinkim | 0:53f8d6b23687 | 731 | } |
justinkim | 0:53f8d6b23687 | 732 | |
justinkim | 0:53f8d6b23687 | 733 | void ArduLCD::printNumI(long num, int x, int y, int length, char filler) |
justinkim | 0:53f8d6b23687 | 734 | { |
justinkim | 0:53f8d6b23687 | 735 | char buf[25]; |
justinkim | 0:53f8d6b23687 | 736 | char st[27]; |
justinkim | 0:53f8d6b23687 | 737 | bool neg=false; |
justinkim | 0:53f8d6b23687 | 738 | int c=0, f=0; |
justinkim | 0:53f8d6b23687 | 739 | |
justinkim | 0:53f8d6b23687 | 740 | if (num==0) |
justinkim | 0:53f8d6b23687 | 741 | { |
justinkim | 0:53f8d6b23687 | 742 | if (length!=0) |
justinkim | 0:53f8d6b23687 | 743 | { |
justinkim | 0:53f8d6b23687 | 744 | for (c=0; c<(length-1); c++) |
justinkim | 0:53f8d6b23687 | 745 | st[c]=filler; |
justinkim | 0:53f8d6b23687 | 746 | st[c]=48; |
justinkim | 0:53f8d6b23687 | 747 | st[c+1]=0; |
justinkim | 0:53f8d6b23687 | 748 | } |
justinkim | 0:53f8d6b23687 | 749 | else |
justinkim | 0:53f8d6b23687 | 750 | { |
justinkim | 0:53f8d6b23687 | 751 | st[0]=48; |
justinkim | 0:53f8d6b23687 | 752 | st[1]=0; |
justinkim | 0:53f8d6b23687 | 753 | } |
justinkim | 0:53f8d6b23687 | 754 | } |
justinkim | 0:53f8d6b23687 | 755 | else |
justinkim | 0:53f8d6b23687 | 756 | { |
justinkim | 0:53f8d6b23687 | 757 | if (num<0) |
justinkim | 0:53f8d6b23687 | 758 | { |
justinkim | 0:53f8d6b23687 | 759 | neg=true; |
justinkim | 0:53f8d6b23687 | 760 | num=-num; |
justinkim | 0:53f8d6b23687 | 761 | } |
justinkim | 0:53f8d6b23687 | 762 | |
justinkim | 0:53f8d6b23687 | 763 | while (num>0) |
justinkim | 0:53f8d6b23687 | 764 | { |
justinkim | 0:53f8d6b23687 | 765 | buf[c]=48+(num % 10); |
justinkim | 0:53f8d6b23687 | 766 | c++; |
justinkim | 0:53f8d6b23687 | 767 | num=(num-(num % 10))/10; |
justinkim | 0:53f8d6b23687 | 768 | } |
justinkim | 0:53f8d6b23687 | 769 | buf[c]=0; |
justinkim | 0:53f8d6b23687 | 770 | |
justinkim | 0:53f8d6b23687 | 771 | if (neg) |
justinkim | 0:53f8d6b23687 | 772 | { |
justinkim | 0:53f8d6b23687 | 773 | st[0]=45; |
justinkim | 0:53f8d6b23687 | 774 | } |
justinkim | 0:53f8d6b23687 | 775 | |
justinkim | 0:53f8d6b23687 | 776 | if (length>(c+neg)) |
justinkim | 0:53f8d6b23687 | 777 | { |
justinkim | 0:53f8d6b23687 | 778 | for (int i=0; i<(length-c-neg); i++) |
justinkim | 0:53f8d6b23687 | 779 | { |
justinkim | 0:53f8d6b23687 | 780 | st[i+neg]=filler; |
justinkim | 0:53f8d6b23687 | 781 | f++; |
justinkim | 0:53f8d6b23687 | 782 | } |
justinkim | 0:53f8d6b23687 | 783 | } |
justinkim | 0:53f8d6b23687 | 784 | |
justinkim | 0:53f8d6b23687 | 785 | for (int i=0; i<c; i++) |
justinkim | 0:53f8d6b23687 | 786 | { |
justinkim | 0:53f8d6b23687 | 787 | st[i+neg+f]=buf[c-i-1]; |
justinkim | 0:53f8d6b23687 | 788 | } |
justinkim | 0:53f8d6b23687 | 789 | st[c+neg+f]=0; |
justinkim | 0:53f8d6b23687 | 790 | |
justinkim | 0:53f8d6b23687 | 791 | } |
justinkim | 0:53f8d6b23687 | 792 | |
justinkim | 0:53f8d6b23687 | 793 | print(st,x,y); |
justinkim | 0:53f8d6b23687 | 794 | } |
justinkim | 0:53f8d6b23687 | 795 | |
justinkim | 0:53f8d6b23687 | 796 | void ArduLCD::printNumF(double num, uint8_t dec, int x, int y, char divider, int length, char filler) |
justinkim | 0:53f8d6b23687 | 797 | { |
justinkim | 0:53f8d6b23687 | 798 | char st[27]; |
justinkim | 0:53f8d6b23687 | 799 | bool neg=false; |
justinkim | 0:53f8d6b23687 | 800 | |
justinkim | 0:53f8d6b23687 | 801 | if (dec<1) |
justinkim | 0:53f8d6b23687 | 802 | dec=1; |
justinkim | 0:53f8d6b23687 | 803 | else if (dec>5) |
justinkim | 0:53f8d6b23687 | 804 | dec=5; |
justinkim | 0:53f8d6b23687 | 805 | |
justinkim | 0:53f8d6b23687 | 806 | if (num<0) |
justinkim | 0:53f8d6b23687 | 807 | neg = true; |
justinkim | 0:53f8d6b23687 | 808 | |
justinkim | 0:53f8d6b23687 | 809 | _convert_float(st, num, length, dec); |
justinkim | 0:53f8d6b23687 | 810 | |
justinkim | 0:53f8d6b23687 | 811 | if (divider != '.') |
justinkim | 0:53f8d6b23687 | 812 | { |
justinkim | 0:53f8d6b23687 | 813 | for (int i=0; i<sizeof(st); i++) |
justinkim | 0:53f8d6b23687 | 814 | if (st[i]=='.') |
justinkim | 0:53f8d6b23687 | 815 | st[i]=divider; |
justinkim | 0:53f8d6b23687 | 816 | } |
justinkim | 0:53f8d6b23687 | 817 | |
justinkim | 0:53f8d6b23687 | 818 | if (filler != ' ') |
justinkim | 0:53f8d6b23687 | 819 | { |
justinkim | 0:53f8d6b23687 | 820 | if (neg) |
justinkim | 0:53f8d6b23687 | 821 | { |
justinkim | 0:53f8d6b23687 | 822 | st[0]='-'; |
justinkim | 0:53f8d6b23687 | 823 | for (int i=1; i<sizeof(st); i++) |
justinkim | 0:53f8d6b23687 | 824 | if ((st[i]==' ') || (st[i]=='-')) |
justinkim | 0:53f8d6b23687 | 825 | st[i]=filler; |
justinkim | 0:53f8d6b23687 | 826 | } |
justinkim | 0:53f8d6b23687 | 827 | else |
justinkim | 0:53f8d6b23687 | 828 | { |
justinkim | 0:53f8d6b23687 | 829 | for (int i=0; i<sizeof(st); i++) |
justinkim | 0:53f8d6b23687 | 830 | if (st[i]==' ') |
justinkim | 0:53f8d6b23687 | 831 | st[i]=filler; |
justinkim | 0:53f8d6b23687 | 832 | } |
justinkim | 0:53f8d6b23687 | 833 | } |
justinkim | 0:53f8d6b23687 | 834 | |
justinkim | 0:53f8d6b23687 | 835 | print(st,x,y); |
justinkim | 0:53f8d6b23687 | 836 | } |
justinkim | 0:53f8d6b23687 | 837 | |
justinkim | 0:53f8d6b23687 | 838 | void ArduLCD::setFont(uint8_t* font) |
justinkim | 0:53f8d6b23687 | 839 | { |
justinkim | 0:53f8d6b23687 | 840 | cfont.font=font; |
justinkim | 0:53f8d6b23687 | 841 | cfont.x_size=fontbyte(0); |
justinkim | 0:53f8d6b23687 | 842 | cfont.y_size=fontbyte(1); |
justinkim | 0:53f8d6b23687 | 843 | cfont.offset=fontbyte(2); |
justinkim | 0:53f8d6b23687 | 844 | cfont.numchars=fontbyte(3); |
justinkim | 0:53f8d6b23687 | 845 | } |
justinkim | 0:53f8d6b23687 | 846 | |
justinkim | 0:53f8d6b23687 | 847 | uint8_t* ArduLCD::getFont() |
justinkim | 0:53f8d6b23687 | 848 | { |
justinkim | 0:53f8d6b23687 | 849 | return cfont.font; |
justinkim | 0:53f8d6b23687 | 850 | } |
justinkim | 0:53f8d6b23687 | 851 | |
justinkim | 0:53f8d6b23687 | 852 | uint8_t ArduLCD::getFontXsize() |
justinkim | 0:53f8d6b23687 | 853 | { |
justinkim | 0:53f8d6b23687 | 854 | return cfont.x_size; |
justinkim | 0:53f8d6b23687 | 855 | } |
justinkim | 0:53f8d6b23687 | 856 | |
justinkim | 0:53f8d6b23687 | 857 | uint8_t ArduLCD::getFontYsize() |
justinkim | 0:53f8d6b23687 | 858 | { |
justinkim | 0:53f8d6b23687 | 859 | return cfont.y_size; |
justinkim | 0:53f8d6b23687 | 860 | }*/ |
justinkim | 0:53f8d6b23687 | 861 | |
justinkim | 0:53f8d6b23687 | 862 | void ArduLCD::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale) |
justinkim | 0:53f8d6b23687 | 863 | { |
justinkim | 0:53f8d6b23687 | 864 | unsigned int col; |
justinkim | 0:53f8d6b23687 | 865 | int tx, ty, tc, tsx, tsy; |
justinkim | 0:53f8d6b23687 | 866 | |
justinkim | 0:53f8d6b23687 | 867 | if (scale==1) |
justinkim | 0:53f8d6b23687 | 868 | { |
justinkim | 0:53f8d6b23687 | 869 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 870 | { |
justinkim | 0:53f8d6b23687 | 871 | setXY(x, y, x+sx-1, y+sy-1); |
justinkim | 0:53f8d6b23687 | 872 | for (tc=0; tc<(sx*sy); tc++) |
justinkim | 0:53f8d6b23687 | 873 | { |
justinkim | 0:53f8d6b23687 | 874 | col=pgm_read_word(&data[tc]); |
justinkim | 0:53f8d6b23687 | 875 | LCD_Write_DATA(col>>8,col & 0xff); |
justinkim | 0:53f8d6b23687 | 876 | } |
justinkim | 0:53f8d6b23687 | 877 | } |
justinkim | 0:53f8d6b23687 | 878 | else |
justinkim | 0:53f8d6b23687 | 879 | { |
justinkim | 0:53f8d6b23687 | 880 | for (ty=0; ty<sy; ty++) |
justinkim | 0:53f8d6b23687 | 881 | { |
justinkim | 0:53f8d6b23687 | 882 | setXY(x, y+ty, x+sx-1, y+ty); |
justinkim | 0:53f8d6b23687 | 883 | for (tx=sx-1; tx>=0; tx--) |
justinkim | 0:53f8d6b23687 | 884 | { |
justinkim | 0:53f8d6b23687 | 885 | col=pgm_read_word(&data[(ty*sx)+tx]); |
justinkim | 0:53f8d6b23687 | 886 | LCD_Write_DATA(col>>8,col & 0xff); |
justinkim | 0:53f8d6b23687 | 887 | } |
justinkim | 0:53f8d6b23687 | 888 | } |
justinkim | 0:53f8d6b23687 | 889 | } |
justinkim | 0:53f8d6b23687 | 890 | } |
justinkim | 0:53f8d6b23687 | 891 | else |
justinkim | 0:53f8d6b23687 | 892 | { |
justinkim | 0:53f8d6b23687 | 893 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 894 | { |
justinkim | 0:53f8d6b23687 | 895 | for (ty=0; ty<sy; ty++) |
justinkim | 0:53f8d6b23687 | 896 | { |
justinkim | 0:53f8d6b23687 | 897 | setXY(x, y+(ty*scale), x+((sx*scale)-1), y+(ty*scale)+scale); |
justinkim | 0:53f8d6b23687 | 898 | for (tsy=0; tsy<scale; tsy++) |
justinkim | 0:53f8d6b23687 | 899 | for (tx=0; tx<sx; tx++) |
justinkim | 0:53f8d6b23687 | 900 | { |
justinkim | 0:53f8d6b23687 | 901 | col=pgm_read_word(&data[(ty*sx)+tx]); |
justinkim | 0:53f8d6b23687 | 902 | for (tsx=0; tsx<scale; tsx++) |
justinkim | 0:53f8d6b23687 | 903 | LCD_Write_DATA(col>>8,col & 0xff); |
justinkim | 0:53f8d6b23687 | 904 | } |
justinkim | 0:53f8d6b23687 | 905 | } |
justinkim | 0:53f8d6b23687 | 906 | } |
justinkim | 0:53f8d6b23687 | 907 | else |
justinkim | 0:53f8d6b23687 | 908 | { |
justinkim | 0:53f8d6b23687 | 909 | for (ty=0; ty<sy; ty++) |
justinkim | 0:53f8d6b23687 | 910 | { |
justinkim | 0:53f8d6b23687 | 911 | for (tsy=0; tsy<scale; tsy++) |
justinkim | 0:53f8d6b23687 | 912 | { |
justinkim | 0:53f8d6b23687 | 913 | setXY(x, y+(ty*scale)+tsy, x+((sx*scale)-1), y+(ty*scale)+tsy); |
justinkim | 0:53f8d6b23687 | 914 | for (tx=sx-1; tx>=0; tx--) |
justinkim | 0:53f8d6b23687 | 915 | { |
justinkim | 0:53f8d6b23687 | 916 | col=pgm_read_word(&data[(ty*sx)+tx]); |
justinkim | 0:53f8d6b23687 | 917 | for (tsx=0; tsx<scale; tsx++) |
justinkim | 0:53f8d6b23687 | 918 | LCD_Write_DATA(col>>8,col & 0xff); |
justinkim | 0:53f8d6b23687 | 919 | } |
justinkim | 0:53f8d6b23687 | 920 | } |
justinkim | 0:53f8d6b23687 | 921 | } |
justinkim | 0:53f8d6b23687 | 922 | } |
justinkim | 0:53f8d6b23687 | 923 | } |
justinkim | 0:53f8d6b23687 | 924 | clrXY(); |
justinkim | 0:53f8d6b23687 | 925 | } |
justinkim | 0:53f8d6b23687 | 926 | |
justinkim | 0:53f8d6b23687 | 927 | void ArduLCD::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy) |
justinkim | 0:53f8d6b23687 | 928 | { |
justinkim | 0:53f8d6b23687 | 929 | unsigned int col; |
justinkim | 0:53f8d6b23687 | 930 | int tx, ty, newx, newy; |
justinkim | 0:53f8d6b23687 | 931 | double radian; |
justinkim | 0:53f8d6b23687 | 932 | radian=deg*0.0175; |
justinkim | 0:53f8d6b23687 | 933 | |
justinkim | 0:53f8d6b23687 | 934 | if (deg==0) |
justinkim | 0:53f8d6b23687 | 935 | drawBitmap(x, y, sx, sy, data); |
justinkim | 0:53f8d6b23687 | 936 | else |
justinkim | 0:53f8d6b23687 | 937 | { |
justinkim | 0:53f8d6b23687 | 938 | for (ty=0; ty<sy; ty++) |
justinkim | 0:53f8d6b23687 | 939 | for (tx=0; tx<sx; tx++) |
justinkim | 0:53f8d6b23687 | 940 | { |
justinkim | 0:53f8d6b23687 | 941 | col=pgm_read_word(&data[(ty*sx)+tx]); |
justinkim | 0:53f8d6b23687 | 942 | |
justinkim | 0:53f8d6b23687 | 943 | newx=x+rox+(((tx-rox)*cos(radian))-((ty-roy)*sin(radian))); |
justinkim | 0:53f8d6b23687 | 944 | newy=y+roy+(((ty-roy)*cos(radian))+((tx-rox)*sin(radian))); |
justinkim | 0:53f8d6b23687 | 945 | |
justinkim | 0:53f8d6b23687 | 946 | setXY(newx, newy, newx, newy); |
justinkim | 0:53f8d6b23687 | 947 | LCD_Write_DATA(col>>8,col & 0xff); |
justinkim | 0:53f8d6b23687 | 948 | } |
justinkim | 0:53f8d6b23687 | 949 | } |
justinkim | 0:53f8d6b23687 | 950 | clrXY(); |
justinkim | 0:53f8d6b23687 | 951 | } |
justinkim | 0:53f8d6b23687 | 952 | |
justinkim | 0:53f8d6b23687 | 953 | void ArduLCD::lcdOff() |
justinkim | 0:53f8d6b23687 | 954 | { |
justinkim | 0:53f8d6b23687 | 955 | |
justinkim | 0:53f8d6b23687 | 956 | } |
justinkim | 0:53f8d6b23687 | 957 | |
justinkim | 0:53f8d6b23687 | 958 | void ArduLCD::lcdOn() |
justinkim | 0:53f8d6b23687 | 959 | { |
justinkim | 0:53f8d6b23687 | 960 | |
justinkim | 0:53f8d6b23687 | 961 | } |
justinkim | 0:53f8d6b23687 | 962 | |
justinkim | 0:53f8d6b23687 | 963 | void ArduLCD::setContrast(char c) |
justinkim | 0:53f8d6b23687 | 964 | { |
justinkim | 0:53f8d6b23687 | 965 | |
justinkim | 0:53f8d6b23687 | 966 | } |
justinkim | 0:53f8d6b23687 | 967 | |
justinkim | 0:53f8d6b23687 | 968 | int ArduLCD::getDisplayXSize() |
justinkim | 0:53f8d6b23687 | 969 | { |
justinkim | 0:53f8d6b23687 | 970 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 971 | return disp_x_size+1; |
justinkim | 0:53f8d6b23687 | 972 | else |
justinkim | 0:53f8d6b23687 | 973 | return disp_y_size+1; |
justinkim | 0:53f8d6b23687 | 974 | } |
justinkim | 0:53f8d6b23687 | 975 | |
justinkim | 0:53f8d6b23687 | 976 | int ArduLCD::getDisplayYSize() |
justinkim | 0:53f8d6b23687 | 977 | { |
justinkim | 0:53f8d6b23687 | 978 | if (orient==PORTRAIT) |
justinkim | 0:53f8d6b23687 | 979 | return disp_y_size+1; |
justinkim | 0:53f8d6b23687 | 980 | else |
justinkim | 0:53f8d6b23687 | 981 | return disp_x_size+1; |
justinkim | 0:53f8d6b23687 | 982 | } |
justinkim | 0:53f8d6b23687 | 983 | |
justinkim | 0:53f8d6b23687 | 984 | void ArduLCD::_fast_fill_16(int ch, int cl, long pix) |
justinkim | 0:53f8d6b23687 | 985 | { |
justinkim | 0:53f8d6b23687 | 986 | |
justinkim | 0:53f8d6b23687 | 987 | } |
justinkim | 0:53f8d6b23687 | 988 | |
justinkim | 0:53f8d6b23687 | 989 | void ArduLCD::_fast_fill_8(int ch, long pix) |
justinkim | 0:53f8d6b23687 | 990 | { |
justinkim | 0:53f8d6b23687 | 991 | |
justinkim | 0:53f8d6b23687 | 992 | } |
justinkim | 0:53f8d6b23687 | 993 | |
justinkim | 0:53f8d6b23687 | 994 | void ArduLCD::setBrightness(uint8_t br) |
justinkim | 0:53f8d6b23687 | 995 | { |
justinkim | 0:53f8d6b23687 | 996 | |
justinkim | 0:53f8d6b23687 | 997 | } |
justinkim | 0:53f8d6b23687 | 998 | |
justinkim | 0:53f8d6b23687 | 999 | void ArduLCD::setDisplayPage(uint8_t page) |
justinkim | 0:53f8d6b23687 | 1000 | { |
justinkim | 0:53f8d6b23687 | 1001 | |
justinkim | 0:53f8d6b23687 | 1002 | } |
justinkim | 0:53f8d6b23687 | 1003 | |
justinkim | 0:53f8d6b23687 | 1004 | void ArduLCD::setWritePage(uint8_t page) |
justinkim | 0:53f8d6b23687 | 1005 | { |
justinkim | 0:53f8d6b23687 | 1006 | |
justinkim | 0:53f8d6b23687 | 1007 | } |
justinkim | 0:53f8d6b23687 | 1008 | |
justinkim | 0:53f8d6b23687 | 1009 | void ArduLCD::_convert_float(char *buf, double num, int width, uint8_t prec) |
justinkim | 0:53f8d6b23687 | 1010 | { |
justinkim | 0:53f8d6b23687 | 1011 | |
justinkim | 0:53f8d6b23687 | 1012 | } |
justinkim | 0:53f8d6b23687 | 1013 |