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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-27T17:38:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=7931&amp;mode</id>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-07-27T17:38:08+01:00</updated>
<published>2014-07-27T17:38:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89146#p89146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89146#p89146"/>
<title type="html"><![CDATA[Re: Biblioteka dla LCD 1602 na rejestrze przesuwnym HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89146#p89146"><![CDATA[
Po prawej mam pasek przewijania <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Dziękuje<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 27 lip 2014, o 17:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2014-07-27T17:30:56+01:00</updated>
<published>2014-07-27T17:30:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89144#p89144</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89144#p89144"/>
<title type="html"><![CDATA[Re: Biblioteka dla LCD 1602 na rejestrze przesuwnym HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89144#p89144"><![CDATA[
Ponieważ wypadałoby coś skrytykować, to toto po prawej to niezła laurka.  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 27 lip 2014, o 17:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-07-27T17:07:05+01:00</updated>
<published>2014-07-27T17:07:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89142#p89142</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89142#p89142"/>
<title type="html"><![CDATA[Biblioteka dla LCD 1602 na rejestrze przesuwnym HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7931&amp;p=89142#p89142"><![CDATA[
Witam,<br />każdy z nas przynajmniej raz w czasie swojego programistycznego życia narzekał na brak wolnych pinów w procesorze. I mnie się to zdarzyło więc popełniłem bibliotekę dla LCD 1602 operującą na 3 pinach i rejestrze przesuwnym HC595. Przy tworzeniu posiłkowałem się jakimś programem napisanym pod procesor PIC<br /><br />Oto i ona<br /><br />Można używać do woli, zmieniać co popadnie. Proszę tylko o nieusuwanie nagłówka<br /><br />[syntax=c]/*******************************<br />*  BIBLIOTEKA AVR - LCD 1602   *<br />*  DLA PROCESORÓW ATMEGAxx     *<br />*          WoodPaker           *<br />********************************/<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />//podstawowe ustawienia portów<br /><br />#define Data_PIN PB0<br />#define Clock_PIN PB1<br />#define Enable_PIN PB2<br />#define DDRB_595 DDRB<br />#define PORT_595 PORTB<br /><br />volatile uint8_t Low_Nibble, High_Nibble, p, q,  Mask, N,t, RS, Flag, temp; //zmienne pomocnicze<br /><br /><br />void Delay_50ms()<br />{<br />_delay_ms(50);<br />}<br /><br /><br />void Write_LCD_Nibble(unsigned short N)<br />{<br />PORT_595 = 0 &lt;&lt; Enable_PIN;<br />// ****** Zapis RS *********<br />PORT_595 = 0 &lt;&lt; Clock_PIN;<br />PORT_595 = RS &lt;&lt; Data_PIN;<br />PORT_595 = 1 &lt;&lt; Clock_PIN;<br />PORT_595 = 0 &lt;&lt; Clock_PIN;<br />// ****** Koniec zapisu RS<br /><br />// Czas przesunąć 4 bity<br />Mask = 8;<br />for (t=0; t&lt;4; t++)<br />       {<br />Flag = N &amp; Mask;<br />if(Flag==0) PORT_595 = 0 &lt;&lt; Data_PIN;<br />else PORT_595 = 1 &lt;&lt; Data_PIN;<br />PORT_595 = 1 &lt;&lt; Clock_PIN;<br />PORT_595 = 0 &lt;&lt; Clock_PIN;<br />Mask = Mask &gt;&gt; 1;<br />}<br />// Dodatkowe tyknięcie zegarkiem bo mamy spięte SC oraz ST<br />PORT_595 = 1 &lt;&lt; Clock_PIN;<br />PORT_595 = 0 &lt;&lt; Clock_PIN;<br />PORT_595 = 0 &lt;&lt; Data_PIN;<br />PORT_595 = 1 &lt;&lt; Enable_PIN;<br />PORT_595 = 0 &lt;&lt; Enable_PIN;<br />}<br /><br /><br />void Write_LCD_Data(unsigned short D)<br />{<br />RS = 1; // Dane<br />Low_Nibble = D &amp; 15;<br />High_Nibble = D/16;<br />Write_LCD_Nibble(High_Nibble);<br />Write_LCD_Nibble(Low_Nibble);<br />}<br /><br />void Write_LCD_Cmd(unsigned short C)<br />{<br />RS = 0; // Komenda<br />Low_Nibble = C &amp; 15;<br />High_Nibble = C/16;<br />Write_LCD_Nibble(High_Nibble);<br />Write_LCD_Nibble(Low_Nibble);<br />}<br /><br />void Initialize_LCD()<br />{<br />Delay_50ms();<br />Write_LCD_Cmd(0x20); // Sekwencja Wake-Up<br />Delay_50ms();<br />Write_LCD_Cmd(0x20);<br />Delay_50ms();<br />Write_LCD_Cmd(0x20);<br />Delay_50ms();<br />Write_LCD_Cmd(0x28); // 4-bity, 2 linie, fonty 5 na 7<br />Delay_50ms();<br />Write_LCD_Cmd(0x0C); // Display ON, bez kursora<br />Delay_50ms();<br />Write_LCD_Cmd(0x06); // Wszystkie polecenia tu można porównać z DataSheetem<br />Delay_50ms();<br />Write_LCD_Cmd(0x01);<br />Delay_50ms();<br />}<br /><br />void LCD_Position(unsigned short x, unsigned short y)<br />{<br />temp = 127 + y;<br />if (x == 2) temp = temp + 64;<br />Write_LCD_Cmd(temp);<br />}<br /><br />void Write_LCD_Text(char *StrData)<br />{<br />p=0;<br />while(*StrData)<br />{<br /><br />Write_LCD_Data(StrData);<br />StrData++;<br />}<br />}<br /><br /><br /><br /><br />Set_Ports()<br />{<br />DDRB_595=(1&lt;&lt;Data_PIN|1&lt;&lt;Clock_PIN|1&lt;&lt;Enable_PIN);<br /><br />}<br />// Jak używać<br /><br />void main(void)<br />{<br /><br /><br />Set_Ports();<br /><br />Initialize_LCD();<br /><br />while (1)<br />{<br />Position_LCD(1,4);<br />Write_LCD_Text(&quot;LCD 1602&quot;);<br />Position_LCD(2,2);<br />Write_LCD_Text(&quot;Na HC595&quot;);<br />Delay_ms(1500);<br />Write_LCD_Cmd(0x01);<br />delay_ms(1000);<br />}<br />}[/syntax]<br /><br />A poniżej schemat połączeń HC595 z procesorem i LCD<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1425/1f99b1784b6138b62931562cfaeebd02.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1425/1f99b1784b6138b62931562cfaeebd02.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 27 lip 2014, o 17:07</p><hr />
]]></content>
</entry>
</feed>