| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- :mod:`lcd160cr` --- control of LCD160CR display
- ===============================================
- .. module:: lcd160cr
- :synopsis: control of LCD160CR display
- This module provides control of the MicroPython LCD160CR display.
- .. image:: http://micropython.org/resources/LCD160CRv10-persp.jpg
- :alt: LCD160CRv1.0 picture
- :width: 640px
- Further resources are available via the following links:
- * `LCD160CRv1.0 reference manual <http://micropython.org/resources/LCD160CRv10-refmanual.pdf>`_ (100KiB PDF)
- * `LCD160CRv1.0 schematics <http://micropython.org/resources/LCD160CRv10-schematics.pdf>`_ (1.6MiB PDF)
- class LCD160CR
- --------------
- The LCD160CR class provides an interface to the display. Create an
- instance of this class and use its methods to draw to the LCD and get
- the status of the touch panel.
- For example::
- import lcd160cr
- lcd = lcd160cr.LCD160CR('X')
- lcd.set_orient(lcd160cr.PORTRAIT)
- lcd.set_pos(0, 0)
- lcd.set_text_color(lcd.rgb(255, 0, 0), lcd.rgb(0, 0, 0))
- lcd.set_font(1)
- lcd.write('Hello MicroPython!')
- print('touch:', lcd.get_touch())
- Constructors
- ------------
- .. class:: LCD160CR(connect=None, \*, pwr=None, i2c=None, spi=None, i2c_addr=98)
- Construct an LCD160CR object. The parameters are:
- - *connect* is a string specifying the physical connection of the LCD
- display to the board; valid values are "X", "Y", "XY", "YX".
- Use "X" when the display is connected to a pyboard in the X-skin
- position, and "Y" when connected in the Y-skin position. "XY"
- and "YX" are used when the display is connected to the right or
- left side of the pyboard, respectively.
- - *pwr* is a Pin object connected to the LCD's power/enabled pin.
- - *i2c* is an I2C object connected to the LCD's I2C interface.
- - *spi* is an SPI object connected to the LCD's SPI interface.
- - *i2c_addr* is the I2C address of the display.
- One must specify either a valid *connect* or all of *pwr*, *i2c* and *spi*.
- If a valid *connect* is given then any of *pwr*, *i2c* or *spi* which are
- not passed as parameters (i.e. they are ``None``) will be created based on the
- value of *connect*. This allows to override the default interface to the
- display if needed.
- The default values are:
- - "X" is for the X-skin and uses:
- ``pwr=Pin("X4")``, ``i2c=I2C("X")``, ``spi=SPI("X")``
- - "Y" is for the Y-skin and uses:
- ``pwr=Pin("Y4")``, ``i2c=I2C("Y")``, ``spi=SPI("Y")``
- - "XY" is for the right-side and uses:
- ``pwr=Pin("X4")``, ``i2c=I2C("Y")``, ``spi=SPI("X")``
- - "YX" is for the left-side and uses:
- ``pwr=Pin("Y4")``, ``i2c=I2C("X")``, ``spi=SPI("Y")``
- See `this image <http://micropython.org/resources/LCD160CRv10-positions.jpg>`_
- for how the display can be connected to the pyboard.
- Static methods
- --------------
- .. staticmethod:: LCD160CR.rgb(r, g, b)
- Return a 16-bit integer representing the given rgb color values. The
- 16-bit value can be used to set the font color (see
- :meth:`LCD160CR.set_text_color`) pen color (see :meth:`LCD160CR.set_pen`)
- and draw individual pixels.
- .. staticmethod:: LCD160CR.clip_line(data, w, h):
- Clip the given line data. This is for internal use.
- Instance members
- ----------------
- The following instance members are publicly accessible.
- .. data:: LCD160CR.w
- .. data:: LCD160CR.h
- The width and height of the display, respectively, in pixels. These
- members are updated when calling :meth:`LCD160CR.set_orient` and should
- be considered read-only.
- Setup commands
- --------------
- .. method:: LCD160CR.set_power(on)
- Turn the display on or off, depending on the given value of *on*: 0 or ``False``
- will turn the display off, and 1 or ``True`` will turn it on.
- .. method:: LCD160CR.set_orient(orient)
- Set the orientation of the display. The *orient* parameter can be one
- of `PORTRAIT`, `LANDSCAPE`, `PORTRAIT_UPSIDEDOWN`, `LANDSCAPE_UPSIDEDOWN`.
- .. method:: LCD160CR.set_brightness(value)
- Set the brightness of the display, between 0 and 31.
- .. method:: LCD160CR.set_i2c_addr(addr)
- Set the I2C address of the display. The *addr* value must have the
- lower 2 bits cleared.
- .. method:: LCD160CR.set_uart_baudrate(baudrate)
- Set the baudrate of the UART interface.
- .. method:: LCD160CR.set_startup_deco(value)
- Set the start-up decoration of the display. The *value* parameter can be a
- logical or of `STARTUP_DECO_NONE`, `STARTUP_DECO_MLOGO`, `STARTUP_DECO_INFO`.
- .. method:: LCD160CR.save_to_flash()
- Save the following parameters to flash so they persist on restart and power up:
- initial decoration, orientation, brightness, UART baud rate, I2C address.
- Pixel access methods
- --------------------
- The following methods manipulate individual pixels on the display.
- .. method:: LCD160CR.set_pixel(x, y, c)
- Set the specified pixel to the given color. The color should be a 16-bit
- integer and can be created by :meth:`LCD160CR.rgb`.
- .. method:: LCD160CR.get_pixel(x, y)
- Get the 16-bit value of the specified pixel.
- .. method:: LCD160CR.get_line(x, y, buf)
- Low-level method to get a line of pixels into the given buffer.
- To read *n* pixels *buf* should be *2*n+1* bytes in length. The first byte
- is a dummy byte and should be ignored, and subsequent bytes represent the
- pixels in the line starting at coordinate *(x, y)*.
- .. method:: LCD160CR.screen_dump(buf, x=0, y=0, w=None, h=None)
- Dump the contents of the screen to the given buffer. The parameters *x* and *y*
- specify the starting coordinate, and *w* and *h* the size of the region. If *w*
- or *h* are ``None`` then they will take on their maximum values, set by the size
- of the screen minus the given *x* and *y* values. *buf* should be large enough
- to hold ``2*w*h`` bytes. If it's smaller then only the initial horizontal lines
- will be stored.
- .. method:: LCD160CR.screen_load(buf)
- Load the entire screen from the given buffer.
- Drawing text
- ------------
- To draw text one sets the position, color and font, and then uses
- `LCD160CR.write` to draw the text.
- .. method:: LCD160CR.set_pos(x, y)
- Set the position for text output using :meth:`LCD160CR.write`. The position
- is the upper-left corner of the text.
- .. method:: LCD160CR.set_text_color(fg, bg)
- Set the foreground and background color of the text.
- .. method:: LCD160CR.set_font(font, scale=0, bold=0, trans=0, scroll=0)
- Set the font for the text. Subsequent calls to `write` will use the newly
- configured font. The parameters are:
- - *font* is the font family to use, valid values are 0, 1, 2, 3.
- - *scale* is a scaling value for each character pixel, where the pixels
- are drawn as a square with side length equal to *scale + 1*. The value
- can be between 0 and 63.
- - *bold* controls the number of pixels to overdraw each character pixel,
- making a bold effect. The lower 2 bits of *bold* are the number of
- pixels to overdraw in the horizontal direction, and the next 2 bits are
- for the vertical direction. For example, a *bold* value of 5 will
- overdraw 1 pixel in both the horizontal and vertical directions.
- - *trans* can be either 0 or 1 and if set to 1 the characters will be
- drawn with a transparent background.
- - *scroll* can be either 0 or 1 and if set to 1 the display will do a
- soft scroll if the text moves to the next line.
- .. method:: LCD160CR.write(s)
- Write text to the display, using the current position, color and font.
- As text is written the position is automatically incremented. The
- display supports basic VT100 control codes such as newline and backspace.
- Drawing primitive shapes
- ------------------------
- Primitive drawing commands use a foreground and background color set by the
- `set_pen` method.
- .. method:: LCD160CR.set_pen(line, fill)
- Set the line and fill color for primitive shapes.
- .. method:: LCD160CR.erase()
- Erase the entire display to the pen fill color.
- .. method:: LCD160CR.dot(x, y)
- Draw a single pixel at the given location using the pen line color.
- .. method:: LCD160CR.rect(x, y, w, h)
- .. method:: LCD160CR.rect_outline(x, y, w, h)
- .. method:: LCD160CR.rect_interior(x, y, w, h)
- Draw a rectangle at the given location and size using the pen line
- color for the outline, and the pen fill color for the interior.
- The `rect` method draws the outline and interior, while the other methods
- just draw one or the other.
- .. method:: LCD160CR.line(x1, y1, x2, y2)
- Draw a line between the given coordinates using the pen line color.
- .. method:: LCD160CR.dot_no_clip(x, y)
- .. method:: LCD160CR.rect_no_clip(x, y, w, h)
- .. method:: LCD160CR.rect_outline_no_clip(x, y, w, h)
- .. method:: LCD160CR.rect_interior_no_clip(x, y, w, h)
- .. method:: LCD160CR.line_no_clip(x1, y1, x2, y2)
- These methods are as above but don't do any clipping on the input
- coordinates. They are faster than the clipping versions and can be
- used when you know that the coordinates are within the display.
- .. method:: LCD160CR.poly_dot(data)
- Draw a sequence of dots using the pen line color.
- The *data* should be a buffer of bytes, with each successive pair of
- bytes corresponding to coordinate pairs (x, y).
- .. method:: LCD160CR.poly_line(data)
- Similar to :meth:`LCD160CR.poly_dot` but draws lines between the dots.
- Touch screen methods
- --------------------
- .. method:: LCD160CR.touch_config(calib=False, save=False, irq=None)
- Configure the touch panel:
- - If *calib* is ``True`` then the call will trigger a touch calibration of
- the resistive touch sensor. This requires the user to touch various
- parts of the screen.
- - If *save* is ``True`` then the touch parameters will be saved to NVRAM
- to persist across reset/power up.
- - If *irq* is ``True`` then the display will be configured to pull the IRQ
- line low when a touch force is detected. If *irq* is ``False`` then this
- feature is disabled. If *irq* is ``None`` (the default value) then no
- change is made to this setting.
- .. method:: LCD160CR.is_touched()
- Returns a boolean: ``True`` if there is currently a touch force on the screen,
- ``False`` otherwise.
- .. method:: LCD160CR.get_touch()
- Returns a 3-tuple of: *(active, x, y)*. If there is currently a touch force
- on the screen then *active* is 1, otherwise it is 0. The *x* and *y* values
- indicate the position of the current or most recent touch.
- Advanced commands
- -----------------
- .. method:: LCD160CR.set_spi_win(x, y, w, h)
- Set the window that SPI data is written to.
- .. method:: LCD160CR.fast_spi(flush=True)
- Ready the display to accept RGB pixel data on the SPI bus, resetting the location
- of the first byte to go to the top-left corner of the window set by
- :meth:`LCD160CR.set_spi_win`.
- The method returns an SPI object which can be used to write the pixel data.
- Pixels should be sent as 16-bit RGB values in the 5-6-5 format. The destination
- counter will increase as data is sent, and data can be sent in arbitrary sized
- chunks. Once the destination counter reaches the end of the window specified by
- :meth:`LCD160CR.set_spi_win` it will wrap around to the top-left corner of that window.
- .. method:: LCD160CR.show_framebuf(buf)
- Show the given buffer on the display. *buf* should be an array of bytes containing
- the 16-bit RGB values for the pixels, and they will be written to the area
- specified by :meth:`LCD160CR.set_spi_win`, starting from the top-left corner.
- The `framebuf <framebuf.html>`_ module can be used to construct frame buffers
- and provides drawing primitives. Using a frame buffer will improve
- performance of animations when compared to drawing directly to the screen.
- .. method:: LCD160CR.set_scroll(on)
- Turn scrolling on or off. This controls globally whether any window regions will
- scroll.
- .. method:: LCD160CR.set_scroll_win(win, x=-1, y=0, w=0, h=0, vec=0, pat=0, fill=0x07e0, color=0)
- Configure a window region for scrolling:
- - *win* is the window id to configure. There are 0..7 standard windows for
- general purpose use. Window 8 is the text scroll window (the ticker).
- - *x*, *y*, *w*, *h* specify the location of the window in the display.
- - *vec* specifies the direction and speed of scroll: it is a 16-bit value
- of the form ``0bF.ddSSSSSSSSSSSS``. *dd* is 0, 1, 2, 3 for +x, +y, -x,
- -y scrolling. *F* sets the speed format, with 0 meaning that the window
- is shifted *S % 256* pixel every frame, and 1 meaning that the window
- is shifted 1 pixel every *S* frames.
- - *pat* is a 16-bit pattern mask for the background.
- - *fill* is the fill color.
- - *color* is the extra color, either of the text or pattern foreground.
- .. method:: LCD160CR.set_scroll_win_param(win, param, value)
- Set a single parameter of a scrolling window region:
-
- - *win* is the window id, 0..8.
- - *param* is the parameter number to configure, 0..7, and corresponds
- to the parameters in the `set_scroll_win` method.
- - *value* is the value to set.
- .. method:: LCD160CR.set_scroll_buf(s)
- Set the string for scrolling in window 8. The parameter *s* must be a string
- with length 32 or less.
- .. method:: LCD160CR.jpeg(buf)
- Display a JPEG. *buf* should contain the entire JPEG data. JPEG data should
- not include EXIF information. The following encodings are supported: Baseline
- DCT, Huffman coding, 8 bits per sample, 3 color components, YCbCr4:2:2.
- The origin of the JPEG is set by :meth:`LCD160CR.set_pos`.
- .. method:: LCD160CR.jpeg_start(total_len)
- .. method:: LCD160CR.jpeg_data(buf)
- Display a JPEG with the data split across multiple buffers. There must be
- a single call to `jpeg_start` to begin with, specifying the total number of
- bytes in the JPEG. Then this number of bytes must be transferred to the
- display using one or more calls to the `jpeg_data` command.
- .. method:: LCD160CR.feed_wdt()
- The first call to this method will start the display's internal watchdog
- timer. Subsequent calls will feed the watchdog. The timeout is roughly 30
- seconds.
- .. method:: LCD160CR.reset()
- Reset the display.
- Constants
- ---------
- .. data:: lcd160cr.PORTRAIT
- lcd160cr.LANDSCAPE
- lcd160cr.PORTRAIT_UPSIDEDOWN
- lcd160cr.LANDSCAPE_UPSIDEDOWN
- Orientations of the display, used by :meth:`LCD160CR.set_orient`.
- .. data:: lcd160cr.STARTUP_DECO_NONE
- lcd160cr.STARTUP_DECO_MLOGO
- lcd160cr.STARTUP_DECO_INFO
- Types of start-up decoration, can be OR'ed together, used by
- :meth:`LCD160CR.set_startup_deco`.
|