{"id":792,"date":"2016-02-20T20:29:53","date_gmt":"2016-02-20T19:29:53","guid":{"rendered":"http:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/?p=792"},"modified":"2021-12-29T11:48:30","modified_gmt":"2021-12-29T10:48:30","slug":"tft-display-ssd1963-atmega162","status":"publish","type":"post","link":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/","title":{"rendered":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162"},"content":{"rendered":"<p style=\"text-align: justify;\">V tomto \u010dl\u00e1nku se budu v\u011bnovat popisu ovl\u00e1d\u00e1n\u00ed TFT displeje, kter\u00fd byl koupen na <a href=\"http:\/\/www.ebay.com\/itm\/4-3-inch-TFT-LCD-module-w-Font-IC-480x272-SSD1963-arduino-DUE-MEGA-3-2-2-8-\/121139473770\">Ebay.com<\/a>. TFT display je \u0159\u00edzen \u0159adi\u010dem SSD1963. Nap\u00e1jen\u00ed displeje je 3,3V a se zapnut\u00fdm podsv\u00edcen\u00edm bude pot\u0159eba skoro 300mA &#8211; podle toho je pot\u0159eba navrhnout zdroj pro prvn\u00ed pokusy na nep\u00e1jiv\u00e9m poli. V prvn\u00ed \u010d\u00e1sti \u010dl\u00e1nku pop\u00ed\u0161u p\u0159ipojen\u00ed \u0159adi\u010de k procesoru \u0159ady ATmega a inicializaci \u0159adi\u010de. V dal\u0161\u00edch kapitol\u00e1ch textu budou pops\u00e1ny funkce nutn\u00e9 k vykreslen\u00ed bodu, \u010d\u00e1ry, obd\u00e9ln\u00edku a kruhu na TFT display. \u0158adi\u010d displeje neobsahuje \u017e\u00e1dn\u00fd alfanumerick\u00fd font, jako je obvykl\u00e9 u LCD displej\u016f s \u0159adi\u010di HD44780, nebo T6963. Tam sta\u010dilo poslat na displej k\u00f3d znaku a \u0159adi\u010d displeje se postaral o vytvo\u0159en\u00ed znaku ze sv\u00e9 pam\u011bti. P\u0159i pr\u00e1ci s \u0159adi\u010dem SSD1963 se o tvorbu znak\u016f mus\u00ed postarat program v procesoru, jednotliv\u00e9 znaky je pot\u0159eba poslat na displej jako pole barevn\u00fdch bod\u016f. Tak\u017ee v posledn\u00ed \u010d\u00e1sti \u010dl\u00e1nku se pokus\u00edme z Windows do pam\u011bti procesoru ATmega dostat n\u011bjak\u00fd font.<\/p>\n<p style=\"text-align: justify;\">Popisovan\u00fd TFT display m\u00e1 rozli\u0161en\u00ed 480 x 272 bod\u016f.<\/p>\n<h3 style=\"text-align: justify;\">P\u0159ipojen\u00ed \u0159adi\u010de SSD1963 k procesoru ATmega644<\/h3>\n<p><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-803 size-medium\" title=\"TFT display SSD1963\" src=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_1-366x274.jpg\" alt=\"TFT display SSD1963\" width=\"366\" height=\"274\" srcset=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_1-366x274.jpg 366w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_1-150x113.jpg 150w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_1.jpg 1600w\" sizes=\"auto, (max-width: 366px) 100vw, 366px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Komunikace prob\u00edh\u00e1 prost\u0159ednictv\u00edm 16-ti bitov\u00e9, nebo 8-mi bitov\u00e9 sb\u011brnice a \u0159\u00edd\u00edc\u00edch vodi\u010d\u016f. \u0158adi\u010d umo\u017e\u0148uje uspo\u0159\u00e1dat \u010dasov\u00e1n\u00ed \u0159\u00edd\u00edc\u00edch vodi\u010d\u016f tak, jak je zvykem u procesor\u016f \u0159ady 6800, nebo u procesor\u016f \u0159ady 8080. V displeji kter\u00fd m\u00e1m k dispozici, je \u0159adi\u010d zapojen v re\u017eimu 8080, tak\u017ee se pod\u00edv\u00e1me, jak za\u0159\u00eddit komunikaci v tomto re\u017eimu:<\/p>\n<figure id=\"attachment_793\" aria-describedby=\"caption-attachment-793\" style=\"width: 556px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-793 size-full\" src=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963timing.png\" alt=\"SSD1963 timing\" width=\"556\" height=\"264\" srcset=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963timing.png 556w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963timing-150x71.png 150w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963timing-366x174.png 366w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963timing-720x340.png 720w\" sizes=\"auto, (max-width: 556px) 100vw, 556px\" \/><figcaption id=\"caption-attachment-793\" class=\"wp-caption-text\">Obr\u00e1zek z datov\u00e9ho listu obvodu SSD1963<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">P\u0159i z\u00e1pisu dat do displeje, mus\u00ed b\u00fdt data p\u0159ipravena na sb\u011brnici, sign\u00e1l \/WR mus\u00ed b\u00fdt aktivn\u00ed (\u00farove\u0148 L) a data do displeje budou p\u0159enesena sestupnou hranou sign\u00e1lu \/CS. Nakonec se uk\u00e1zalo, \u017ee po\u0159ad\u00ed sign\u00e1lu \/WR a \/CS m\u016f\u017ee b\u00fdt i opa\u010dn\u00e9. Tak\u017ee pokud na datov\u00e9 sb\u011brnici procesoru nen\u00ed p\u0159ipojen jin\u00fd obvod ne\u017e displej, sta\u010d\u00ed pro komunikaci sign\u00e1l \/WR. Sign\u00e1l \/CS, v\u00fdb\u011br obvodu, m\u016f\u017ee b\u00fdt p\u0159ipojen na \u00farove\u0148 L po\u0159\u00e1d. P\u0159i \u010dten\u00ed dat z displeje je nutn\u00e9, aby datov\u00e1 sb\u011brnice procesoru byla ve stavu vysok\u00e9 impedance. Data na n\u00ed budou k dispozici, kdy\u017e bude sign\u00e1l \/RD v \u00farovni L. Z displeje v tomto \u010dl\u00e1nku nebudeme\u010d\u00edst nic, tak\u017ee \/RD z\u016fstane po\u0159\u00e1d neaktivn\u00ed v \u00farovni H.<\/p>\n<p style=\"text-align: justify;\">Sign\u00e1l D\/C slou\u017e\u00ed k rozli\u0161en\u00ed, zda jsou p\u0159en\u00e1\u0161ena data, nebo p\u0159\u00edkazy (command). Pro p\u0159enos p\u0159\u00edkaz\u016f sta\u010d\u00ed 8-mi bitov\u00e1 sb\u011brnice. Pro p\u0159enos barev je zapot\u0159eb\u00ed \u0161est bit\u016f na ka\u017edou barvu, \u010dervenou, zelenou a modrou. To je dohromady 18 bit\u016f. \u0158adi\u010d nab\u00edz\u00ed n\u011bkolik mo\u017enost\u00ed, jak barvy p\u0159en\u00e1\u0161et. M\u016f\u017eeme pou\u017e\u00edt 8-mi bitovou sb\u011brnici a barvu p\u0159en\u00e9st ve t\u0159ech kroc\u00edch. Nebo je mo\u017en\u00e9 pou\u017e\u00edt dev\u011bt bit\u016f a potom sta\u010d\u00ed dva kroky. Pro 16-ti bitov\u00fd p\u0159enos \u0159adi\u010d umo\u017e\u0148uje u\u0161et\u0159it dva bity z 18-ti. Tento re\u017eim je nazv\u00e1n 5-6-5, \u010derven\u00e1 a modr\u00e1 barva m\u00e1 o jeden bit m\u00ed\u0148. Proto\u017ee je nutn\u00e9 data p\u0159en\u00e1\u0161et co nejrychleji &#8211; na vykreslen\u00ed 480 x 272 bod\u016f je pot\u0159eba 130560 \u010d\u00edsel,\u00a0 pou\u017eijeme tento re\u017eim.<\/p>\n<figure id=\"attachment_794\" aria-describedby=\"caption-attachment-794\" style=\"width: 934px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-794 size-full\" src=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_colors.png\" alt=\"TFT display SSD1963_colors\" width=\"934\" height=\"251\" srcset=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_colors.png 934w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_colors-150x40.png 150w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963_colors-366x98.png 366w\" sizes=\"auto, (max-width: 934px) 100vw, 934px\" \/><figcaption id=\"caption-attachment-794\" class=\"wp-caption-text\">Obr\u00e1zek z datov\u00e9ho listu obvodu SSD1963<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Je\u0161t\u011b je pot\u0159eba naj\u00edt p\u0159\u00edkaz, kter\u00fd ovl\u00e1d\u00e1 re\u017eimy &#8211; je to 0xF0.<\/p>\n<p style=\"text-align: justify;\">TFT display jsem p\u0159ipojil k procesoru a napsal makra pro jednotliv\u00e9 piny port\u016f, kter\u00e9 budu pot\u0159ebovat:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">#define SSD1963_set_RD\u00a0\u00a0 \u00a0PORTD &amp;=~0x08;   \/\/ cteni z displeje, bit 3 portu D\n#define SSD1963_clr_RD\u00a0\u00a0 \u00a0PORTD |= 0x08;\n#define SSD1963_set_WR\u00a0\u00a0 \u00a0PORTD &amp;=~0x04;   \/\/ zapis do displeje, bit 2 portu D\n#define SSD1963_clr_WR\u00a0\u00a0 \u00a0PORTD |= 0x04;\n#define SSD1963_set_RS\u00a0\u00a0 \u00a0PORTD |= 0x02;   \/\/ prenos dat, bit 1 portu D\n#define SSD1963_clr_RS\u00a0\u00a0 \u00a0PORTD &amp;=~0x02;   \/\/ prenos prikazu\n#define SSD1963_DataL\u00a0\u00a0  \u00a0PORTA\n#define SSD1963_DataH\u00a0\u00a0  \u00a0PORTC<\/pre>\n<p style=\"text-align: justify;\">Funkce pro p\u0159enos p\u0159\u00edkazu:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_SendCommand(unsigned int val)\n{\n\u00a0\u00a0 \u00a0SSD1963_clr_RS;                \/\/ nastavi pin pro prenos prikazu\n\u00a0\u00a0 \u00a0SSD1963_DataH = val &gt;&gt; 8;      \/\/ horni polovina 16-ti bitoveho cisla na port C\n\u00a0\u00a0 \u00a0SSD1963_DataL = val;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0   \/\/ dolni polovina 16-ti bitoveho cisla na port A\n\u00a0\u00a0 \u00a0SSD1963_set_WR;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ impuls na WR\n\u00a0\u00a0 \u00a0SSD1963_clr_WR;\n}<\/pre>\n<p style=\"text-align: justify;\">Funkce pro p\u0159enos dat:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_SendData(unsigned int val)\n{\n\u00a0\u00a0 \u00a0SSD1963_set_RS;                \/\/ nastavi pin pro prenos dat\n\u00a0\u00a0 \u00a0SSD1963_DataH = val &gt;&gt; 8;      \/\/ horni polovina 16-ti bitoveho cisla na port C\n\u00a0\u00a0 \u00a0SSD1963_DataL = val;\u00a0\u00a0 \u00a0\u00a0\u00a0    \u00a0\/\/ dolni polovina 16-ti bitoveho cisla na port A\n\u00a0\u00a0 \u00a0SSD1963_set_WR;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ impuls na WR\n\u00a0\u00a0 \u00a0SSD1963_clr_WR;\n}<\/pre>\n<p>Je\u0161t\u011b se bude hodit funkce, kter\u00e1 najednou po\u0161le p\u0159\u00edkaz a jeho parametr:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_WriteDataChar(unsigned int command, unsigned int val)\n{\n\u00a0\u00a0 \u00a0TFT_SendCommand( command );\n\u00a0\u00a0 \u00a0TFT_SendData( val );\n}<\/pre>\n<h3 style=\"text-align: justify;\">Inicializace \u0159adi\u010de SSD1963<\/h3>\n<p style=\"text-align: justify;\">Na za\u010d\u00e1tku pr\u00e1ce, po p\u0159ipojen\u00ed displeje na nap\u00e1jen\u00ed je zapot\u0159eb\u00ed nastavit spoustu registr\u016f v \u0159adi\u010di, aby bylo mo\u017en\u00e9 \u0159adi\u010dem ovl\u00e1dat TFT panel. N\u00e1sleduj\u00edc\u00ed funkce provede softwarov\u00fd reset displeje, nastav\u00ed PLL gener\u00e1tor, nastav\u00ed po\u010det bod\u016f na\u0161\u00ed\u0159ku a na v\u00fd\u0161ku displeje. Posledn\u00ed \u010d\u00e1st funkce nastav\u00ed PWM gener\u00e1tor, kter\u00fdm je mo\u017en\u00e9 \u0159\u00eddit jas podsv\u00edcen\u00ed displeje. Kv\u016fli tomu je zapot\u0159eb\u00ed p\u0159em\u00edstit jeden odpor &#8211; propojku na plo\u0161n\u00e9m spoji displeje z pozice R4 na pozici R8. Parametry jednotliv\u00fdch p\u0159\u00edkaz\u016f jsou p\u0159evzaty z dokumentace, kterou lze st\u00e1hnout ze str\u00e1nek na ebay.com.<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_Init(void)\n{\n\u00a0\u00a0 \u00a0SSD1963_clr_WR;\n\u00a0\u00a0 \u00a0SSD1963_clr_RD;\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x0001 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0\/\/ software reset\n\u00a0\u00a0 \u00a0_delay_ms( 10 );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00E2 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0\/\/ PLL multiplier, set PLL clock to 120MHz\n\u00a0\u00a0 \u00a0TFT_SendData( 0x002D );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0002 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0004 );\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x00E0, 0x0001 );\u00a0\u00a0    \u00a0\/\/ PLL enable\n\u00a0\u00a0 \u00a0_delay_ms( 2 );\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x00E0, 0x0003 );\n\u00a0\u00a0 \u00a0_delay_ms( 5 );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x0001 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ software reset\n\u00a0\u00a0 \u00a0_delay_ms( 5 );\n\u00a0\u00a0 \u00a0\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00E6 );\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0  \u00a0\u00a0 \u00a0\/\/SET PCLK freq=9.5MHz\u00a0 ; pixel clock frequency\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 0x03\n\u00a0\u00a0 \u00a0TFT_SendData( 0x00FF );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x00BE );\n\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00B0 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0 \u00a0\/\/ set LCD specification\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0020 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/LCD panel mode\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0001 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET horizontal size=480-1 HightByte\n\u00a0\u00a0 \u00a0TFT_SendData( 0x00DF );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \/\/SET horizontal size=480-1 LowByte\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0001 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET vertical size=272-1 HightByte\n\u00a0\u00a0 \u00a0TFT_SendData( 0x000F );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET vertical size=272-1 LowByte\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET even\/odd line RGB seq.=RGB\n\u00a0\u00a0 \u00a0\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00B4 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET Horizontal Period (8 parameters)\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0002 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/531 HT\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0013 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/43 HPS\n\u00a0\u00a0 \u00a0TFT_SendData( 0x002B );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x000A );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/10 HPW\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0008 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/8 LPS\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\n\u00a0\u00a0 \u00a0\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00B6 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/SET Vertical Period (7 parameters),\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0001 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/288 VT\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0020 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/12 VPS\n\u00a0\u00a0 \u00a0TFT_SendData( 0x000C );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x000A );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/10 VPW\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/4 FPS\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0004 );\n\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x0036, 0x0000 );\u00a0\u00a0    \u00a0\/\/rotation!!!!!!!!! toci displejem, prostudovat\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x00F0, 0x0003 );\u00a0\u00a0    \u00a0\/\/ 565 format barvy\n\u00a0\u00a0 \u00a0_delay_ms( 5 );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x0029 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0\/\/ Display ON\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00BE );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0  \u00a0\/\/ set PWM for B\/L\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0006 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x00F0 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ hodnota PWM\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0001 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x00F0 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x00D0, 0x000D );\n\u00a0\u00a0 \u00a0\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x00B8 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ reset GPIO0\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0000 );\n\u00a0\u00a0 \u00a0TFT_SendData( 0x0001 );\n\u00a0\u00a0 \u00a0TFT_WriteDataChar( 0x00BA, 0x0000 );\n}<\/pre>\n<p style=\"text-align: justify;\">TFT display se poda\u0159ilo p\u0159ipojit a rozsv\u00edtit. Pam\u011b\u0165 t\u00edmto zp\u016fsobem inicializovan\u00e9ho displeje je napln\u011bna n\u00e1hodn\u00fdmi \u010d\u00edsly. Proto budou i barvy na displeji rozm\u00edst\u011bny chaoticky &#8211; zrn\u011bn\u00ed v\u0161ech mo\u017en\u00fdch barev. Budeme pot\u0159ebovat funkci, kter\u00e1 cel\u00fd displej zapln\u00ed jednou barvou. No a proto\u017ee jsou barvy vyj\u00e1d\u0159eny 16-ti bitov\u00fdmi \u010d\u00edsly, bude dobr\u00e9 nadefinovat n\u011bkolik z\u00e1kladn\u00edch barev, abychom si nemuseli pamatovat jejich \u010d\u00edseln\u00e9 vyj\u00e1d\u0159en\u00ed:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColBlack\u00a0\u00a0 \u00a0\u00a0   \u00a0 \u00a00x0000\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ cerna\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColNavy\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x000F\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ namorni modra\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColBlue\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x001F\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ modra\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColDarkBlue\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x01CF\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ tmave modra\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColDarkGreen\u00a0\u00a0    \u00a00x03E0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ tmave zelena\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColDarkCyan\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x03EF\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ tmave azurova\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColGreen\u00a0\u00a0 \u00a0\u00a0\u00a0    \u00a00x07E0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zelena\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColCyan\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x07FF\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ azurova\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColGrayBlue\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x5458\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ seda modra\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColMaroon\u00a0\u00a0 \u00a0\u00a0\u00a0   \u00a00x7800\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ hnedocervena\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColPurple\u00a0\u00a0 \u00a0\u00a0\u00a0   \u00a00x780F\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nachova\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColOlive\u00a0\u00a0 \u00a0\u00a0\u00a0    \u00a00x7BEF\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ olivova\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColLightBlue\u00a0\u00a0    \u00a00x7D7C\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ svetle modra\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColPorpo\u00a0\u00a0 \u00a0\u00a0\u00a0    \u00a00x801F\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColDarkGrey\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x8410\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ tmave seda\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColGrey\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a00x8430\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ seda\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColLGreyGreen\u00a0\u00a0   \u00a00xA651\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ svetle sedozelena\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColLightGrey\u00a0\u00a0    \u00a00xC618\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ svetle seda\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColRed\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0  \u00a00xF800\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ cervena\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColMagneta\u00a0\u00a0 \u00a0\u00a0\u00a0  \u00a00xF81F\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ purpurova\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColOrange\u00a0\u00a0 \u00a0\u00a0\u00a0   \u00a00xFC08\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ oranz\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColYellow\u00a0\u00a0 \u00a0\u00a0\u00a0   \u00a00xFFE0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zluta\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ColWhite\u00a0\u00a0 \u00a0\u00a0\u00a0    \u00a00xFFFF\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ bila<\/pre>\n<h3 style=\"text-align: justify;\"><\/h3>\n<h3 style=\"text-align: justify;\">TFT display a funkce pro kreslen\u00ed<\/h3>\n<p style=\"text-align: justify;\">Na za\u010d\u00e1tku ka\u017ed\u00e9 operace na displeji vymez\u00edme prostor &#8211; obd\u00e9ln\u00edk, ve kter\u00e9m budeme kreslit. K tomu slou\u017e\u00ed p\u0159\u00edkaz 0x2A a 0x2B, kter\u00e9 jsem vyu\u017eil v n\u00e1sleduj\u00edc\u00ed funkci:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_WindowSet(unsigned int StartX, unsigned int EndX, unsigned int StartY, unsigned int EndY)\n{\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x002A );\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \/\/ SET page address\n\u00a0\u00a0 \u00a0TFT_SendData( StartX &gt;&gt; 8 );\u00a0\u00a0 \u00a0  \/\/ SET start page address\n\u00a0\u00a0 \u00a0TFT_SendData( StartX );\n\u00a0\u00a0 \u00a0TFT_SendData( EndX &gt;&gt; 8 );\u00a0\u00a0 \u00a0 \u00a0 \u00a0\/\/ SET end page address\n\u00a0\u00a0 \u00a0TFT_SendData( EndX );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x002B );\u00a0\u00a0 \u00a0\u00a0\u00a0  \/\/ SET column address\n\u00a0\u00a0 \u00a0TFT_SendData( StartY &gt;&gt; 8 );\u00a0\u00a0 \u00a0 \u00a0\/\/ SET start column address\n\u00a0\u00a0 \u00a0TFT_SendData( StartY );\n\u00a0\u00a0 \u00a0TFT_SendData( EndY &gt;&gt; 8 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ SET end column address\n\u00a0\u00a0 \u00a0TFT_SendData( EndY );\n}<\/pre>\n<p style=\"text-align: justify;\">A tady je funkce, kter\u00e1 vyhrazenou plochu displeje zapln\u00ed zadanou barvou. Do prostoru v pam\u011bti displeje vyhrazen\u00e9ho funkc\u00ed TFT_WindowSet, nahraje po\u017eadovanou barvu. To, \u017ee bude zah\u00e1jeno nahr\u00e1v\u00e1n\u00ed barev do pam\u011bti, ozn\u00e1m\u00ed \u0159adi\u010di p\u0159\u00edkaz 0x2C:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_ColorBox(unsigned int StartX, unsigned int EndX, unsigned int StartY, unsigned int EndY, unsigned int color)\n{\n\u00a0\u00a0 \u00a0unsigned int x, y;\n\u00a0\u00a0 \u00a0TFT_WindowSet( StartX, EndX, StartY, EndY );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x002C );\n\u00a0\u00a0 \u00a0for( x = StartX; x &lt;= EndX; x++ )\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for ( y = StartY; y &lt;= EndY; y++ )\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_SendData( color );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastavi barvu\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0}\n}<\/pre>\n<p style=\"text-align: justify;\">Dal\u0161\u00ed funkce je podobn\u00e1, ale vyhrazen\u00e1 plocha m\u00e1 velikost jednoho bodu. Tak\u017ee nakresl\u00edme bod:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_DrawPoint(unsigned int x, unsigned int y, unsigned int color)\n{\n\u00a0\u00a0 \u00a0TFT_WindowSet( x, x, y, y );\n\u00a0\u00a0 \u00a0TFT_SendCommand( 0x002C );\n\u00a0\u00a0 \u00a0TFT_SendData( color );\n}<\/pre>\n<p style=\"text-align: justify;\">No a na konec budeme kreslit p\u0159\u00edmku, obd\u00e9ln\u00edk a kru\u017enici:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2,\nunsigned int y2, unsigned int color)\n{\n\u00a0\u00a0 \u00a0int dx, dy, stepx, stepy, fraction;\n\n\u00a0\u00a0 \u00a0dy = y2 - y1;\n\u00a0\u00a0 \u00a0dx = x2 - x1;\n\u00a0\u00a0 \u00a0if (dy &lt; 0)\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dy = -dy;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0stepy = -1;\n\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0else stepy = 1;\n\u00a0\u00a0 \u00a0if (dx &lt; 0)\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dx = -dx;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0stepx = -1;\n\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0else stepx = 1;\n\u00a0\u00a0 \u00a0dx &lt;&lt;= 1;\n\u00a0\u00a0 \u00a0dy &lt;&lt;= 1;\n\u00a0\u00a0 \u00a0TFT_DrawPoint( x1, y1, color );\n\u00a0\u00a0 \u00a0if (dx &gt; dy)\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction = dy - (dx &gt;&gt; 1);\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0while( x1 != x2 )\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (fraction &gt;= 0)\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0y1\u00a0\u00a0 \u00a0\u00a0\u00a0 += stepy;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction -= dx;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0x1\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 += stepx;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction\u00a0\u00a0 \u00a0 += dy;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x1, y1, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0else\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction = dx - (dy &gt;&gt; 1);\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0while( y1 != y2 )\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (fraction &gt;= 0)\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0x1\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0+= stepx;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction\u00a0\u00a0 \u00a0-= dy;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0y1\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0+= stepy;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0fraction\u00a0\u00a0 \u00a0+= dx;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x1, y1, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0}\n}<\/pre>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_DrawBox(unsigned int x1, unsigned int y1, unsigned int x2,\nunsigned int y2, unsigned int color)\n{\n\u00a0\u00a0 \u00a0TFT_DrawLine( x1, y1, x2, y1, color);\u00a0\u00a0 \u00a0\/\/ horni cara\n\u00a0\u00a0 \u00a0TFT_DrawLine( x1, y2, x2, y2, color);\u00a0\u00a0 \u00a0\/\/ spodni cara\n\u00a0\u00a0 \u00a0TFT_DrawLine( x2, y1, x2, y2, color);\u00a0\u00a0 \u00a0\/\/ prava cara\n\u00a0\u00a0 \u00a0TFT_DrawLine( x1, y1, x1, y2, color);\u00a0\u00a0 \u00a0\/\/ leva cara\n}<\/pre>\n<pre class=\"\" style=\"text-align: justify;\">void TFT_DrawCircle(unsigned int x, unsigned int y, unsigned int radius,\nunsigned int color)\n{\n\u00a0\u00a0 \u00a0int xc = 0;\n\u00a0\u00a0 \u00a0int yc, p;\n\u00a0\u00a0 \u00a0yc = radius;\n\u00a0\u00a0 \u00a0p = 3 - (radius &lt;&lt; 1);\n\u00a0\u00a0 \u00a0while( xc &lt;= yc)\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x + xc, y - yc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x - xc, y - yc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x + yc, y - xc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x - yc, y - xc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x + xc, y + yc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x - xc, y + yc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x + yc, y + xc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_DrawPoint( x - yc, y + xc, color );\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (p &lt; 0)\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0p += ( xc++ &lt;&lt; 2 ) + 6;\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0p += (( xc++ - yc-- ) &lt;&lt; 2 ) + 10;\n\u00a0\u00a0 \u00a0}\n}<\/pre>\n<h3 style=\"text-align: justify;\">TFT display a fukce pro psan\u00ed alfanumerick\u00fdch znak\u016f<\/h3>\n<p style=\"text-align: justify;\">P\u00edsmenka jsou v pam\u011bti procesoru ulo\u017eena jako sady \u010dern\u00fdch a b\u00edl\u00fdch bod\u016f, kter\u00fdmi je nutn\u00e9 zaplnit obd\u00e9ln\u00edk velik\u00fd jako p\u00edsmenko. K vyhrazen\u00ed obd\u00e9ln\u00edku slou\u017e\u00ed funkce TFT_WindowSet. Nyn\u00ed je pot\u0159eba p\u0159ij\u00edt na to, kde vz\u00edt soubor p\u00edsmenek, ide\u00e1ln\u011b z font\u016f, kter\u00e9 jsou sou\u010d\u00e1st\u00ed syst\u00e9mu Windows. Na\u0161el jsem voln\u011b dostupn\u00fd program <a href=\"http:\/\/www.mikroe.com\/glcd-font-creator\/\">MikroElektronika-GLCD<\/a>. Do n\u011bj je mo\u017en\u00e9 importovat ka\u017ed\u00fd font, kter\u00fd je sou\u010d\u00e1st\u00ed Windows, v po\u017eadovan\u00e9 velikosti. P\u0159i importu lze zvolit rozsah importovan\u00fdch znak\u016f (smysl maj\u00ed znaky 32 &#8211; 127), mo\u017enosti posouv\u00e1n\u00ed znak\u016f k okraji bitmapy dle pot\u0159eby. Jednotliv\u00e9 znaky lze d\u00e1l upravovat podle vlastn\u00ed fantazie:<\/p>\n<p style=\"text-align: justify;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-798 size-full\" src=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/MikroElektronika_GLCD.png\" alt=\"TFT display MikroElektronika_GLCD\" width=\"885\" height=\"756\" srcset=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/MikroElektronika_GLCD.png 885w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/MikroElektronika_GLCD-150x128.png 150w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/MikroElektronika_GLCD-321x274.png 321w\" sizes=\"auto, (max-width: 885px) 100vw, 885px\" \/><\/p>\n<p style=\"text-align: justify;\">Kdy\u017e jsme s fontem spokojeni, m\u016f\u017eeme jej vyexportovat do pole dat, kter\u00e9 bude mo\u017eno pou\u017e\u00edt v AVR studiu:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">const unsigned char Tahoma11x13[] PROGMEM\u00a0 = \n{\n\u00a0\u00a0 \u00a00x00,\n\u00a0\u00a0 \u00a00x00,\n\u00a0\u00a0 \u00a00x20,0x00,\n\u00a0\u00a0 \u00a00x7F,0x00,\n\u00a0\u00a0 \u00a00x0D,\n\u00a0\u00a0 \u00a00x00,\n\u00a0\u00a0 \u00a00x01,0x88,0x01,0x00,\n\u00a0\u00a0 \u00a00x02,0x95,0x01,0x00,\n    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Code for char num 32\n\u00a0\u00a0 \u00a00x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x02,0x02,0x00,0x00,0x00,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Code for char num 33\n.......<\/pre>\n<p style=\"text-align: justify;\">Tohle je jenom kousek&#8230; datov\u00e9 pole je celkem velk\u00e9. Prvn\u00ed \u0159\u00e1dek pln\u00fd nul, k\u00f3d 32, je mezera. Na dal\u0161\u00edm \u0159\u00e1dku je zobrazen vyk\u0159i\u010dn\u00edk, tak\u017ee data 0x02 zobrazuj\u00ed \u0161est bod\u016f pod sebou. Potom je mezera a pak dva body pro te\u010dku vyk\u0159i\u010dn\u00edku. T\u00edmto zp\u016fsobem jsou ulo\u017eena v\u0161echna p\u00edsmena fontu. \u010cty\u0159i fonty, kter\u00e9 jsou na \u00favodn\u00ed fotografii zaberou v pam\u011bti procesoru asi 30kb.<\/p>\n<p style=\"text-align: justify;\">Je pot\u0159eba si uv\u011bdomit, \u017ee p\u0159eklada\u010d AVR studia automaticky vytvo\u0159\u00ed program, kter\u00fd na za\u010d\u00e1tku ulo\u017e\u00ed obsah datov\u00e9ho pole do pam\u011bti RAM procesoru. No a to je probl\u00e9m, proto\u017ee pam\u011bti RAM v ATmega nen\u00ed moc, mus\u00edme \u0161et\u0159it. A tvar znak\u016f b\u011bhem chodu programu nen\u00ed pot\u0159eba m\u011bnit, tak\u017ee nen\u00ed \u017e\u00e1dn\u00fd d\u016fvod, aby pole bylo v RAM. K tomu, aby pole dat z\u016fstalo v pam\u011bti programu a odtud bylo pou\u017e\u00edv\u00e1no, slou\u017e\u00ed knihovna pgmspace.h. Tu p\u0159ipoj\u00edme na za\u010d\u00e1tku programu a potom m\u016f\u017eeme vyu\u017e\u00edt jej\u00ed funkce. Do n\u00e1zvu pole dat dopln\u00edme slovo PROGMEM &#8211; data z\u016fstanou v pam\u011bti programu a pam\u011b\u0165 RAM z\u016fstane voln\u00e1.<\/p>\n<p style=\"text-align: justify;\">Nyn\u00ed mus\u00edme pochopit, jak jsou data uspo\u0159\u00e1d\u00e1na, abychom je um\u011bli pou\u017e\u00edt. Na za\u010d\u00e1tku datov\u00e9ho pole je vyzna\u010den k\u00f3d prvn\u00edho a posledn\u00edho znaku. Za\u010d\u00e1tek je 0x20 hexadecim\u00e1ln\u011b, to je 32 decim\u00e1ln\u011b, podle ASCII tabulky mezera. Konec datov\u00e9ho pole je hexadecim\u00e1ln\u011b 0x7F = 127 decim\u00e1ln\u011b, to je kousek za mal\u00fdm Z, je\u0161t\u011b je tam ~ a je\u0161t\u011b n\u011bco. D\u00e1l je v datov\u00e9m poli \u010d\u00edslo 0x0D, to bude v\u00fd\u0161ka p\u00edsmenka &#8211; po\u010det \u0159\u00e1dk\u016f, pixel\u016f displeje, kter\u00e9 jsou zapot\u0159eb\u00ed pro zobrazen\u00ed. Pak tu m\u00e1me v\u017edy \u010dtve\u0159ici \u010d\u00edsel pro ka\u017ed\u00fd znak ulo\u017een\u00fd v datov\u00e9m poli. Prvn\u00ed \u010d\u00edslo ud\u00e1v\u00e1 po\u010det sloupc\u016f, pixel\u016f displeje &#8211; znaky maj\u00ed r\u016fznou \u0161\u00ed\u0159ku. Dal\u0161\u00ed t\u0159i \u010d\u00edsla ozna\u010duj\u00ed m\u00edsto v poli dat, na kter\u00e9m za\u010d\u00edn\u00e1 p\u00edsmenko. P\u00edsmenko je v poli dat zobrazeno po \u0159\u00e1dc\u00edch. Bity jdou zleva do prava, od bitu s nejni\u017e\u0161\u00ed vahou k nejvy\u0161\u0161\u00ed. Tak\u017ee p\u0159i zobrazov\u00e1n\u00ed budeme \u010d\u00edslem rotovat doprava a \u010d\u00edst bit 0. Pro v\u011bt\u0161\u00ed znaky bude \u010d\u00edsel na jeden \u0159\u00e1dek pot\u0159eba v\u00edc, jde jedno za druh\u00fdm. A kdy\u017e bude jeden \u0159\u00e1dek zapln\u011bn, nov\u00fd \u0159\u00e1dek za\u010d\u00edn\u00e1 nov\u00fdm \u010d\u00edslem.<\/p>\n<p style=\"text-align: justify;\">V prvn\u00ed \u010d\u00e1sti funkce pro zobrazen\u00ed znaku z pole dat p\u0159e\u010dteme \u00fadaje o znaku, kter\u00fd m\u00e1 b\u00fdt zobrazen. Znaky jsou se\u0159azeny tak, jak jdou za sebou v tabulce ASCII, tak\u017ee od vstupn\u00ed prom\u011bnn\u00e9 ChAscii sta\u010d\u00ed ode\u010d\u00edst 32 a m\u016f\u017eeme \u010d\u00edst \u00fadaje z pole dat:<\/p>\n<pre class=\"\" style=\"text-align: justify;\">Column = pgm_read_byte(&amp;( Tahoma11x13[( ChAscii * 4 ) + 8\u00a0 ] ));\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pocet zobrazenych sloupcu\nPointerStart =\u00a0 pgm_read_byte(&amp;( Tahoma11x13[( ChAscii * 4 ) + 10 ] )) * 256;\u00a0  \/\/ misto kde zacina pismenko\nPointerStart += pgm_read_byte(&amp;( Tahoma11x13[( ChAscii * 4 ) + 9\u00a0 ] ));\nChAscii++;\nPointerEnd =\u00a0 pgm_read_byte(&amp;( Tahoma11x13[( ChAscii * 4 ) + 10 ] )) * 256;\u00a0\u00a0\u00a0 \u00a0\/\/ misto kde konci pismenko\nPointerEnd += pgm_read_byte(&amp;( Tahoma11x13[( ChAscii * 4 ) + 9\u00a0 ] ));<\/pre>\n<p style=\"text-align: justify;\">pgm_read_byte je z knihovny pgmspace.h. V dal\u0161\u00ed \u010d\u00e1sti funkce je smy\u010dka, kter\u00e1 bude z pole dat postupn\u011b \u010d\u00edst bajty a rotovat jimi. Podle hodnoty nejni\u017e\u0161\u00edho bitu bude na displej odesl\u00e1na barva pozad\u00ed, nebo barva znaku &#8211; kdy\u017e bit = 1.<\/p>\n<pre class=\"\" style=\"text-align: justify;\">TFT_WindowSet( x, x + Column + 2, y, y + Row - 1 ); \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastavi pracovni plochu na displeji\nTFT_SendCommand( 0x002C );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0  \u00a0\u00a0 \/\/ bude posilat data do pracovni plochy\nCounterBits = 8;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 \/\/ pocitadlo vysilanych bitu\nCounterColumn = 0;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\/\/ pocitadlo sloupcu\nwhile( PointerEnd != PointerStart )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\/\/ konec, kdyz jsou vyslany vsechny data znaku\n{\n\u00a0\u00a0 \u00a0if( CounterBits == 8 )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pri osmem bitu vezme dalsi bajt\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CounterBits = 0;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\/\/ vynuluje pocitadlo bitu\n        Bits = pgm_read_byte(&amp;( Tahoma11x13[ PointerStart ] ));\u00a0 \/\/ veme novy bajt ze spravne znakove sady\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PointerStart++;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \/\/ pocitadlo bajtu, ktere se maji vyslat\n\u00a0\u00a0 \u00a0}\n\u00a0\u00a0 \u00a0if( Bits &amp; 0x01 ) TFT_SendData( ColFront );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \/\/ posila barvu bitu\n\u00a0\u00a0 \u00a0else TFT_SendData( ColBack );\n\u00a0\u00a0 \u00a0Bits = Bits &gt;&gt; 1;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ posune se na dalsi bit\n\u00a0\u00a0 \u00a0CounterColumn++;\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ posune se na dalsi sloupec\n\u00a0\u00a0 \u00a0CounterBits++;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0  \/\/ pocitadlo bitu\n\u00a0\u00a0 \u00a0if( CounterColumn == Column )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0  \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ kontrola, jestli je sloupec posledni\n\u00a0\u00a0 \u00a0{\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CounterColumn = 0;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ vynuluje pocitadlo sloupcu\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_SendData( ColBack );\u00a0\u00a0  \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ prida slopec za pismeno\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CounterBits = 8;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ novych 8 bitu\n\u00a0\u00a0 \u00a0\u00a0\u00a0  TFT_SendData( ColBack );\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ dalsi sloupec za pismenkem\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TFT_SendData( ColBack );\n\u00a0\u00a0 \u00a0}\n}\nColumn += 2;\nreturn Column;\u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ vraci pocet spotrebovanych sloupcu<\/pre>\n<h3 style=\"text-align: justify;\">\u00a0Soubory ke sta\u017een\u00ed<\/h3>\n<p style=\"text-align: justify;\">Knihovna pro komunikaci s obvodem SSD1963, v\u010detn\u011b funkce pro inicializaci obvodu<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_SSD1963.h\" rel=\"\">TFT_SSD1963.h<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_SSD1963.c\" rel=\"\">TFT_SSD1963.c<\/a><\/p>\n<p style=\"text-align: justify;\">Knihovna obsahuje grafick\u00e9 funkce<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_GraphicFunctions.h\" rel=\"\">TFT_GraphicFunctions.h<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_GraphicFunctions.c\" rel=\"\">TFT_GraphicFunctions.c<\/a><\/p>\n<p style=\"text-align: justify;\">Knihovna obsahuje alfanumerick\u00e9 funkce pro psan\u00ed textu a \u010d\u00edslic<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_AlphanumericFunctions.c\" rel=\"\">TFT_AlphanumericFunctions.c<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_AlphanumericFunctions.h\" rel=\"\">TFT_AlphanumericFunctions.h<\/a><\/p>\n<p style=\"text-align: justify;\">Fonty, kter\u00e9 mohou b\u00fdt pou\u017eity v knihovn\u011b alfanumerick\u00fdch funkc\u00ed<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Tahoma32x33.h\" rel=\"\">TFT_Tahoma32x33<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Tahoma30x32.h\" rel=\"\">TFT_Tahoma30x32<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Tahoma15x16.h\" rel=\"\">TFT_Tahoma15x16<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Tahoma11x13.h\" rel=\"\">TFT_Tahoma11x13<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Segoe_Print28x47.h\" rel=\"\">TFT_Segoe_Print28x47<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Segmental30x33.h\" rel=\"\">TFT_Segmental30x33<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Nixie_One33x32.h\" rel=\"\">TFT_Nixie_One33x32<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Nixie_One38x37.h\" rel=\"\">TFT_Nixie_One38x37<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Nixie_One45x43.h\" rel=\"\">TFT_Nixie_One45x43<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Nixie_One50x47.h\" rel=\"\">TFT_Nixie_One50x47<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Segmental11x13.h\" rel=\"\">TFT_Segmental11x13<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Segmental15x17.h\" rel=\"\">TFT_Segmental15x17<\/a><\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/TFT_Segmental21x25.h\" rel=\"\">TFT_Segmental21x25<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>funkce pro TFT displeje s \u0159adi\u010dem SSD1963, ovl\u00e1dan\u00fd procesorem ATmega, v\u010detn\u011b font\u016f z Windows<\/p>\n","protected":false},"author":1,"featured_media":802,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[4],"tags":[141,136,126,142,143,140,129],"class_list":["post-792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programovani","tag-alfanumeric-library","tag-atmel","tag-display","tag-font","tag-graphic-library","tag-ssd1963","tag-tft"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il<\/title>\n<meta name=\"description\" content=\"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il\" \/>\n<meta property=\"og:description\" content=\"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/\" \/>\n<meta property=\"og:site_name\" content=\"Franti\u0161ek Posp\u00ed\u0161il\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-20T19:29:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-29T10:48:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"ok2jnj\" \/>\n<meta name=\"twitter:label1\" content=\"Napsal(a)\" \/>\n\t<meta name=\"twitter:data1\" content=\"ok2jnj\" \/>\n\t<meta name=\"twitter:label2\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/\"},\"author\":{\"name\":\"ok2jnj\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#\\\/schema\\\/person\\\/611e6231cd7c1180c0871958f742373a\"},\"headline\":\"TFT display s \u0159adi\u010dem SSD1963 a ATmega162\",\"datePublished\":\"2016-02-20T19:29:53+00:00\",\"dateModified\":\"2021-12-29T10:48:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/\"},\"wordCount\":1778,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#\\\/schema\\\/person\\\/611e6231cd7c1180c0871958f742373a\"},\"image\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/wp-content\\\/uploads\\\/2016\\\/02\\\/SSD1963.jpg\",\"keywords\":[\"alfanumeric library\",\"Atmel\",\"Display\",\"font\",\"Graphic library\",\"SSD1963\",\"tft\"],\"articleSection\":[\"Programov\u00e1n\u00ed\"],\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/\",\"url\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/\",\"name\":\"TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/wp-content\\\/uploads\\\/2016\\\/02\\\/SSD1963.jpg\",\"datePublished\":\"2016-02-20T19:29:53+00:00\",\"dateModified\":\"2021-12-29T10:48:30+00:00\",\"description\":\"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/wp-content\\\/uploads\\\/2016\\\/02\\\/SSD1963.jpg\",\"contentUrl\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/wp-content\\\/uploads\\\/2016\\\/02\\\/SSD1963.jpg\",\"width\":1600,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/cs\\\/2016\\\/02\\\/tft-display-ssd1963-atmega162\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dom\u016f\",\"item\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TFT display s \u0159adi\u010dem SSD1963 a ATmega162\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#website\",\"url\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/\",\"name\":\"Franti\u0161ek Posp\u00ed\u0161il\",\"description\":\"Na sv\u00fdch str\u00e1nk\u00e1ch popisuji cesty, kter\u00fdmi jsem do\u0161el k zam\u00fd\u0161len\u00fdm c\u00edl\u016fm. C\u00edle se ob\u010das b\u011bhem cesty zm\u011bnily.\",\"publisher\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#\\\/schema\\\/person\\\/611e6231cd7c1180c0871958f742373a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#\\\/schema\\\/person\\\/611e6231cd7c1180c0871958f742373a\",\"name\":\"ok2jnj\",\"logo\":{\"@id\":\"https:\\\/\\\/ok2jnj.ok2kld.cz\\\/ok2jnj\\\/#\\\/schema\\\/person\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il","description":"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/","og_locale":"cs_CZ","og_type":"article","og_title":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il","og_description":"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows","og_url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/","og_site_name":"Franti\u0161ek Posp\u00ed\u0161il","article_published_time":"2016-02-20T19:29:53+00:00","article_modified_time":"2021-12-29T10:48:30+00:00","og_image":[{"width":1600,"height":1200,"url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg","type":"image\/jpeg"}],"author":"ok2jnj","twitter_misc":{"Napsal(a)":"ok2jnj","Odhadovan\u00e1 doba \u010dten\u00ed":"15 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#article","isPartOf":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/"},"author":{"name":"ok2jnj","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"headline":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162","datePublished":"2016-02-20T19:29:53+00:00","dateModified":"2021-12-29T10:48:30+00:00","mainEntityOfPage":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/"},"wordCount":1778,"commentCount":1,"publisher":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"image":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#primaryimage"},"thumbnailUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg","keywords":["alfanumeric library","Atmel","Display","font","Graphic library","SSD1963","tft"],"articleSection":["Programov\u00e1n\u00ed"],"inLanguage":"cs","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/","name":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162 - Franti\u0161ek Posp\u00ed\u0161il","isPartOf":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#primaryimage"},"image":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#primaryimage"},"thumbnailUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg","datePublished":"2016-02-20T19:29:53+00:00","dateModified":"2021-12-29T10:48:30+00:00","description":"funkce pro ovl\u00e1d\u00e1n\u00ed TFT display s \u0159adi\u010dem SSD1963 procesorem ATmega162, v\u010detn\u011b popisu pou\u017eit\u00ed font\u016f z Windows","breadcrumb":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/"]}]},{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#primaryimage","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg","contentUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/02\/SSD1963.jpg","width":1600,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/02\/tft-display-ssd1963-atmega162\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Dom\u016f","item":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/"},{"@type":"ListItem","position":2,"name":"TFT display s \u0159adi\u010dem SSD1963 a ATmega162"}]},{"@type":"WebSite","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/","name":"Franti\u0161ek Posp\u00ed\u0161il","description":"Na sv\u00fdch str\u00e1nk\u00e1ch popisuji cesty, kter\u00fdmi jsem do\u0161el k zam\u00fd\u0161len\u00fdm c\u00edl\u016fm. C\u00edle se ob\u010das b\u011bhem cesty zm\u011bnily.","publisher":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"},{"@type":["Person","Organization"],"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a","name":"ok2jnj","logo":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/comments?post=792"}],"version-history":[{"count":16,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/792\/revisions"}],"predecessor-version":[{"id":1360,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/792\/revisions\/1360"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/media\/802"}],"wp:attachment":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/media?parent=792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/categories?post=792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/tags?post=792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}