<?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=4&amp;t=12666&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-17T13:29:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12666&amp;mode</id>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-09-17T13:29:33+01:00</updated>
<published>2015-09-17T13:29:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=140034#p140034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=140034#p140034"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=140034#p140034"><![CDATA[
<div class="quotetitle">zerolinux napisał(a):</div><div class="quotecontent"><br />Osiągnąłem sukces!<br /><br />Wyświetlacz ruszył. Według opisu szyna danych była D0..D7 a powinna być D7..D0. Oprócz tego funkcje EnableControler i DisableControler powinny w przypadku mojego sterownika być zamienione.<br />Wyświetlacz wyświetla. Walczę ze zdefiniowaniem dużych czcionek żeby osiągnąć efekt wyświetlacza 7 segmentowego na części.<br /></div><br /><br /><br />A nie lepiej zrobić dwa rysunki segmentów i wysiedlać ich na pozycjach?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 17 wrz 2015, o 13:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-08-31T09:42:25+01:00</updated>
<published>2015-08-31T09:42:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138697#p138697</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138697#p138697"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138697#p138697"><![CDATA[
<div class="quotetitle">zerolinux napisał(a):</div><div class="quotecontent"><br />Walczę ze zdefiniowaniem dużych czcionek żeby osiągnąć efekt wyświetlacza 7 segmentowego na części.<br /></div><br /><br /><br />To nie walcz kolego a zobacz ten temat <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/viewtopic.php?p=78031#p78031" >viewtopic.php?p=78031#p78031</a><!-- l --><br /><br />Ja już jakiś czas temu zmęczyłem fonta i kod dałem w powyższym temacie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 31 sie 2015, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zerolinux]]></name></author>
<updated>2015-08-31T08:29:50+01:00</updated>
<published>2015-08-31T08:29:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138696#p138696</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138696#p138696"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138696#p138696"><![CDATA[
Osiągnąłem sukces!<br /><br />Wyświetlacz ruszył. Według opisu szyna danych była D0..D7 a powinna być D7..D0. Oprócz tego funkcje EnableControler i DisableControler powinny w przypadku mojego sterownika być zamienione.<br />Wyświetlacz wyświetla. Walczę ze zdefiniowaniem dużych czcionek żeby osiągnąć efekt wyświetlacza 7 segmentowego na części.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5430">zerolinux</a> — 31 sie 2015, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2015-08-26T08:14:55+01:00</updated>
<published>2015-08-26T08:14:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138342#p138342</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138342#p138342"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=138342#p138342"><![CDATA[
Hej<br />Sprawdz, czy przypadkiem soft nie zatrzymuje sie przy sprawdzaniu GLCD_ReadStatus.<br />Sprawdz co zwraca.<br />Ostatnio robilem nie na takim, ale na T6963C, tez mialem problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 26 sie 2015, o 08:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-08-17T12:58:33+01:00</updated>
<published>2015-08-17T12:58:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137595#p137595</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137595#p137595"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137595#p137595"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">majster napisał(a):</div><div class="quotecontent">Nic dziwnego ze nie dziala skoro w petli while masz tylko mruganie dioda co 1 sek.<br /></div><br /><br />Program powinien wyświetlić ramkę, a wewnątrz niej napis powitalny. Stosowny kod znajduje się przed  pętlą nieskończoną. Oczywiście zakładając, ze reszta softu jest prawidłowa.</div><br />Faktycznie. Przepraszam za zamieszanie. Ze smarta dziwnie czyta sie kod i to przeoczylem.<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 17 sie 2015, o 12:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-08-17T09:11:27+01:00</updated>
<published>2015-08-17T09:11:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137584#p137584</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137584#p137584"/>
<title type="html"><![CDATA[Re: Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137584#p137584"><![CDATA[
Nic dziwnego ze nie dziala skoro w petli while masz tylko mruganie dioda co 1 sek.<br /><br />Nie rysujesz nic na lcd<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 17 sie 2015, o 09:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zerolinux]]></name></author>
<updated>2015-08-16T19:14:56+01:00</updated>
<published>2015-08-16T19:14:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137525#p137525</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137525#p137525"/>
<title type="html"><![CDATA[Problem z wyświetlaczem graficznym LCD opartym ok KS0108]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12666&amp;p=137525#p137525"><![CDATA[
Witam.<br /><br />Próbuję uruchomić wyświetlacz wydłubany z drukarki fiskalnej. Wyświetlacz ma oznaczenie GTG-192641 i ma rozdzielczość 192x64. Znalazłem w necie, że jest oparty o kontroler KS0108. Nie udało mi się odszukać  dokumentacji poza pinologią.<br /><br />Pobrałem z internetu biblioteki do obsługi ze strony radzio.dxp.pl ale wyświetlacz nie wyświetla żadnych napisów, działa tylko regulacja kontrastu (potencjometrem podłączonym pomiędzy masę a pin3 wyświetlacza).<br /><br />Uruchamiam go na płytce stykowej, opis podłaczenia:<br /><br />procesor: ATMEGA32, taktowany wewnętrznie 8MHz, JTAG wyłączony.<br />dane PORTA, RS PC2, RW PC1, EN PC0, CS1 - PC7, CS2 - PC6, CS3 - PC5.<br /><br />Dioda jest dodana żeby sprawdzić czy program idzie dalej.<br /><br />Proszę o podpowiedź<br /><br />program główny:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;font5x8.h&quot;<br />#include &quot;graphic.h&quot;<br />#include &quot;KS0108.h&quot;<br /><br /><br /><br />#define KS0108_DATA_PORT PORTA<br />#define KS0108_DATA_PIN PINA<br />#define KS0108_DATA_DDR DDRA<br />#define KS0108_DATA_DIR DDRA<br /><br /><br />#define KS0108_CTRL_PORTPORTC<br />#define KS0108_CTRL_DIRDDRC<br /><br />#define KS0108_RS(1 &lt;&lt; 2)<br />#define KS0108_RW(1 &lt;&lt; 1)<br />#define KS0108_EN(1 &lt;&lt; 0)<br /><br />#define KS0108_CS1(1 &lt;&lt; 7)<br />#define KS0108_CS2(1 &lt;&lt; 6)<br />#define KS0108_CS3(1 &lt;&lt; 5)<br /><br />extern unsigned char screen_x;<br />extern unsigned char screen_y;<br /><br />#define DISPLAY_STATUS_BUSY0x80<br /><br />#define LED1 PB0<br /><br />//-------------------------------------------------------------------------------------------------<br />// Delay function<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_Delay(void)<br />{<br />asm(&quot;nop&quot;);<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Enalbe Controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_EnableController(unsigned char controller)<br />{<br />switch(controller){<br />case 0 : KS0108_CTRL_PORT &amp;= ~KS0108_CS1; break;<br />case 1 : KS0108_CTRL_PORT &amp;= ~KS0108_CS2; break;<br />case 2 : KS0108_CTRL_PORT &amp;= ~KS0108_CS3; break;<br />}<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Disable Controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_DisableController(unsigned char controller)<br />{<br />switch(controller){<br />case 0 : KS0108_CTRL_PORT |= KS0108_CS1; break;<br />case 1 : KS0108_CTRL_PORT |= KS0108_CS2; break;<br />case 2 : KS0108_CTRL_PORT |= KS0108_CS3; break;<br />}<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Read Status from specified controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadStatus(unsigned char controller)<br />{<br />unsigned char status;<br />KS0108_DATA_DIR = 0x00;<br />KS0108_CTRL_PORT |= KS0108_RW;<br />KS0108_CTRL_PORT &amp;= ~KS0108_RS;<br />GLCD_EnableController(controller);<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />status = KS0108_DATA_PIN;<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(controller);<br />return status;<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Write command to specified controller<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_WriteCommand(unsigned char commandToWrite, unsigned char controller)<br />{<br />while(GLCD_ReadStatus(controller)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0xFF;<br />KS0108_CTRL_PORT &amp;= ~(KS0108_RW | KS0108_RS);<br />GLCD_EnableController(controller);<br />KS0108_DATA_PORT = commandToWrite;<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(controller);<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Read data from current position<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadData(void)<br />{<br />unsigned char data;<br />while(GLCD_ReadStatus(screen_x / 64)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0x00;<br />KS0108_CTRL_PORT |= (KS0108_RW | KS0108_RS);<br />GLCD_EnableController(screen_x / 64);<br />//GLCD_Delay();<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />data = KS0108_DATA_PIN;<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(screen_x / 64);<br />screen_x++;<br />return data;<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Write data to current position<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_WriteData(unsigned char dataToWrite)<br />{<br />while(GLCD_ReadStatus(screen_x / 64)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0xFF;<br />KS0108_CTRL_PORT &amp;= ~KS0108_RW;<br />KS0108_CTRL_PORT |= KS0108_RS;<br />KS0108_DATA_PORT = dataToWrite;<br />GLCD_EnableController(screen_x / 64);<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(screen_x / 64);<br />screen_x++;<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_InitalizePorts(void)<br />{<br />KS0108_CTRL_DIR |= (KS0108_CS1 | KS0108_CS2 | KS0108_CS3 | KS0108_RS | KS0108_RW | KS0108_EN);<br />KS0108_CTRL_PORT |= (KS0108_CS1 | KS0108_CS2 | KS0108_CS3);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadByteFromROMMemory(char * ptr)<br />{<br />return pgm_read_byte(ptr);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------<br /><br /><br /><br />int main(void)<br />{<br />   <br />   DDRB  |= (1&lt;&lt;LED1); <br />   PORTB |= (1&lt;&lt;LED1);<br />   _delay_ms(1000);<br />   PORTB ^=(1&lt;&lt;LED1);<br />   <br />   <br />   GLCD_InitalizePorts();<br />   GLCD_ClearScreen();<br /><br />   GLCD_GoTo(0,0);<br />   GLCD_WriteString(&quot;+-------------------+&quot;);<br />   GLCD_GoTo(0,1);<br />   GLCD_WriteString(&quot;|     Universal     |&quot;);<br />   GLCD_GoTo(0,2);<br />   GLCD_WriteString(&quot;|   KS0108 library  |&quot;);<br />   GLCD_GoTo(0,3);<br />   GLCD_WriteString(&quot;|                   |&quot;);<br />   GLCD_GoTo(0,4);<br />   GLCD_WriteString(&quot;|  en.radzio.dxp.pl |&quot;);<br />   GLCD_GoTo(0,5);<br />   GLCD_WriteString(&quot;|  STM32 Cortex-M3  |&quot;);<br />   GLCD_GoTo(0,6);<br />   GLCD_WriteString(&quot;|  microcontrollers |&quot;);<br />   GLCD_GoTo(0,7);<br />   GLCD_WriteString(&quot;+-------------------+&quot;);  <br />   <br />   <br />while(1)<br />    {<br />        //TODO:: Please write your application code<br /><br />_delay_ms(1000);<br />PORTB ^=(1&lt;&lt;LED1);<br />    }<br />}[/syntax]<br /><br />biblioteki:<br />KS0108.h<br />[syntax=c]#define KS0108_SCREEN_WIDTH192<br />#define KS0108_SCREEN_HEIGHT64<br /><br /><br />#define DISPLAY_SET_Y       0x40<br />#define DISPLAY_SET_X       0xB8<br />#define DISPLAY_START_LINE  0xC0<br />#define DISPLAY_ON_CMD0x3E<br />  #define ON0x01<br />  #define OFF0x00<br />#define DISPLAY_STATUS_BUSY0x80<br /><br />void GLCD_Initalize(void);<br />void GLCD_WriteData(unsigned char);<br />void GLCD_WriteCommand(unsigned char, unsigned char);<br />void GLCD_ClearScreen(void);<br />void GLCD_GoTo(unsigned char, unsigned char);<br />void GLCD_WriteString(char *);<br />unsigned char GLCD_ReadByteFromROMMemory(char *);<br />unsigned char GLCD_ReadData(void);<br />void GLCD_Bitmap(char *, unsigned char, unsigned char, unsigned char, unsigned char);[/syntax]<br /><br />KS0108.c<br />[syntax=c]//-------------------------------------------------------------------------------------------------<br />// Universal KS0108 driver library<br />// Atmel AVR MCU low-level driver.<br />// (c) Radosław Kwiecień, radek@dxp.pl<br />//-------------------------------------------------------------------------------------------------<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#define KS0108_DATA_PORTPORTA<br />#define KS0108_DATA_DIRDDRA<br />#define KS0108_DATA_PINPINA<br /><br />#define KS0108_CTRL_PORTPORTC<br />#define KS0108_CTRL_DIRDDRC<br /><br />#define KS0108_RS(1 &lt;&lt; 2)<br />#define KS0108_RW(1 &lt;&lt; 1)<br />#define KS0108_EN(1 &lt;&lt; 0)<br /><br />#define KS0108_CS1(1 &lt;&lt; 7)<br />#define KS0108_CS2(1 &lt;&lt; 6)<br />#define KS0108_CS3(1 &lt;&lt; 5)<br /><br />extern unsigned char screen_x;<br />extern unsigned char screen_y;<br /><br />#define DISPLAY_STATUS_BUSY0x80<br /><br />//-------------------------------------------------------------------------------------------------<br />// Delay function<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_Delay(void)<br />{<br />asm(&quot;nop&quot;);<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Enalbe Controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_EnableController(unsigned char controller)<br />{<br />switch(controller){<br />case 0 : KS0108_CTRL_PORT &amp;= ~KS0108_CS1; break;<br />case 1 : KS0108_CTRL_PORT &amp;= ~KS0108_CS2; break;<br />case 2 : KS0108_CTRL_PORT &amp;= ~KS0108_CS3; break;<br />}<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Disable Controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_DisableController(unsigned char controller)<br />{<br />switch(controller){<br />case 0 : KS0108_CTRL_PORT |= KS0108_CS1; break;<br />case 1 : KS0108_CTRL_PORT |= KS0108_CS2; break;<br />case 2 : KS0108_CTRL_PORT |= KS0108_CS3; break;<br />}<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Read Status from specified controller (0-2)<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadStatus(unsigned char controller)<br />{<br />unsigned char status;<br />KS0108_DATA_DIR = 0x00;<br />KS0108_CTRL_PORT |= KS0108_RW;<br />KS0108_CTRL_PORT &amp;= ~KS0108_RS;<br />GLCD_EnableController(controller);<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />status = KS0108_DATA_PIN;<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(controller);<br />return status;<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Write command to specified controller<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_WriteCommand(unsigned char commandToWrite, unsigned char controller)<br />{<br />while(GLCD_ReadStatus(controller)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0xFF;<br />KS0108_CTRL_PORT &amp;= ~(KS0108_RW | KS0108_RS);<br />GLCD_EnableController(controller);<br />KS0108_DATA_PORT = commandToWrite;<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(controller);<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Read data from current position<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadData(void)<br />{<br />unsigned char data;<br />while(GLCD_ReadStatus(screen_x / 64)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0x00;<br />KS0108_CTRL_PORT |= (KS0108_RW | KS0108_RS);<br />GLCD_EnableController(screen_x / 64);<br />//GLCD_Delay();<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />data = KS0108_DATA_PIN;<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(screen_x / 64);<br />screen_x++;<br />return data;<br />}<br />//-------------------------------------------------------------------------------------------------<br />// Write data to current position<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_WriteData(unsigned char dataToWrite)<br />{<br />while(GLCD_ReadStatus(screen_x / 64)&amp;DISPLAY_STATUS_BUSY);<br />KS0108_DATA_DIR = 0xFF;<br />KS0108_CTRL_PORT &amp;= ~KS0108_RW;<br />KS0108_CTRL_PORT |= KS0108_RS;<br />KS0108_DATA_PORT = dataToWrite;<br />GLCD_EnableController(screen_x / 64);<br />KS0108_CTRL_PORT |= KS0108_EN;<br />GLCD_Delay();<br />KS0108_CTRL_PORT &amp;= ~KS0108_EN;<br />GLCD_DisableController(screen_x / 64);<br />screen_x++;<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------<br />void GLCD_InitalizePorts(void)<br />{<br />KS0108_CTRL_DIR |= (KS0108_CS1 | KS0108_CS2 | KS0108_CS3 | KS0108_RS | KS0108_RW | KS0108_EN);<br />KS0108_CTRL_PORT |= (KS0108_CS1 | KS0108_CS2 | KS0108_CS3);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------<br />unsigned char GLCD_ReadByteFromROMMemory(char * ptr)<br />{<br />return pgm_read_byte(ptr);<br />}<br />//-------------------------------------------------------------------------------------------------<br />//<br />//-------------------------------------------------------------------------------------------------[/syntax]<br /><br /><br /><br />graphic.h<br />[syntax=c]void GLCD_Rectangle(unsigned char x, unsigned char y, unsigned char b, unsigned char a);<br />void GLCD_Circle(unsigned char cx, unsigned char cy ,unsigned char radius);<br />void GLCD_Line(unsigned int X1,unsigned int Y1,unsigned int X2,unsigned int Y2);[/syntax]<br /><br />graphic.c<br />[syntax=c]extern void GLCD_SetPixel(unsigned char x, unsigned char y, unsigned char color);<br /><br />const unsigned char color = 1;<br /><br />void GLCD_Rectangle(unsigned char x, unsigned char y, unsigned char b, unsigned char a)<br />{<br />  unsigned char j; // zmienna pomocnicza<br />  // rysowanie linii pionowych (boki)<br />  for (j = 0; j &lt; a; j++) {<br />GLCD_SetPixel(x, y + j, color);<br />GLCD_SetPixel(x + b - 1, y + j, color);<br />}<br />  // rysowanie linii poziomych (podstawy)<br />  for (j = 0; j &lt; b; j++){<br />GLCD_SetPixel(x + j, y, color);<br />GLCD_SetPixel(x + j, y + a - 1, color);<br />}<br />}<br />//<br /><br />void GLCD_Circle(unsigned char cx, unsigned char cy ,unsigned char radius)<br />{<br />int x, y, xchange, ychange, radiusError;<br />x = radius;<br />y = 0;<br />xchange = 1 - 2 * radius;<br />ychange = 1;<br />radiusError = 0;<br />while(x &gt;= y)<br />  {<br />  GLCD_SetPixel(cx+x, cy+y, color); <br />  GLCD_SetPixel(cx-x, cy+y, color); <br />  GLCD_SetPixel(cx-x, cy-y, color);<br />  GLCD_SetPixel(cx+x, cy-y, color); <br />  GLCD_SetPixel(cx+y, cy+x, color); <br />  GLCD_SetPixel(cx-y, cy+x, color); <br />  GLCD_SetPixel(cx-y, cy-x, color); <br />  GLCD_SetPixel(cx+y, cy-x, color); <br />  y++;<br />  radiusError += ychange;<br />  ychange += 2;<br />  if ( 2*radiusError + xchange &gt; 0 )<br />    {<br />    x--;<br />radiusError += xchange;<br />xchange += 2;<br />}<br />  }<br />}<br />//<br /><br />void GLCD_Line(unsigned int X1,unsigned int Y1,unsigned int X2,unsigned int Y2)<br />{<br />int CurrentX, CurrentY, Xinc, Yinc, <br />    Dx, Dy, TwoDx, TwoDy, <br />TwoDxAccumulatedError, TwoDyAccumulatedError;<br /><br />Dx = (X2-X1); // obliczenie składowej poziomej<br />Dy = (Y2-Y1); // obliczenie składowej pionowej<br /><br />TwoDx = Dx + Dx; // podwojona składowa pozioma<br />TwoDy = Dy + Dy; // podwojona składowa pionowa<br /><br />CurrentX = X1; // zaczynamy od X1<br />CurrentY = Y1; // oraz Y1<br /><br />Xinc = 1; // ustalamy krok zwiększania pozycji w poziomie <br />Yinc = 1; // ustalamy krok zwiększania pozycji w pionie<br /><br />if(Dx &lt; 0) // jesli składowa pozioma jest ujemna <br />  {<br />  Xinc = -1; // to będziemy się &quot;cofać&quot; (krok ujemny)<br />  Dx = -Dx;  // zmieniamy znak składowej na dodatni<br />  TwoDx = -TwoDx; // jak również podwojonej składowej<br />  }<br /><br />if (Dy &lt; 0) // jeśli składowa pionowa jest ujemna<br />  {<br />  Yinc = -1; // to będziemy się &quot;cofać&quot; (krok ujemny)<br />  Dy = -Dy; // zmieniamy znak składowej na dodatki<br />  TwoDy = -TwoDy; // jak równiez podwojonej składowej<br />  }<br /><br />GLCD_SetPixel(X1,Y1, color); // stawiamy pierwszy krok (zapalamy pierwszy piksel)<br /><br />if ((Dx != 0) || (Dy != 0)) // sprawdzamy czy linia składa się z więcej niż jednego punktu ;)<br />  {<br />  // sprawdzamy czy składowa pionowa jest mniejsza lub równa składowej poziomej<br />  if (Dy &lt;= Dx) // jeśli tak, to idziemy &quot;po iksach&quot;<br />    { <br />    TwoDxAccumulatedError = 0; // zerujemy zmienną <br />    do // ruszamy w drogę<br />  {<br />      CurrentX += Xinc; // do aktualnej pozycji dodajemy krok <br />      TwoDxAccumulatedError += TwoDy; // a tu dodajemy podwojoną składową pionową<br />      if(TwoDxAccumulatedError &gt; Dx)  // jeśli TwoDxAccumulatedError jest większy od Dx<br />        {<br />        CurrentY += Yinc; // zwiększamy aktualną pozycję w pionie<br />        TwoDxAccumulatedError -= TwoDx; // i odejmujemy TwoDx<br />        }<br />       GLCD_SetPixel(CurrentX,CurrentY, color);// stawiamy następny krok (zapalamy piksel)<br />       }while (CurrentX != X2); // idziemy tak długo, aż osiągniemy punkt docelowy<br />     }<br />   else // w przeciwnym razie idziemy &quot;po igrekach&quot; <br />      {<br />      TwoDyAccumulatedError = 0; <br />      do <br />    {<br />        CurrentY += Yinc; <br />        TwoDyAccumulatedError += TwoDx;<br />        if(TwoDyAccumulatedError&gt;Dy) <br />          {<br />          CurrentX += Xinc;<br />          TwoDyAccumulatedError -= TwoDy;<br />          }<br />         GLCD_SetPixel(CurrentX,CurrentY, color); <br />         }while (CurrentY != Y2);<br />    }<br />  }<br />}<br />//[/syntax]<br /><br />font5x8.h<br />[syntax=c]#ifdef __AVR__<br />  #include &lt;avr/pgmspace.h&gt;<br />  static const char PROGMEM  font5x8&#91;&#93; = {<br />#else <br />  static const char  font5x8&#91;&#93; = {<br />#endif<br />0x00, 0x00, 0x00, 0x00, 0x00,// (spacja)<br />0x00, 0x00, 0x5F, 0x00, 0x00,// !<br />0x00, 0x07, 0x00, 0x07, 0x00,// &quot;<br />0x14, 0x7F, 0x14, 0x7F, 0x14,// #<br />0x24, 0x2A, 0x7F, 0x2A, 0x12,// $<br />0x23, 0x13, 0x08, 0x64, 0x62,// %<br />0x36, 0x49, 0x55, 0x22, 0x50,// &amp;<br />0x00, 0x05, 0x03, 0x00, 0x00,// '<br />0x00, 0x1C, 0x22, 0x41, 0x00,// (<br />0x00, 0x41, 0x22, 0x1C, 0x00,// )<br />0x08, 0x2A, 0x1C, 0x2A, 0x08,// *<br />0x08, 0x08, 0x3E, 0x08, 0x08,// +<br />0x00, 0x50, 0x30, 0x00, 0x00,// ,<br />0x08, 0x08, 0x08, 0x08, 0x08,// -<br />0x00, 0x30, 0x30, 0x00, 0x00,// .<br />0x20, 0x10, 0x08, 0x04, 0x02,// /<br />0x3E, 0x51, 0x49, 0x45, 0x3E,// 0<br />0x00, 0x42, 0x7F, 0x40, 0x00,// 1<br />0x42, 0x61, 0x51, 0x49, 0x46,// 2<br />0x21, 0x41, 0x45, 0x4B, 0x31,// 3<br />0x18, 0x14, 0x12, 0x7F, 0x10,// 4<br />0x27, 0x45, 0x45, 0x45, 0x39,// 5<br />0x3C, 0x4A, 0x49, 0x49, 0x30,// 6<br />0x01, 0x71, 0x09, 0x05, 0x03,// 7<br />0x36, 0x49, 0x49, 0x49, 0x36,// 8<br />0x06, 0x49, 0x49, 0x29, 0x1E,// 9<br />0x00, 0x36, 0x36, 0x00, 0x00,// :<br />0x00, 0x56, 0x36, 0x00, 0x00,// ;<br />0x00, 0x08, 0x14, 0x22, 0x41,// &lt;<br />0x14, 0x14, 0x14, 0x14, 0x14,// =<br />0x41, 0x22, 0x14, 0x08, 0x00,// &gt;<br />0x02, 0x01, 0x51, 0x09, 0x06,// ?<br />0x32, 0x49, 0x79, 0x41, 0x3E,// @<br />0x7E, 0x11, 0x11, 0x11, 0x7E,// A<br />0x7F, 0x49, 0x49, 0x49, 0x36,// B<br />0x3E, 0x41, 0x41, 0x41, 0x22,// C<br />0x7F, 0x41, 0x41, 0x22, 0x1C,// D<br />0x7F, 0x49, 0x49, 0x49, 0x41,// E<br />0x7F, 0x09, 0x09, 0x01, 0x01,// F<br />0x3E, 0x41, 0x41, 0x51, 0x32,// G<br />0x7F, 0x08, 0x08, 0x08, 0x7F,// H<br />0x00, 0x41, 0x7F, 0x41, 0x00,// I<br />0x20, 0x40, 0x41, 0x3F, 0x01,// J<br />0x7F, 0x08, 0x14, 0x22, 0x41,// K<br />0x7F, 0x40, 0x40, 0x40, 0x40,// L<br />0x7F, 0x02, 0x04, 0x02, 0x7F,// M<br />0x7F, 0x04, 0x08, 0x10, 0x7F,// N<br />0x3E, 0x41, 0x41, 0x41, 0x3E,// O<br />0x7F, 0x09, 0x09, 0x09, 0x06,// P<br />0x3E, 0x41, 0x51, 0x21, 0x5E,// Q<br />0x7F, 0x09, 0x19, 0x29, 0x46,// R<br />0x46, 0x49, 0x49, 0x49, 0x31,// S<br />0x01, 0x01, 0x7F, 0x01, 0x01,// T<br />0x3F, 0x40, 0x40, 0x40, 0x3F,// U<br />0x1F, 0x20, 0x40, 0x20, 0x1F,// V<br />0x7F, 0x20, 0x18, 0x20, 0x7F,// W<br />0x63, 0x14, 0x08, 0x14, 0x63,// X<br />0x03, 0x04, 0x78, 0x04, 0x03,// Y<br />0x61, 0x51, 0x49, 0x45, 0x43,// Z<br />0x00, 0x00, 0x7F, 0x41, 0x41,// &#91;<br />0x02, 0x04, 0x08, 0x10, 0x20,// &quot;\&quot;<br />0x41, 0x41, 0x7F, 0x00, 0x00,// &#93;<br />0x04, 0x02, 0x01, 0x02, 0x04,// ^<br />0x40, 0x40, 0x40, 0x40, 0x40,// _<br />0x00, 0x01, 0x02, 0x04, 0x00,// `<br />0x20, 0x54, 0x54, 0x54, 0x78,// a<br />0x7F, 0x48, 0x44, 0x44, 0x38,// b<br />0x38, 0x44, 0x44, 0x44, 0x20,// c<br />0x38, 0x44, 0x44, 0x48, 0x7F,// d<br />0x38, 0x54, 0x54, 0x54, 0x18,// e<br />0x08, 0x7E, 0x09, 0x01, 0x02,// f<br />0x08, 0x14, 0x54, 0x54, 0x3C,// g<br />0x7F, 0x08, 0x04, 0x04, 0x78,// h<br />0x00, 0x44, 0x7D, 0x40, 0x00,// i<br />0x20, 0x40, 0x44, 0x3D, 0x00,// j<br />0x00, 0x7F, 0x10, 0x28, 0x44,// k<br />0x00, 0x41, 0x7F, 0x40, 0x00,// l<br />0x7C, 0x04, 0x18, 0x04, 0x78,// m<br />0x7C, 0x08, 0x04, 0x04, 0x78,// n<br />0x38, 0x44, 0x44, 0x44, 0x38,// o<br />0x7C, 0x14, 0x14, 0x14, 0x08,// p<br />0x08, 0x14, 0x14, 0x18, 0x7C,// q<br />0x7C, 0x08, 0x04, 0x04, 0x08,// r<br />0x48, 0x54, 0x54, 0x54, 0x20,// s<br />0x04, 0x3F, 0x44, 0x40, 0x20,// t<br />0x3C, 0x40, 0x40, 0x20, 0x7C,// u<br />0x1C, 0x20, 0x40, 0x20, 0x1C,// v<br />0x3C, 0x40, 0x30, 0x40, 0x3C,// w<br />0x44, 0x28, 0x10, 0x28, 0x44,// x<br />0x0C, 0x50, 0x50, 0x50, 0x3C,// y<br />0x44, 0x64, 0x54, 0x4C, 0x44,// z<br />0x00, 0x08, 0x36, 0x41, 0x00,// {<br />0x00, 0x00, 0x7F, 0x00, 0x00,// |<br />0x00, 0x41, 0x36, 0x08, 0x00,// }<br />0x08, 0x08, 0x2A, 0x1C, 0x08,// -&gt;<br />0x08, 0x1C, 0x2A, 0x08, 0x08 // &lt;-<br />};<br />//[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5430">zerolinux</a> — 16 sie 2015, o 19:14</p><hr />
]]></content>
</entry>
</feed>