Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
11 years, 8 months ago.
how can I have big font on GLCD(ILI9320)
Hi all,
I want to have bigger font on graphic LCD(ILI9320)
I'm using a library which have some function to draw line,circle and rectangular .Also have a 8*16 font ,there is no problem with running GLCD. Now I want to have big font on GLCD. I find some code here: http://mbed.org/users/dreschpe/code/TFT_fonts/
but I can't use them anyone can help me? is it necessary to upload my library here?
2 Answers
11 years, 8 months ago.
I use these font files for my ILI9320 display driver:
http://mbed.org/users/star297/code/HY-1_8TFT_fonts_ST7735/
Import the Font library to your program and add it as a Library (not program) then add the fonts you want to use by using the #include, something like below that includes all the fonts, the last two fonts are a bit different and quite interesting. The program below may not work for you as it depends on you your display and library, but is a typical example how to construct the initial part of your program.
Example using Font files
#include "mbed.h"
#include "SPI_TFT_ILI9320.h" // your display header file may be different here
#include "Arial8x8.h"
#include "Arial9x9.h"
#include "Arial11x11.h"
#include "Arial12x12.h"
#include "Arial24x23i.h"
#include "Arial28x28.h"
#include "Neu42x35.h"
#include "SCProSB31x55.h"
SPI_TFT TFT(p5, p6, p7, p8,"TFT"); // TFT -> mosi, miso, sclk, cs your display device set up may be different here
int main()
{
TFT.cls(); //clear screen
TFT.set_font((unsigned char*)Arial24x23i); // set font from the #include list above that you want to print
TFT.foreground(White); //set text colour
TFT.locate(10,20); // set screen position where to print
TFT.printf("Some Text here...");
TFT.cls(); //clear the screen again
TFT.background(Red); // set the text display background to red this time (default is black)
TFT.set_font((unsigned char*)Arial12x12); // set a different font
TFT.locate(60,70); // set the text screen position where you want the text to print on your display
TFT.printf(" Print some more text");
}
Thanks,
How did you used these code? I mean how these codes implement in main program? did you made any library for using these fonts?
posted by 14 Mar 2014dear @Paul, can I ask you to upload me the SPI_TFT_ILI9320.h and SPI_TFT_ILI9320.c because I'm using Keil compiler
posted by 15 Mar 2014here is the link for the code I use:
http://mbed.org/users/frankvnk/code/SPI_TFT_ILI9320/#630b4da97968
posted by 15 Mar 201411 years, 8 months ago.
This code draws large digits to ili9341 controlled tft. The original code was written in Java and i reused it a lot when converting to C++.
http://www.youtube.com/watch?v=c15O3an6wFw
numberarea.h
#ifndef NUMBERAREA_H
#define NUMBERAREA_H
#include "mbed.h"
class NumSize
{
public:
NumSize(int width, int height);
int _width, _height;
int getWidth();
int getHeight();
int getHalfHeight();
int getHalfWidth();
int getQuarterHeight();
int getQuarterWidth();
int getLineWidth();
};
class NumberArea
{
public:
int _width, _height;
int _maxNumCount;
NumSize _numSize;
int _x, _y;
NumberArea(int x, int y, int width, int height, int maxNumCount);
void drawNumbers(int8_t numbers[], bool negative);
};
#endif
numberarea.cpp
#include "NumberArea.h"
#include "SPI_TFT_ILI9341.h"
SPI_TFT_ILI9341 tft(P1_22, P1_21, P1_20, P1_23, P0_20, P0_21,"TFT"); // mosi, miso, sclk, cs, reset, dc
#define BACKGROUND White
#define INK Black
NumSize::NumSize(int width, int height)
{
_width = width;
_height = height;
}
int NumSize::getWidth()
{
return _width;
}
int NumSize::getHeight()
{
return _height;
}
int NumSize::getHalfHeight()
{
return _height / 2;
}
int NumSize::getHalfWidth()
{
return _width / 2;
}
int NumSize::getQuarterHeight()
{
return _height / 4;
}
int NumSize::getQuarterWidth()
{
return _width / 4;
}
int NumSize::getLineWidth()
{
return _width / 4;
}
NumberArea::NumberArea(int x, int y, int width, int height, int maxNumCount)
: _numSize(0, 0)
{
_x = x;
_y = y;
_width = width;
_height = height;
_maxNumCount = maxNumCount;
// Figure out the screen aspect ratio.
// Numbers are always 1:2 (width:height)
int numWidth = width / maxNumCount;
if(numWidth*2>_height) {
numWidth = _height/2;
}
_numSize._width=numWidth;
_numSize._height= numWidth*2;
tft.set_orientation(3);//320*240, spi connector is left
tft.background(BACKGROUND);
}
void NumberArea::drawNumbers(int8_t numbers[], bool negative)
{
int num = 0;
int xinc = _x + _width - _numSize.getWidth();
if (negative) {
tft.background(Cyan);
} else {
tft.background(BACKGROUND);
}
tft.cls();
for(int i = 0; i < _maxNumCount; i++) {
num = numbers[i];
if(num==0) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(), _y + _numSize.getHeight(), INK);
tft.fillrect(xinc+_numSize.getLineWidth(), _y+_numSize.getLineWidth(), xinc + _numSize.getWidth() - 2*_numSize.getLineWidth(),
_y + _numSize.getHeight() - _numSize.getLineWidth(), BACKGROUND);
}
if(num==1) {
tft.fillrect(xinc+_numSize.getHalfWidth(), _y, xinc+_numSize.getHalfWidth() + _numSize.getQuarterWidth(), _y + _numSize.getHeight(), INK);
}
if(num==2) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getLineWidth(),
xinc + _numSize.getWidth()-_numSize.getLineWidth(), _y+_numSize.getHalfHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight()+_numSize.getLineWidth(),
xinc + _numSize.getLineWidth(), _y+_numSize.getHeight(), INK);
tft.fillrect(xinc + _numSize.getLineWidth(), _y+_numSize.getHeight()- _numSize.getLineWidth(),
xinc + _numSize.getWidth()- _numSize.getLineWidth(), _y+_numSize.getHeight(), INK);
}
if(num==3) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getLineWidth(),
xinc + _numSize.getWidth() - _numSize.getLineWidth() , _y+_numSize.getHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y+_numSize.getHeight() - _numSize.getLineWidth(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK);
}
if(num==4) {
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getLineWidth(),
xinc + _numSize.getWidth() - _numSize.getLineWidth() , _y+_numSize.getHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y, xinc + _numSize.getLineWidth(),
_y+_numSize.getHalfHeight(), INK);
}
if(num==5) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y +_numSize.getLineWidth(), xinc + _numSize.getLineWidth(),_y+_numSize.getHalfHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHeight() - _numSize.getLineWidth(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK);
}
if(num==6) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);
tft.fillrect(xinc , _y+_numSize.getLineWidth(),
xinc + _numSize.getLineWidth() , _y+_numSize.getHeight(), INK);
tft.fillrect(xinc + _numSize.getLineWidth(), _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y+_numSize.getHeight() - _numSize.getLineWidth(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK);
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getHalfHeight()+_numSize.getLineWidth(),
xinc + _numSize.getWidth()- _numSize.getLineWidth(), _y+_numSize.getHeight(), INK);
}
if(num==7) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);
tft.fillrect(xinc+_numSize.getWidth()- 2*_numSize.getLineWidth(), _y + _numSize.getLineWidth(),
xinc+_numSize.getWidth()- _numSize.getLineWidth(), _y + _numSize.getHeight(), INK);
}
if(num==8) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);//top line
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getLineWidth(), //right line
xinc + _numSize.getWidth() - _numSize.getLineWidth() , _y+_numSize.getHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),//middle line
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y+_numSize.getHeight() - _numSize.getLineWidth(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK); //bottom line
tft.fillrect(xinc, _y + _numSize.getLineWidth(),// left line
xinc + _numSize.getLineWidth(), _y+_numSize.getHeight() - _numSize.getLineWidth(), INK);
}
if(num==9) {
tft.fillrect(xinc, _y, xinc + _numSize.getWidth()- _numSize.getLineWidth(),_y+_numSize.getLineWidth(), INK);//top line
tft.fillrect(xinc + _numSize.getWidth()- 2*_numSize.getLineWidth(), _y+_numSize.getLineWidth(), //right line
xinc + _numSize.getWidth() - _numSize.getLineWidth() , _y+_numSize.getHeight(), INK);
tft.fillrect(xinc, _y+_numSize.getHalfHeight(), xinc + _numSize.getWidth()- _numSize.getLineWidth(), //middle line
_y+_numSize.getHalfHeight()+_numSize.getLineWidth(), INK);
tft.fillrect(xinc, _y+_numSize.getHeight() - _numSize.getLineWidth(), xinc + _numSize.getWidth()- _numSize.getLineWidth(),
_y+_numSize.getHeight(), INK); // botton line
tft.fillrect(xinc, _y + _numSize.getLineWidth(), //left line
xinc + _numSize.getLineWidth(), _y + _numSize.getHalfHeight(), INK);
}
xinc -= _numSize.getWidth();
}
}
Really big font: Use GIMP to create each character and export them to .BMP files. Then convert .BMP files to to C code with LCD Assintant (http://en.radzio.dxp.pl/bitmap_converter/). Put the C code to one .H file and copy text to the empty (= memset(picbuff, 0, sizeof(picbuff) ) picture buffer, picbuff[9600];. Then draw the whole TFT screen with this picture buffer.
posted by Compass Developer 02 Sep 2014