Support 320x240, Document font formats.

pull/3/head
Russ Hughes 2021-05-06 11:04:01 -07:00
rodzic 844af1ae4a
commit 955a4e8e40
14 zmienionych plików z 478 dodań i 142 usunięć

Wyświetl plik

@ -92,7 +92,8 @@
<li class="toctree-l2"><a class="reference internal" href="../examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../fonts.html">Fonts</a><ul>

Wyświetl plik

@ -92,7 +92,8 @@
<li class="toctree-l2"><a class="reference internal" href="../examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="../examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../fonts.html">Fonts</a><ul>
@ -198,13 +199,20 @@
<span class="sd">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
<span class="sd">THE SOFTWARE.</span>
<span class="sd">st7789 tft driver in MicroPython based on devbis&#39; st7789py_mpy module from</span>
<span class="sd">The driver is based on devbis&#39; st7789py_mpy module from</span>
<span class="sd">https://github.com/devbis/st7789py_mpy.</span>
<span class="sd">I added support for display rotation, scrolling and drawing text using 8 and 16</span>
<span class="sd">bit wide bitmap fonts with heights that are multiples of 8. Included are 12</span>
<span class="sd">bitmap fonts derived from classic pc text mode fonts.</span>
<span class="sd">This driver adds support for:</span>
<span class="sd">- 320x240, 240x240 and 135x240 pixel displays</span>
<span class="sd">- Display rotation</span>
<span class="sd">- Hardware based scrolling</span>
<span class="sd">- Drawing text using 8 and 16 bit wide bitmap fonts with heights that are</span>
<span class="sd"> multiples of 8. Included are 12 bitmap fonts derived from classic pc</span>
<span class="sd"> BIOS text mode fonts.</span>
<span class="sd">- Drawing text using converted TrueType fonts.</span>
<span class="sd">- Drawing converted bitmaps</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">time</span>
@ -282,6 +290,26 @@
<span class="n">_BIT1</span> <span class="o">=</span> <span class="n">const</span><span class="p">(</span><span class="mh">0x02</span><span class="p">)</span>
<span class="n">_BIT0</span> <span class="o">=</span> <span class="n">const</span><span class="p">(</span><span class="mh">0x01</span><span class="p">)</span>
<span class="c1"># Rotation tables (width, height, xstart, ystart)[rotation % 4]</span>
<span class="n">WIDTH_320</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">320</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">320</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">320</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">320</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)]</span>
<span class="n">WIDTH_240</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">80</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">80</span><span class="p">,</span> <span class="mi">0</span><span class="p">)]</span>
<span class="n">WIDTH_135</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">135</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">52</span><span class="p">,</span> <span class="mi">40</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">135</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">53</span><span class="p">),</span>
<span class="p">(</span><span class="mi">135</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">53</span><span class="p">,</span> <span class="mi">40</span><span class="p">),</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">135</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="mi">52</span><span class="p">)]</span>
<span class="c1"># MADCTL ROTATIONS[rotation % 4]</span>
<span class="n">ROTATIONS</span> <span class="o">=</span> <span class="p">[</span><span class="mh">0x00</span><span class="p">,</span> <span class="mh">0x60</span><span class="p">,</span> <span class="mh">0xc0</span><span class="p">,</span> <span class="mh">0xa0</span><span class="p">]</span>
<div class="viewcode-block" id="color565"><a class="viewcode-back" href="../st7789py.html#st7789py.color565">[docs]</a><span class="k">def</span> <span class="nf">color565</span><span class="p">(</span><span class="n">red</span><span class="p">,</span> <span class="n">green</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">blue</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -320,18 +348,20 @@
<span class="sd"> ystart (int): display ystart offset</span>
<span class="sd"> rotation (int): display rotation</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spi</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">reset</span><span class="p">,</span> <span class="n">dc</span><span class="p">,</span> <span class="n">cs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">backlight</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">xstart</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">ystart</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">spi</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">reset</span><span class="p">,</span> <span class="n">dc</span><span class="p">,</span>
<span class="n">cs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">backlight</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize display.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span> <span class="o">!=</span> <span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">240</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">)</span> <span class="o">!=</span> <span class="p">(</span><span class="mi">135</span><span class="p">,</span> <span class="mi">240</span><span class="p">):</span>
<span class="k">if</span> <span class="n">height</span> <span class="o">!=</span> <span class="mi">240</span> <span class="ow">or</span> <span class="n">width</span> <span class="ow">not</span> <span class="ow">in</span><span class="p">[</span><span class="mi">320</span><span class="p">,</span> <span class="mi">240</span><span class="p">,</span> <span class="mi">135</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Unsupported display. Only 240x240 and 135x240 are supported.&quot;</span>
<span class="s2">&quot;Unsupported display. 320x240, 240x240 and 135x240 are supported.&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="n">width</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_display_height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="n">height</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xstart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">spi</span> <span class="o">=</span> <span class="n">spi</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reset</span> <span class="o">=</span> <span class="n">reset</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dc</span> <span class="o">=</span> <span class="n">dc</span>
@ -437,41 +467,29 @@
<span class="sd"> Set display rotation.</span>
<span class="sd"> Args:</span>
<span class="sd"> rotation (int): 0-Portrait, 1-Landscape, 2-Inverted Portrait,</span>
<span class="sd"> 3-Inverted Landscape</span>
<span class="sd"> rotation (int):</span>
<span class="sd"> - 0-Portrait</span>
<span class="sd"> - 1-Landscape</span>
<span class="sd"> - 2-Inverted Portrait</span>
<span class="sd"> - 3-Inverted Landscape</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_rotation</span> <span class="o">=</span> <span class="n">rotation</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rotation</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># Portrait</span>
<span class="n">madctl</span> <span class="o">=</span> <span class="n">ST7789_MADCTL_RGB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span>
<span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_height</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xstart</span> <span class="o">=</span> <span class="mi">52</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="mi">40</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rotation</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># Landscape</span>
<span class="n">madctl</span> <span class="o">=</span> <span class="n">ST7789_MADCTL_MX</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_MV</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_RGB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_height</span>
<span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xstart</span> <span class="o">=</span> <span class="mi">40</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="mi">53</span>
<span class="n">rotation</span> <span class="o">%=</span> <span class="mi">4</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_rotation</span> <span class="o">=</span> <span class="n">rotation</span>
<span class="n">madctl</span> <span class="o">=</span> <span class="n">ROTATIONS</span><span class="p">[</span><span class="n">rotation</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rotation</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="c1"># Inverted Portrait</span>
<span class="n">madctl</span> <span class="o">=</span> <span class="n">ST7789_MADCTL_MX</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_MY</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_RGB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span>
<span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_height</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xstart</span> <span class="o">=</span> <span class="mi">53</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="mi">40</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># Inverted Landscape</span>
<span class="n">madctl</span> <span class="o">=</span> <span class="n">ST7789_MADCTL_MV</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_MY</span> <span class="o">|</span> <span class="n">ST7789_MADCTL_RGB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_height</span>
<span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xstart</span> <span class="o">=</span> <span class="mi">40</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="mi">52</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">320</span><span class="p">:</span>
<span class="n">table</span> <span class="o">=</span> <span class="n">WIDTH_320</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">240</span><span class="p">:</span>
<span class="n">table</span> <span class="o">=</span> <span class="n">WIDTH_240</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_display_width</span> <span class="o">==</span> <span class="mi">135</span><span class="p">:</span>
<span class="n">table</span> <span class="o">=</span> <span class="n">WIDTH_135</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Unsupported display. 320x240, 240x240 and 135x240 are supported.&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">xstart</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">ystart</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="n">rotation</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_write</span><span class="p">(</span><span class="n">ST7789_MADCTL</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">([</span><span class="n">madctl</span><span class="p">]))</span></div>
<span class="k">def</span> <span class="nf">_set_columns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>

Wyświetl plik

@ -5,6 +5,7 @@ These examples run on the LilyGo TTGO-T-Display available from the usual
locations. See https://github.com/Xinyuan-LilyGO/TTGO-T-Display for more
information.
ttgo_lines.py
-------------
@ -12,6 +13,7 @@ ttgo_lines.py
:linenos:
:language: python
ttgo_hello.py
-------------
@ -19,6 +21,7 @@ ttgo_hello.py
:linenos:
:language: python
ttgo_fonts.py
-------------
@ -26,6 +29,7 @@ ttgo_fonts.py
:linenos:
:language: python
ttgo_scroll.py
--------------
@ -38,20 +42,31 @@ toasters.py
-----------
Flying toasters sprite demo using bitmaps created from spritesheet using
ImageMagick's convert and imgtobitmap.py utility. See the maketoast script in
the utils directory for details.
ImageMagick's convert and imgtobitmap.py utility. See the maketoast script in the utils directory for details.
.. literalinclude:: ../../examples/toasters/toasters.py
:linenos:
:language: python
Chango.py
chango.py
---------
Test for font2bitmap converter for the GC9A01 display.
Test for font2bitmap converter for the driver.
See the font2bitmap program in the utils directory.
.. literalinclude:: ../../examples/truetype/chango.py
:linenos:
:language: python
noto_fonts.py
-------------
Test for font2bitmap converter for the driver.
See the font2bitmap program in the utils directory.
.. literalinclude:: ../../examples/truetype/noto_fonts.py
:linenos:
:language: python

Wyświetl plik

@ -26,10 +26,10 @@ Example:
font_from_romfont -i font-bin -o fonts -f 32 -l 127
.. literalinclude:: fontformat.py
.. literalinclude:: romfont.py
:linenos:
:language: python
:caption: Example python font file.
:caption: Sample converted romfont font module.
True-Type Font Conversion
@ -48,6 +48,13 @@ Example use:
- ./font2bitmap.py Chango-Regular.ttf 16 -c 0x20-0x7f
.. literalinclude:: truetype.py
:linenos:
:language: python
:caption: Sample converted TrueType font module.
8x8 Fonts
---------

Wyświetl plik

@ -94,7 +94,8 @@
<li class="toctree-l2"><a class="reference internal" href="#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>
@ -767,8 +768,7 @@ information.</p>
<div class="section" id="toasters-py">
<h2>toasters.py<a class="headerlink" href="#toasters-py" title="Permalink to this headline"></a></h2>
<p>Flying toasters sprite demo using bitmaps created from spritesheet using
ImageMagicks convert and imgtobitmap.py utility. See the maketoast script in
the utils directory for details.</p>
ImageMagicks convert and imgtobitmap.py utility. See the maketoast script in the utils directory for details.</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
@ -964,8 +964,8 @@ the utils directory for details.</p>
</td></tr></table></div>
</div>
<div class="section" id="chango-py">
<h2>Chango.py<a class="headerlink" href="#chango-py" title="Permalink to this headline"></a></h2>
<p>Test for font2bitmap converter for the GC9A01 display.
<h2>chango.py<a class="headerlink" href="#chango-py" title="Permalink to this headline"></a></h2>
<p>Test for font2bitmap converter for the driver.
See the font2bitmap program in the utils directory.</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
@ -1020,7 +1020,7 @@ See the font2bitmap program in the utils directory.</p>
<span class="normal">51</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">chango.py</span>
<span class="sd"> Test for font2bitmap converter for the st7789 display.</span>
<span class="sd"> Test for font2bitmap converter for the driver.</span>
<span class="sd"> See the font2bitmap program in the utils directory.</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1067,6 +1067,150 @@ See the font2bitmap program in the utils directory.</p>
<span class="n">row</span> <span class="o">+=</span> <span class="n">font_64</span><span class="o">.</span><span class="n">HEIGHT</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</td></tr></table></div>
</div>
<div class="section" id="noto-fonts-py">
<h2>noto_fonts.py<a class="headerlink" href="#noto-fonts-py" title="Permalink to this headline"></a></h2>
<p>Test for font2bitmap converter for the driver.
See the font2bitmap program in the utils directory.</p>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">noto_fonts Writes the names of three Noto fonts centered on the display</span>
<span class="sd"> using the font. The fonts were converted from True Type fonts using</span>
<span class="sd"> the font2bitmap utility.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">machine</span> <span class="kn">import</span> <span class="n">SoftSPI</span><span class="p">,</span> <span class="n">Pin</span>
<span class="kn">import</span> <span class="nn">st7789py</span> <span class="k">as</span> <span class="nn">st7789</span>
<span class="kn">from</span> <span class="nn">truetype</span> <span class="kn">import</span> <span class="n">NotoSans_32</span> <span class="k">as</span> <span class="n">noto_sans</span>
<span class="kn">from</span> <span class="nn">truetype</span> <span class="kn">import</span> <span class="n">NotoSerif_32</span> <span class="k">as</span> <span class="n">noto_serif</span>
<span class="kn">from</span> <span class="nn">truetype</span> <span class="kn">import</span> <span class="n">NotoSansMono_32</span> <span class="k">as</span> <span class="n">noto_mono</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="n">font</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">st7789</span><span class="o">.</span><span class="n">WHITE</span><span class="p">):</span>
<span class="n">screen</span> <span class="o">=</span> <span class="n">tft</span><span class="o">.</span><span class="n">width</span> <span class="c1"># get screen width</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">tft</span><span class="o">.</span><span class="n">write_width</span><span class="p">(</span><span class="n">font</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="c1"># get the width of the string</span>
<span class="k">if</span> <span class="n">width</span> <span class="ow">and</span> <span class="n">width</span> <span class="o">&lt;</span> <span class="n">screen</span><span class="p">:</span> <span class="c1"># if the string &lt; display</span>
<span class="n">col</span> <span class="o">=</span> <span class="n">tft</span><span class="o">.</span><span class="n">width</span> <span class="o">//</span> <span class="mi">2</span> <span class="o">-</span> <span class="n">width</span> <span class="o">//</span> <span class="mi">2</span> <span class="c1"># find the column to center</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># otherwise</span>
<span class="n">col</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># left justify</span>
<span class="n">tft</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">font</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">col</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">color</span><span class="p">)</span> <span class="c1"># and write the string</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">spi</span> <span class="o">=</span> <span class="n">SoftSPI</span><span class="p">(</span>
<span class="n">baudrate</span><span class="o">=</span><span class="mi">20000000</span><span class="p">,</span>
<span class="n">polarity</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">phase</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">sck</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">18</span><span class="p">),</span>
<span class="n">mosi</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">19</span><span class="p">),</span>
<span class="n">miso</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">13</span><span class="p">))</span>
<span class="n">tft</span> <span class="o">=</span> <span class="n">st7789</span><span class="o">.</span><span class="n">ST7789</span><span class="p">(</span>
<span class="n">spi</span><span class="p">,</span>
<span class="mi">135</span><span class="p">,</span>
<span class="mi">240</span><span class="p">,</span>
<span class="n">reset</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">23</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">),</span>
<span class="n">cs</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">),</span>
<span class="n">dc</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">16</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">),</span>
<span class="n">backlight</span><span class="o">=</span><span class="n">Pin</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">Pin</span><span class="o">.</span><span class="n">OUT</span><span class="p">),</span>
<span class="n">rotation</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># enable display and clear screen</span>
<span class="n">tft</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">st7789</span><span class="o">.</span><span class="n">BLACK</span><span class="p">)</span>
<span class="n">row</span> <span class="o">=</span> <span class="mi">16</span>
<span class="c1"># center the name of the first font, using the font</span>
<span class="n">center</span><span class="p">(</span><span class="n">noto_sans</span><span class="p">,</span> <span class="s2">&quot;NotoSans&quot;</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">st7789</span><span class="o">.</span><span class="n">RED</span><span class="p">)</span>
<span class="n">row</span> <span class="o">+=</span> <span class="n">noto_sans</span><span class="o">.</span><span class="n">HEIGHT</span>
<span class="c1"># center the name of the second font, using the font</span>
<span class="n">center</span><span class="p">(</span><span class="n">noto_serif</span><span class="p">,</span> <span class="s2">&quot;NotoSerif&quot;</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">st7789</span><span class="o">.</span><span class="n">GREEN</span><span class="p">)</span>
<span class="n">row</span> <span class="o">+=</span> <span class="n">noto_serif</span><span class="o">.</span><span class="n">HEIGHT</span>
<span class="c1"># center the name of the third font, using the font</span>
<span class="n">center</span><span class="p">(</span><span class="n">noto_mono</span><span class="p">,</span> <span class="s2">&quot;NotoSansMono&quot;</span><span class="p">,</span> <span class="n">row</span><span class="p">,</span> <span class="n">st7789</span><span class="o">.</span><span class="n">BLUE</span><span class="p">)</span>
<span class="n">row</span> <span class="o">+=</span> <span class="n">noto_mono</span><span class="o">.</span><span class="n">HEIGHT</span>
<span class="k">finally</span><span class="p">:</span>
<span class="c1"># shutdown spi</span>
<span class="k">if</span> <span class="s1">&#39;spi&#39;</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">():</span>
<span class="n">spi</span><span class="o">.</span><span class="n">deinit</span><span class="p">()</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</td></tr></table></div>

Wyświetl plik

@ -93,7 +93,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Fonts</a><ul>
@ -191,7 +192,7 @@ character is 256 pixels or less. They are written using the write method.</p>
<div><p>font_from_romfont -i font-bin -o fonts -f 32 -l 127</p>
</div></blockquote>
<div class="literal-block-wrapper docutils container" id="id2">
<div class="code-block-caption"><span class="caption-text">Example python font file.</span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
<div class="code-block-caption"><span class="caption-text">Sample converted romfont font module.</span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
@ -208,11 +209,31 @@ character is 256 pixels or less. They are written using the write method.</p>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;converted from vga_8x8.bin &quot;&quot;&quot;</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;converted from vga_8x8.bin &quot;&quot;&quot;</span>
<span class="c1"># font width</span>
<span class="n">WIDTH</span> <span class="o">=</span> <span class="mi">8</span>
<span class="c1"># font height</span>
<span class="n">HEIGHT</span> <span class="o">=</span> <span class="mi">8</span>
<span class="c1"># first character in front</span>
<span class="n">FIRST</span> <span class="o">=</span> <span class="mh">0x20</span>
<span class="c1"># last character in font</span>
<span class="n">LAST</span> <span class="o">=</span> <span class="mh">0x7f</span>
<span class="c1"># bitmap of each character from FIRST to LAST</span>
<span class="n">_FONT</span> <span class="o">=</span>\
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00\x00\x00\x00\x00\x00\x00\x00</span><span class="s1">&#39;</span>\
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x18\x3c\x3c\x18\x18\x00\x18\x00</span><span class="s1">&#39;</span>\
@ -241,19 +262,117 @@ the negative glyph.left fix from peterhinchs font conversion program
<li><p>./font2bitmap NotoSans-Regular.ttf 32 -s “0123456789ABCEDF”</p></li>
<li><p>./font2bitmap.py Chango-Regular.ttf 16 -c 0x20-0x7f</p></li>
</ul>
<div class="literal-block-wrapper docutils container" id="id3">
<div class="code-block-caption"><span class="caption-text">Sample converted TrueType font module.</span><a class="headerlink" href="#id3" title="Permalink to this code"></a></div>
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Converted from Chango-Regular.ttf using:</span>
<span class="c1"># ./font2bitmap.py Chango-Regular.ttf 16 -c 0x20-0x7f</span>
<span class="c1"># Maps the order of the character data</span>
<span class="n">MAP</span> <span class="o">=</span> <span class="s2">&quot; !</span><span class="se">\&quot;</span><span class="s2">#$%&amp;&#39;()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[</span><span class="se">\\</span><span class="s2">]^_`abcdefghijklmnopqrstuvwxyz{|}~&quot;</span>
<span class="c1"># Number of color bits per pixel, currently only 1 is used but could be</span>
<span class="c1"># increased to support antialiased or smoothed fonts in the future.</span>
<span class="n">BPP</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># Font height</span>
<span class="n">HEIGHT</span> <span class="o">=</span> <span class="mi">17</span>
<span class="c1"># Font max width</span>
<span class="n">MAX_WIDTH</span> <span class="o">=</span> <span class="mi">24</span>
<span class="c1"># one byte per character table of widths in the same order as the MAP string</span>
<span class="n">_WIDTHS</span> <span class="o">=</span> \
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x06\x08\x0a\x0e\x0d\x18\x10\x06\x08\x08\x0a\x0d\x06\x08\x06\x0b</span><span class="s1">&#39;</span>\
<span class="o">...</span> <span class="n">more</span> <span class="n">lines</span> <span class="n">of</span> <span class="n">data</span><span class="o">...</span>
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x0d\x0d\x0b\x0a\x0b\x0e\x0c\x12\x0d\x0c\x0b\x09\x06\x09\x0e\x0b</span><span class="s1">&#39;</span>
<span class="c1"># OFFSET_WIDTH bytes per character in the same order as the MAP string</span>
<span class="c1"># to the start of each character in bits.</span>
<span class="n">OFFSET_WIDTH</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">_OFFSETS</span> <span class="o">=</span> \
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00\x00\x00\x66\x00\xee\x01\x98\x02\x86\x03\x63\x04\xfb\x06\x0b</span><span class="s1">&#39;</span>\
<span class="o">...</span> <span class="n">more</span> <span class="n">lines</span> <span class="n">of</span> <span class="n">data</span><span class="o">...</span>
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x49\x94\x4a\x71\x4b\x3d\x4b\xf8\x4c\x91\x4c\xf7\x4d\x90\x4e\x7e</span><span class="s1">&#39;</span>
<span class="c1"># character bitmaps per character in the same order as the MAP string.</span>
<span class="c1"># Note: character data may not start on byte boundaries</span>
<span class="n">_BITMAPS</span> <span class="o">=</span>\
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61</span><span class="s1">&#39;</span>\
<span class="o">...</span> <span class="n">many</span> <span class="n">more</span> <span class="n">lines</span> <span class="n">of</span> <span class="n">data</span><span class="o">...</span>
<span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x3d\xe3\xfc\x00\x00\x00\x00\x00</span><span class="s1">&#39;</span>
<span class="n">WIDTHS</span> <span class="o">=</span> <span class="nb">memoryview</span><span class="p">(</span><span class="n">_WIDTHS</span><span class="p">)</span>
<span class="n">OFFSETS</span> <span class="o">=</span> <span class="nb">memoryview</span><span class="p">(</span><span class="n">_OFFSETS</span><span class="p">)</span>
<span class="n">BITMAPS</span> <span class="o">=</span> <span class="nb">memoryview</span><span class="p">(</span><span class="n">_BITMAPS</span><span class="p">)</span>
</pre></div>
</td></tr></table></div>
</div>
</div>
<div class="section" id="x8-fonts">
<h2>8x8 Fonts<a class="headerlink" href="#x8-fonts" title="Permalink to this headline"></a></h2>
<div class="figure align-center" id="id3">
<div class="figure align-center" id="id4">
<img alt="_images/vga1_8x8.png" src="_images/vga1_8x8.png" />
<p class="caption"><span class="caption-text">vga1_8x8.py: 128 Character 8x8 Font</span><a class="headerlink" href="#id3" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga1_8x8.py: 128 Character 8x8 Font</span><a class="headerlink" href="#id4" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id4">
<div class="figure align-center" id="id5">
<img alt="_images/vga2_8x8.png" src="_images/vga2_8x8.png" />
<p class="caption"><span class="caption-text">vga2_8x8.py: 256 Character 8x8 Font</span><a class="headerlink" href="#id4" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga2_8x8.py: 256 Character 8x8 Font</span><a class="headerlink" href="#id5" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
@ -261,16 +380,16 @@ the negative glyph.left fix from peterhinchs font conversion program
</div>
<div class="section" id="x16-fonts">
<h2>8x16 Fonts<a class="headerlink" href="#x16-fonts" title="Permalink to this headline"></a></h2>
<div class="figure align-center" id="id5">
<div class="figure align-center" id="id6">
<img alt="_images/vga1_8x16.png" src="_images/vga1_8x16.png" />
<p class="caption"><span class="caption-text">vga1_8x16.py: 128 Character 8x16 Font</span><a class="headerlink" href="#id5" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga1_8x16.py: 128 Character 8x16 Font</span><a class="headerlink" href="#id6" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id6">
<div class="figure align-center" id="id7">
<img alt="_images/vga2_8x16.png" src="_images/vga2_8x16.png" />
<p class="caption"><span class="caption-text">vga2_8x16.py: 256 Character 8x16 Font</span><a class="headerlink" href="#id6" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga2_8x16.py: 256 Character 8x16 Font</span><a class="headerlink" href="#id7" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
@ -278,30 +397,30 @@ the negative glyph.left fix from peterhinchs font conversion program
</div>
<div class="section" id="id1">
<h2>16x16 Fonts<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h2>
<div class="figure align-center" id="id7">
<img alt="_images/vga1_16x16.png" src="_images/vga1_16x16.png" />
<p class="caption"><span class="caption-text">vga1_16x16.py: 128 Character 16x16 Thin Font</span><a class="headerlink" href="#id7" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id8">
<img alt="_images/vga1_bold_16x16.png" src="_images/vga1_bold_16x16.png" />
<p class="caption"><span class="caption-text">vga1_bold_16x16.py: 128 Character 16x16 Bold Font</span><a class="headerlink" href="#id8" title="Permalink to this image"></a></p>
<img alt="_images/vga1_16x16.png" src="_images/vga1_16x16.png" />
<p class="caption"><span class="caption-text">vga1_16x16.py: 128 Character 16x16 Thin Font</span><a class="headerlink" href="#id8" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id9">
<img alt="_images/vga2_16x16.png" src="_images/vga2_16x16.png" />
<p class="caption"><span class="caption-text">vga2_16x16.py: 256 Character 16x16 Thin Font</span><a class="headerlink" href="#id9" title="Permalink to this image"></a></p>
<img alt="_images/vga1_bold_16x16.png" src="_images/vga1_bold_16x16.png" />
<p class="caption"><span class="caption-text">vga1_bold_16x16.py: 128 Character 16x16 Bold Font</span><a class="headerlink" href="#id9" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id10">
<img alt="_images/vga2_16x16.png" src="_images/vga2_16x16.png" />
<p class="caption"><span class="caption-text">vga2_16x16.py: 256 Character 16x16 Thin Font</span><a class="headerlink" href="#id10" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id11">
<img alt="_images/vga2_bold_16x16.png" src="_images/vga2_bold_16x16.png" />
<p class="caption"><span class="caption-text">vga2_bold_16x16.py: 256 Character 16x16 Bold Font</span><a class="headerlink" href="#id10" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga2_bold_16x16.py: 256 Character 16x16 Bold Font</span><a class="headerlink" href="#id11" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
@ -309,30 +428,30 @@ the negative glyph.left fix from peterhinchs font conversion program
</div>
<div class="section" id="x32-fonts">
<h2>16x32 Fonts<a class="headerlink" href="#x32-fonts" title="Permalink to this headline"></a></h2>
<div class="figure align-center" id="id11">
<img alt="_images/vga1_16x32.png" src="_images/vga1_16x32.png" />
<p class="caption"><span class="caption-text">vga1_16x32.py: 128 Character 16x32 Thin Font</span><a class="headerlink" href="#id11" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id12">
<img alt="_images/vga1_bold_16x32.png" src="_images/vga1_bold_16x32.png" />
<p class="caption"><span class="caption-text">vga1_bold_16x32.py: 128 Character 16x32 Bold Font</span><a class="headerlink" href="#id12" title="Permalink to this image"></a></p>
<img alt="_images/vga1_16x32.png" src="_images/vga1_16x32.png" />
<p class="caption"><span class="caption-text">vga1_16x32.py: 128 Character 16x32 Thin Font</span><a class="headerlink" href="#id12" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id13">
<img alt="_images/vga2_16x32.png" src="_images/vga2_16x32.png" />
<p class="caption"><span class="caption-text">vga2_16x32.py: 256 Character 16x32 Thin Font</span><a class="headerlink" href="#id13" title="Permalink to this image"></a></p>
<img alt="_images/vga1_bold_16x32.png" src="_images/vga1_bold_16x32.png" />
<p class="caption"><span class="caption-text">vga1_bold_16x32.py: 128 Character 16x32 Bold Font</span><a class="headerlink" href="#id13" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id14">
<img alt="_images/vga2_16x32.png" src="_images/vga2_16x32.png" />
<p class="caption"><span class="caption-text">vga2_16x32.py: 256 Character 16x32 Thin Font</span><a class="headerlink" href="#id14" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>
</div>
<div class="figure align-center" id="id15">
<img alt="_images/vga2_bold_16x32.png" src="_images/vga2_bold_16x32.png" />
<p class="caption"><span class="caption-text">vga2_bold_16x32.py: 256 Character 16x32 Bold Font</span><a class="headerlink" href="#id14" title="Permalink to this image"></a></p>
<p class="caption"><span class="caption-text">vga2_bold_16x32.py: 256 Character 16x32 Bold Font</span><a class="headerlink" href="#id15" title="Permalink to this image"></a></p>
</div>
<div class="line-block">
<div class="line"><br /></div>

Wyświetl plik

@ -92,7 +92,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>

Wyświetl plik

@ -93,7 +93,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>
@ -190,7 +191,8 @@ bitmap fonts derived from classic pc text mode fonts.</p>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -99,7 +99,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>

Wyświetl plik

@ -95,7 +95,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -94,7 +94,8 @@
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-fonts-py">ttgo_fonts.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#ttgo-scroll-py">ttgo_scroll.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#toasters-py">toasters.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">Chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#chango-py">chango.py</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples.html#noto-fonts-py">noto_fonts.py</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fonts.html">Fonts</a><ul>
@ -195,11 +196,19 @@ 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.</p>
<p>st7789 tft driver in MicroPython based on devbis st7789py_mpy module from
<p>The driver is based on devbis st7789py_mpy module from
<a class="reference external" href="https://github.com/devbis/st7789py_mpy">https://github.com/devbis/st7789py_mpy</a>.</p>
<p>I added support for display rotation, scrolling and drawing text using 8 and 16
bit wide bitmap fonts with heights that are multiples of 8. Included are 12
bitmap fonts derived from classic pc text mode fonts.</p>
<p>This driver adds support for:</p>
<ul class="simple">
<li><p>320x240, 240x240 and 135x240 pixel displays</p></li>
<li><p>Display rotation</p></li>
<li><p>Hardware based scrolling</p></li>
<li><p>Drawing text using 8 and 16 bit wide bitmap fonts with heights that are
multiples of 8. Included are 12 bitmap fonts derived from classic pc
BIOS text mode fonts.</p></li>
<li><p>Drawing text using converted TrueType fonts.</p></li>
<li><p>Drawing converted bitmaps</p></li>
</ul>
<dl class="py function">
<dt id="st7789py.color565">
<code class="sig-prename descclassname"><span class="pre">st7789py.</span></code><code class="sig-name descname"><span class="pre">color565</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">red</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">green</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">blue</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/st7789py.html#color565"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#st7789py.color565" title="Permalink to this definition"></a></dt>
@ -208,7 +217,7 @@ bitmap fonts derived from classic pc text mode fonts.</p>
<dl class="py class">
<dt id="st7789py.ST7789">
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">st7789py.</span></code><code class="sig-name descname"><span class="pre">ST7789</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">spi</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">height</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">backlight</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">xstart</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ystart</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">-</span> <span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rotation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/st7789py.html#ST7789"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#st7789py.ST7789" title="Permalink to this definition"></a></dt>
<em class="property"><span class="pre">class</span> </em><code class="sig-prename descclassname"><span class="pre">st7789py.</span></code><code class="sig-name descname"><span class="pre">ST7789</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">spi</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">height</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dc</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">backlight</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rotation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/st7789py.html#ST7789"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#st7789py.ST7789" title="Permalink to this definition"></a></dt>
<dd><p>ST7789 driver class</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@ -272,10 +281,13 @@ bitmap fonts derived from classic pc text mode fonts.</p>
<dd><p>Set display rotation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>rotation</strong> (<em>int</em>) – 0-Portrait, 1-Landscape, 2-Inverted Portrait,</p></li>
<li><p><strong>Landscape</strong> (<em>3-Inverted</em>) – </p></li>
<dd class="field-odd"><p><strong>rotation</strong> (<em>int</em>) – <ul class="simple">
<li><p>0-Portrait</p></li>
<li><p>1-Landscape</p></li>
<li><p>2-Inverted Portrait</p></li>
<li><p>3-Inverted Landscape</p></li>
</ul>
</p>
</dd>
</dl>
</dd></dl>

Wyświetl plik

@ -26,13 +26,20 @@ 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.
st7789 tft driver in MicroPython based on devbis' st7789py_mpy module from
The driver is based on devbis' st7789py_mpy module from
https://github.com/devbis/st7789py_mpy.
I added support for display rotation, scrolling and drawing text using 8 and 16
bit wide bitmap fonts with heights that are multiples of 8. Included are 12
bitmap fonts derived from classic pc text mode fonts.
This driver adds support for:
- 320x240, 240x240 and 135x240 pixel displays
- Display rotation
- Hardware based scrolling
- Drawing text using 8 and 16 bit wide bitmap fonts with heights that are
multiples of 8. Included are 12 bitmap fonts derived from classic pc
BIOS text mode fonts.
- Drawing text using converted TrueType fonts.
- Drawing converted bitmaps
"""
import time
@ -110,6 +117,26 @@ _BIT2 = const(0x04)
_BIT1 = const(0x02)
_BIT0 = const(0x01)
# Rotation tables (width, height, xstart, ystart)[rotation % 4]
WIDTH_320 = [(320, 240, 0, 0),
(240, 320, 0, 0),
(320, 240, 0, 0),
(240, 320, 0, 0)]
WIDTH_240 = [(240, 240, 0, 0),
(240, 240, 0, 0),
(240, 240, 0, 80),
(240, 240, 80, 0)]
WIDTH_135 = [(135, 240, 52, 40),
(240, 135, 40, 53),
(135, 240, 53, 40),
(240, 135, 40, 52)]
# MADCTL ROTATIONS[rotation % 4]
ROTATIONS = [0x00, 0x60, 0xc0, 0xa0]
def color565(red, green=0, blue=0):
"""
@ -153,9 +180,9 @@ class ST7789():
"""
Initialize display.
"""
if (width, height) != (240, 240) and (width, height) != (135, 240):
if height != 240 or width not in[320, 240, 135]:
raise ValueError(
"Unsupported display. Only 240x240 and 135x240 are supported."
"Unsupported display. 320x240, 240x240 and 135x240 are supported."
)
self._display_width = self.width = width
@ -267,41 +294,29 @@ class ST7789():
Set display rotation.
Args:
rotation (int): 0-Portrait, 1-Landscape, 2-Inverted Portrait,
3-Inverted Landscape
rotation (int):
- 0-Portrait
- 1-Landscape
- 2-Inverted Portrait
- 3-Inverted Landscape
"""
self._rotation = rotation % 4
if self._rotation == 0: # Portrait
madctl = ST7789_MADCTL_RGB
self.width = self._display_width
self.height = self._display_height
if self._display_width == 135:
self.xstart = 52
self.ystart = 40
elif self._rotation == 1: # Landscape
madctl = ST7789_MADCTL_MX | ST7789_MADCTL_MV | ST7789_MADCTL_RGB
self.width = self._display_height
self.height = self._display_width
if self._display_width == 135:
self.xstart = 40
self.ystart = 53
rotation %= 4
self._rotation = rotation
madctl = ROTATIONS[rotation]
elif self._rotation == 2: # Inverted Portrait
madctl = ST7789_MADCTL_MX | ST7789_MADCTL_MY | ST7789_MADCTL_RGB
self.width = self._display_width
self.height = self._display_height
if self._display_width == 135:
self.xstart = 53
self.ystart = 40
else: # Inverted Landscape
madctl = ST7789_MADCTL_MV | ST7789_MADCTL_MY | ST7789_MADCTL_RGB
self.width = self._display_height
self.height = self._display_width
if self._display_width == 135:
self.xstart = 40
self.ystart = 52
if self._display_width == 320:
table = WIDTH_320
elif self._display_width == 240:
table = WIDTH_240
elif self._display_width == 135:
table = WIDTH_135
else:
raise ValueError(
"Unsupported display. 320x240, 240x240 and 135x240 are supported."
)
self.width, self.height, self.xstart, self.ystart = table[rotation]
self._write(ST7789_MADCTL, bytes([madctl]))
def _set_columns(self, start, end):