<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=58&amp;t=20775&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-06-09T22:53:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=20775&amp;mode</id>
<entry>
<author><name><![CDATA[dominiv2604]]></name></author>
<updated>2018-06-09T22:53:26+01:00</updated>
<published>2018-06-09T22:53:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208777#p208777</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208777#p208777"/>
<title type="html"><![CDATA[Re: Wyświetlanie tekstu w danym wierszu na LCD graficznym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208777#p208777"><![CDATA[
Po kilku dniach walki z wyświetlaczem udało mi się stworzyć bibliotekę wykorzystującą bufor, która spełnia oczekiwania tematu. Jeżeli ktoś będzie kiedyś potrzebował to zapraszam na PW, na pewno się nią podzielę - jednak zachęcam do samodzielnego rozwiązania problemu. Dużo można się nauczyć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12391">dominiv2604</a> — 9 cze 2018, o 22:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dominiv2604]]></name></author>
<updated>2018-05-23T09:10:39+01:00</updated>
<published>2018-05-23T09:10:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208143#p208143</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208143#p208143"/>
<title type="html"><![CDATA[Wyświetlanie tekstu w danym wierszu na LCD graficznym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20775&amp;p=208143#p208143"><![CDATA[
Witam, posiadam LCD graficzny LCD-AG-C128032R-FHW K/W E6, 128x32. Mam problem z ustawieniem wyświetlenia w konkretnym wierszu tego wyświetlacza (załóżmy że ma byś wyświetlony w wierszu 21 - czcionka u mnie posiada 8x8px).<br /><br />Tutaj biblioteka z której korzystam.<br /><br />[syntax=c]/*<br /> * LCD_UC1601.c<br /> *<br /> * Created: 2016-10-15 12:20:10<br /> *  Author: Krystian<br /> */ <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;../Inc/LCD.h&quot;<br />#include &quot;../Inc/define.h&quot;<br />#include &quot;../Inc/mk_fonts.h&quot;<br /><br /><br />extern const uint8_t Verdana8x8Bitmaps&#91;&#93;;<br />extern const FONT_CHAR_INFO Verdana8x8Descriptors&#91;&#93;;<br /><br />void Wyswietl_znak(char znak);<br /><br />/*<br />* Inicjalizacja LCD<br />*/ <br />void Init_LCD_(void)<br />{<br />PORTC.DIRSET= (PIN5_bm|PIN6_bm|PIN7_bm);// SDA WYJSCIE| CS0 WYJSCIE |SCK WYJSCIE |<br /><br />SDA_SET;<br />CS0_SET;// CHYBA MOŻE BYĆ ZAWSZE 0<br />SCK_SET;<br /><br />lcd_write_command(226);<br />lcd_write_command(175);<br />lcd_write_command(233);<br />lcd_write_command(241);<br />lcd_write_command(31);<br />lcd_write_command(113);<br />lcd_write_command(133);<br />lcd_write_command(129);<br />lcd_write_command(235);<br />lcd_write_command(196);<br />lcd_write_command(64);<br />lcd_write_command(166);<br />/*lcd_write_command(0b10100111);*/ //INVERT COLOR<br />LCD_Czyszczenie();<br />}<br /><br />/*<br />* Wysyłanie Komend<br />*/<br />void lcd_write_command(uint8_t command)<br />{<br />CS0_SET;<br />CS0_CLR; // 0&lt;-CS0<br />SCK_CLR; // 0&lt;-SCK<br />SDA_CLR; //Wysłanie Pierwszego (CD &lt;-1) bitu z 9 <br />SCK_SET;<br />/*<br />for(int8_t i = 7; i &lt;=  0 ; i--)<br />{<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;i))<br />{<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br />}<br />*/<br /><br />// D7<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;7)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D6<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;6)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D5<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;5)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D4<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;4)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D3<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;3)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D2<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;2)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D1<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;1)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D0<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;0)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />}<br /><br />/*<br />* Wysyłąnie Danych 8 bit<br />*/<br />void LCD_Write_Data(uint8_t data)<br />{<br />SCK_SET;<br />CS0_SET;<br />CS0_CLR; // 0&lt;-CS0<br />SCK_CLR; // 0&lt;-SCK<br />SDA_SET; //Wysłanie Pierwszego (CD &lt;-1) bitu z 9 <br />SCK_SET;<br />/*<br />for(int8_t i = 7; i &lt;=  0 ; i--)<br />{<br />SCK_CLR;<br />if (command &amp; (1&lt;&lt;i))<br />{<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br />}<br />*/<br /><br />// D7<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;7)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D6<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;6)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D5<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;5)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D4<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;4)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D3<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;3)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D2<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;2)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D1<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;1)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />// D0<br />SCK_CLR;<br />if (data &amp; (1&lt;&lt;0)){<br />SDA_SET;<br />}<br />else<br />{<br />SDA_CLR;<br />}<br />SCK_SET;<br /><br />}<br /><br />/*<br />* Ustawianie Pozycji LCD<br />*/<br />void  LCD_Pozycja (int Pozycja_Wiersz ,int Pozycja_Kolumna)<br />{<br /><br />lcd_write_command(Set_Page_Adress|Pozycja_Wiersz);//ustawienie licznika wierszy<br />lcd_write_command(Set_Column_Adress_LSB | (Pozycja_Kolumna &amp; 0x0F));//ustawienie licznika młodszych bitów kolumn<br />lcd_write_command(Set_Column_Adress_MSB | (Pozycja_Kolumna &gt;&gt; 4));// //ustawienie licznika starszych  kolumn<br />}<br /><br />/*<br />*Czyszczenie LCD<br />*/<br />void LCD_Czyszczenie(void)<br />{<br />LCD_Pozycja(0,0);<br />for (int i=0;i&lt;532;i++)<br />{<br />LCD_Write_Data(0);<br />}<br /><br /><br />}<br /><br />void LCD_teste(void)<br />{<br />LCD_Pozycja(0,0);<br />for (int i=0;i&lt;532;i++)<br />{<br />LCD_Write_Data(0xff);<br />}<br />}<br /><br />void LCD_Write_Data_128x32(int16_t Pozcyja_Kolumna,int16_t Pozycja_Wiersz,uint8_t data)<br />{<br /><br /><br />LCD_Pozycja(Pozcyja_Kolumna,Pozycja_Wiersz/8);<br />//lcd_write_command()<br />SDA_IN;  // SDA USTAWIAM JAK WEJSCIA<br />SCK_SET;<br />CS0_CLR;<br />uint8_t data_in=0;<br />for (int8_t i = 7; i &lt;= 0; i--)<br />{<br />SCK_CLR;<br />data_in |= (1 &lt;&lt;i);<br />SCK_SET;<br />}<br /><br />SCK_CLR;//D7<br />SCK_SET;<br />//data_in |= (SDA_DATA_IN); //&lt;&lt;i);<br />data_in = (PORTC.IN &amp; SDA_PIN);<br /><br />SCK_CLR;//D6<br />SCK_SET;<br /><br />SCK_CLR;//D5<br />SCK_SET;<br /><br />SCK_CLR;//D4<br />SCK_SET;<br /><br />SCK_CLR;//D3<br />SCK_SET;<br /><br />SCK_CLR;//D2<br />SCK_SET;<br /><br />SCK_CLR;//D1<br />SCK_SET;<br /><br />SCK_CLR;//D0<br />SCK_SET;<br /><br /><br />SDA_OUT; // USTAWIAM SDA JAKO WYJSCIE<br />//uint8_t data_obliczenia = (( ~(( ( data_in | data )  ^ data )  &amp;  ( 1 &lt;&lt; (Pozycja_Wiersz%8 ) )) ) &amp; data_in);<br /><br />    LCD_Write_Data(data_in);<br /><br />}<br /><br /><br />void Wyswietlanie_napisu( uint8_t Pozycja_Wiersz, uint8_t Pozycja_Kolumna, const char *napis)<br />{<br /><br />LCD_Pozycja(Pozycja_Wiersz,Pozycja_Kolumna);<br />uint8_t Licznik_znakow=0;<br /><br />while (*napis != '\0')<br />{<br />Wyswietl_znak(*napis);<br />napis++;<br />Licznik_znakow++;<br />}<br />}<br /><br /><br />void Wyswietl_znak(char znak)<br />{<br />if(znak == ' '){LCD_Write_Data(0);LCD_Write_Data(0);LCD_Write_Data(0);LCD_Write_Data(0);LCD_Write_Data(0);LCD_Write_Data(0);LCD_Write_Data(0); return;}; // Wyswietlenie znaku spacji<br />uint8_t Dlugosc_znaku = pgm_read_byte(&amp;Verdana8x8Descriptors&#91;znak-'0'&#93;.widthBits);<br />uint16_t Offset_znaku = pgm_read_dword(&amp;Verdana8x8Descriptors&#91;znak-'0'&#93;.offset);<br /><br />if ((Dlugosc_znaku) == 0 &amp;&amp; (Offset_znaku == 0))<br />{<br />znak = '?';<br /> Dlugosc_znaku = pgm_read_byte(&amp;Verdana8x8Descriptors&#91;znak-'0'&#93;.widthBits);<br /> Offset_znaku = pgm_read_dword(&amp;Verdana8x8Descriptors&#91;znak-'0'&#93;.offset);<br /><br />}<br /><br />for (uint8_t i = 0; i &lt; Dlugosc_znaku ; i++ )<br />{<br />LCD_Write_Data(pgm_read_byte(&amp;Verdana8x8Bitmaps&#91;Offset_znaku+i&#93;));<br />//LCD_Write_Data(Verdana8x8Bitmaps&#91;i&#93;);<br /><br />}<br />LCD_Write_Data(0);LCD_Write_Data(0); // Jeden piksel odstępu pimiędzy literami<br />}<br /><br /><br />void Wyswietl_Liczbe(int16_t Pozycja_Wiersz, int16_t Pozycja_Kolumna, int16_t Liczba)<br />{<br />char bufor&#91;17&#93;;<br /><br />itoa(Liczba, bufor, 10);<br />Wyswietlanie_napisu(Pozycja_Wiersz,Pozycja_Kolumna,bufor  );<br />}<br /><br /><br />void Wyswietl_Bitmape(const uint8_t* Bitmapa ,int16_t Poczatkowy_Wiersz , int16_t Poczatkowa_Kolumna, int16_t Dlugosc_Wierszy, int16_t Szerokosc_Kolumn)<br />{<br /><br />int16_t Iteracje_bimapy=-1;<br />for(uint8_t  Pozycja_Wiersz= Poczatkowy_Wiersz; Pozycja_Wiersz&lt;Poczatkowy_Wiersz+Dlugosc_Wierszy+1;Pozycja_Wiersz++)<br />{<br />LCD_Pozycja(Pozycja_Wiersz,Poczatkowa_Kolumna);<br />for (int16_t Pozycja_Kolumna = Poczatkowa_Kolumna;Pozycja_Kolumna &lt;Poczatkowa_Kolumna+Szerokosc_Kolumn +1;Pozycja_Kolumna++)<br />{<br />Iteracje_bimapy++;<br />if(Pozycja_Kolumna == 0 ){LCD_Pozycja(Pozycja_Wiersz,0);};<br />if(Pozycja_Kolumna &lt;0 || Pozycja_Kolumna &gt; 128 ){continue;};<br /><br />//Bufor_Wyswietlacza&#91;Pozycja_Wiersz&#93;&#91;Pozycja_Kolumna&#93;= Bitmapa&#91;Iteracje_bimapy&#93;;<br />LCD_Write_Data(pgm_read_byte(&amp;Bitmapa&#91;Iteracje_bimapy&#93;));<br />//Iteracje_bimapy=Iteracje_bimapy+1;<br /><br />}<br />}<br /><br /><br />}[/syntax]<br /><br /><br />Teraz mam zakres wybierania wierszy od 0 do 3 (4 * 8 px = 32px), a chciałbym móc zaczynać od wiersza z zakresu 0...31. Jest ktoś w stanie mnie naprowadzić na rozwiązanie?<br /><br />Pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12391">dominiv2604</a> — 23 maja 2018, o 09:10</p><hr />
]]></content>
</entry>
</feed>