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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-12-22T19:11:44+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19309&amp;mode</id>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-12-22T19:11:44+01:00</updated>
<published>2017-12-22T19:11:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200970#p200970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200970#p200970"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200970#p200970"><![CDATA[
Trzeba ustawić 4bit<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 22 gru 2017, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-12-22T17:33:51+01:00</updated>
<published>2017-12-22T17:33:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200962#p200962</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200962#p200962"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=200962#p200962"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />naskrobane na szybko i sprawdzone na zestawie ATB 1.05a<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 7 paź 2017, 22:26:13<br /> *      Author: Xentis<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//makro ułatwiające konfigurację<br />#define MS(a, b) MPS(a, b)<br />#define MPS(a, b) a##b<br />/*============================================================================<br /> * Konfiguracja pinów procesora sterujących wyświetlaczem, diodami stanu i switch-ami<br /> *============================================================================*/<br />#define N_RS 0// linia RS wyświetlacza - numer pinu uP<br />#define P_RS A// linia RS wyświetlacza - litera portu uP<br />#define N_RW 1// linia RW wyświetlacza - numer pinu uP<br />#define P_RW A// linia RW wyświetlacza - litera portu uP<br />#define N_E 2// linia E wyświetlacza - numer pinu uP<br />#define P_E A// linia E wyświetlacza - litera portu uP<br />#define N_D4 3// linia D4 wyświetlacza - numer pinu uP<br />#define P_D4 A// linia D4 wyświetlacza - litera portu uP<br />#define N_D5 4// linia D5 wyświetlacza - numer pinu uP<br />#define P_D5 A// linia D5 wyświetlacza - litera portu uP<br />#define N_D6 5// linia D6 wyświetlacza - numer pinu uP<br />#define P_D6 A// linia D6 wyświetlacza - litera portu uP<br />#define N_D7 6// linia D7 wyświetlacza - numer pinu uP<br />#define P_D7 A// linia D7 wyświetlacza - litera portu uP<br />#define N_P 7//sterowanie podświetleniem - numer pinu uP<br />#define P_P A//sterowanie podświetleniem - litera portu uP<br /><br />#define N_RS_LED 4// led stanu - linia RS wyświetlacza - numer pinu uP<br />#define P_RS_LED C// led stanu - linia RS wyświetlacza - litera portu uP<br />#define N_RW_LED 5// led stanu - linia RW wyświetlacza - numer pinu uP<br />#define P_RW_LED C// led stanu - linia RW wyświetlacza - litera portu uP<br />#define N_E_LED 6// led stanu - linia E wyświetlacza - numer pinu uP<br />#define P_E_LED C// led stanu - linia E wyświetlacza - litera portu uP<br />#define N_D4_LED 0// led stanu - linia D4 wyświetlacza - numer pinu uP<br />#define P_D4_LED C// led stanu - linia D4 wyświetlacza - litera portu uP<br />#define N_D5_LED 1// led stanu - linia D5 wyświetlacza - numer pinu uP<br />#define P_D5_LED C// led stanu - linia D5 wyświetlacza - litera portu uP<br />#define N_D6_LED 2// led stanu - linia D6 wyświetlacza - numer pinu uP<br />#define P_D6_LED C// led stanu - linia D6 wyświetlacza - litera portu uP<br />#define N_D7_LED 3// led stanu - linia D7 wyświetlacza - numer pinu uP<br />#define P_D7_LED C// led stanu - linia D7 wyświetlacza - litera portu uP<br /><br />#define N_D_UP_SW 0//switch zwiększający wartość rejestru D - numer pinu uP<br />#define P_D_UP_SW D//switch zwiększający wartość rejestru D - litera portu uP<br />#define N_D_DOWN_SW 1        //switch zmniejszający wartość rejestru D - numer pinu uP<br />#define P_D_DOWN_SW D           //switch zmniejszający wartość rejestru D - litera portu uP<br />#define N_RS_SW 2//switch toglujący pin RS - numer pinu uP<br />#define P_RS_SW D//switch toglujący pin RS - litera portu uP<br />#define N_RW_SW 3//switch toglujący pin RW - numer pinu uP<br />#define P_RW_SW D//switch toglujący pin RW - litera portu uP<br />#define N_E_SW 4//switch toglujący pin E - numer pinu uP<br />#define P_E_SW D//switch toglujący pin E - litera portu uP<br />/*============================================================================<br /> * Koniec konfiguracji<br /> *============================================================================*/<br />uint8_t licz_d;<br /><br />void set_D(uint8_t var);<br />void set_RS(uint8_t var);<br />void set_RW(uint8_t var);<br />void set_E(uint8_t var);<br /><br />int main(void){<br />MS(DDR, P_RS) |= (1&lt;&lt;N_RS);<br />MS(DDR, P_RW) |= (1&lt;&lt;N_RW);<br />MS(DDR, P_E) |= (1&lt;&lt;N_E);<br />MS(DDR, P_D4) |= (1&lt;&lt;N_D4);<br />MS(DDR, P_D5) |= (1&lt;&lt;N_D5);<br />MS(DDR, P_D6) |= (1&lt;&lt;N_D6);<br />MS(DDR, P_D7) |= (1&lt;&lt;N_D7);<br />MS(DDR, P_P) |= (1&lt;&lt;N_P);<br /><br />MS(DDR, P_RS_LED) |= (1&lt;&lt;N_RS_LED);<br />MS(DDR, P_RW_LED) |= (1&lt;&lt;N_RW_LED);<br />MS(DDR, P_E_LED) |= (1&lt;&lt;N_E_LED);<br />MS(DDR, P_D4_LED) |= (1&lt;&lt;N_D4_LED);<br />MS(DDR, P_D5_LED) |= (1&lt;&lt;N_D5_LED);<br />MS(DDR, P_D6_LED) |= (1&lt;&lt;N_D6_LED);<br />MS(DDR, P_D7_LED) |= (1&lt;&lt;N_D7_LED);<br /><br />MS(PORT, P_D_UP_SW) |= (1&lt;&lt;N_D_UP_SW);<br />MS(PORT, P_D_DOWN_SW) |= (1&lt;&lt;N_D_DOWN_SW);<br />MS(PORT, P_RS_SW) |= (1&lt;&lt;N_RS_SW);<br />MS(PORT, P_RW_SW) |= (1&lt;&lt;N_RW_SW);<br />MS(PORT, P_E_SW) |= (1&lt;&lt;N_E_SW);<br /><br />MS(PORT, P_P) |= (1&lt;&lt;N_P);<br />set_D(licz_d);<br />set_E(0);<br />set_RW(0);<br />set_RS(0);<br /><br />while(1){<br />if(!(MS(PIN, P_D_UP_SW)&amp;(1&lt;&lt;N_D_UP_SW))){<br />if(licz_d&lt;15)licz_d++; else licz_d=0;<br />set_D(licz_d);<br />_delay_ms(600);<br />while(!(MS(PIN, P_D_UP_SW)&amp;(1&lt;&lt;N_D_UP_SW))){<br />if(licz_d&lt;15)licz_d++; else licz_d=0;<br />set_D(licz_d);<br />_delay_ms(300);<br />}<br />}<br />if(!(MS(PIN, P_D_DOWN_SW)&amp;(1&lt;&lt;N_D_DOWN_SW))){<br />if(licz_d&gt;0)licz_d--; else licz_d=15;<br />set_D(licz_d);<br />_delay_ms(600);<br />while(!(MS(PIN, P_D_DOWN_SW)&amp;(1&lt;&lt;N_D_DOWN_SW))){<br />if(licz_d&gt;0)licz_d--; else licz_d=15;<br />set_D(licz_d);<br />_delay_ms(300);<br />}<br />}<br />if(!(MS(PIN, P_E_SW)&amp;(1&lt;&lt;N_E_SW))){<br />set_E(2);<br />_delay_ms(400);<br />while(!(MS(PIN, P_E_SW)&amp;(1&lt;&lt;N_E_SW)))_delay_ms(400);<br />}<br />if(!(MS(PIN, P_RS_SW)&amp;(1&lt;&lt;N_RS_SW))){<br />set_RS(2);<br />_delay_ms(400);<br />while(!(MS(PIN, P_RS_SW)&amp;(1&lt;&lt;N_RS_SW)))_delay_ms(400);<br />}<br />if(!(MS(PIN, P_RW_SW)&amp;(1&lt;&lt;N_RW_SW))){<br />set_RW(2);<br />_delay_ms(400);<br />while(!(MS(PIN, P_RW_SW)&amp;(1&lt;&lt;N_RW_SW)))_delay_ms(400);<br />}<br />}<br />}<br /><br />void set_D(uint8_t var){<br />if(var&amp;0x01){<br />MS(PORT, P_D4_LED) &amp;= ~(1&lt;&lt;N_D4_LED);<br />MS(PORT, P_D4) |= (1&lt;&lt;N_D4);<br />}<br />else{<br />MS(PORT, P_D4_LED) |= (1&lt;&lt;N_D4_LED);<br />MS(PORT, P_D4) &amp;= ~(1&lt;&lt;N_D4);<br />}<br />if(var&amp;0x02){<br />MS(PORT, P_D5_LED) &amp;= ~(1&lt;&lt;N_D5_LED);<br />MS(PORT, P_D5) |= (1&lt;&lt;N_D5);<br />}<br />else{<br />MS(PORT, P_D5_LED) |= (1&lt;&lt;N_D5_LED);<br />MS(PORT, P_D5) &amp;= ~(1&lt;&lt;N_D5);<br />}<br />if(var&amp;0x04){<br />MS(PORT, P_D6_LED) &amp;= ~(1&lt;&lt;N_D6_LED);<br />MS(PORT, P_D6) |= (1&lt;&lt;N_D6);<br />}<br />else{<br />MS(PORT, P_D6_LED) |= (1&lt;&lt;N_D6_LED);<br />MS(PORT, P_D6) &amp;= ~(1&lt;&lt;N_D6);<br />}<br />if(var&amp;0x08){<br />MS(PORT, P_D7_LED) &amp;= ~(1&lt;&lt;N_D7_LED);<br />MS(PORT, P_D7) |= (1&lt;&lt;N_D7);<br />}<br />else{<br />MS(PORT, P_D7_LED) |= (1&lt;&lt;N_D7_LED);<br />MS(PORT, P_D7) &amp;= ~(1&lt;&lt;N_D7);<br />}<br />}<br /><br />void set_RS(uint8_t var){<br />if(!var){<br />MS(PORT, P_RS_LED) |= (1&lt;&lt;N_RS_LED);<br />MS(PORT, P_RS) &amp;= ~(1&lt;&lt;N_RS);<br />}<br />else if(var==1){<br />MS(PORT, P_RS_LED) &amp;= ~(1&lt;&lt;N_RS_LED);<br />MS(PORT, P_RS) |= (1&lt;&lt;N_RS);<br />}<br />else{<br />MS(PORT, P_RS_LED) ^= (1&lt;&lt;N_RS_LED);<br />MS(PORT, P_RS) ^= (1&lt;&lt;N_RS);<br />}<br />}<br /><br />void set_RW(uint8_t var){<br />if(!var){<br />MS(PORT, P_RW_LED) |= (1&lt;&lt;N_RW_LED);<br />MS(PORT, P_RW) &amp;= ~(1&lt;&lt;N_RW);<br />}<br />else if(var==1){<br />MS(PORT, P_RW_LED) &amp;= ~(1&lt;&lt;N_RW_LED);<br />MS(PORT, P_RW) |= (1&lt;&lt;N_RW);<br />}<br />else{<br />MS(PORT, P_RW_LED) ^= (1&lt;&lt;N_RW_LED);<br />MS(PORT, P_RW) ^= (1&lt;&lt;N_RW);<br />}<br />}<br /><br />void set_E(uint8_t var){<br />if(!var){<br />MS(PORT, P_E_LED) |= (1&lt;&lt;N_E_LED);<br />MS(PORT, P_E) &amp;= ~(1&lt;&lt;N_E);<br />}<br />else if(var==1){<br />MS(PORT, P_E_LED) &amp;= ~(1&lt;&lt;N_E_LED);<br />MS(PORT, P_E) |= (1&lt;&lt;N_E);<br />}<br />else{<br />MS(PORT, P_E_LED) ^= (1&lt;&lt;N_E_LED);<br />MS(PORT, P_E) ^= (1&lt;&lt;N_E);<br />}<br />}[/syntax]<br />Garść instruktarzu:<br />W sekcji konfiguracja należy poustawiać sobie na jakich pinach uC mają być jakie sygnały:<br />(jako że posiadam ATB 1.05A obecna konfiguracja jest pod porty i piny które można zapiąć zworkami - zarówno dla wyświetlacza, jak i ledów, jedynie przyciski trzeba okablować do portu D0 - D4)<br />i tak pierwszy blok to piny podłączone do wyświetlacza, drugi blok to piny podłączone do ledów kontrolnych na których będzie pokazywany stan poszczególnych linii wyświetlacza (jako że ledy na zestawie ATB są podłączone anodami do Vcc więc ich zaświecenie następuje poprzez podanie &quot;0&quot; więc sygnały dla ledów są odwrócone w stosunku do sygnałów wyświetlacza tak by stan 1 pinu LCD sygnalizowany był zaświeceniem diody), natomiast trzeci ostatni blok to piny do których podłączamy pięć przycisków.<br />Przycisk N_D_UP służy do zwiększania zawartości buforka, który przechowuje stan panujący na pinach D4-D7 wyświetlacza, natomiast N_D_DOWN zmniejsza zawartość buforka. Przytrzymanie powyższych przycisków po około 0,6s powoduje automatyczne inkrementowanie/dekrementowanie zawartości bufora co 0,3s do czasu puszczenia przycisku.<br />Pozostałe przyciski mają blokadę, ich naciśnięcie zmienia stan danego pinu na przeciwny 1 raz, a następnie dopóki są trzymane cały program stoi.<br />Jako że program jest do celów dydaktycznych i dedykowany dla początkujących, eliminacja drgań styków przycisków zrobiona jest na delayach tak by nie gmatwać programu.<br />Natomiast makro:<br />[syntax=c]#define MS(a, b) MPS(a, b)<br />#define MPS(a, b) a##b[/syntax]działa podobnie jak to z przykładu z BB odnośnie LCD tyle, że zostało zmienione tak by było uniwersalne i jednolite dla wszystkich rejestrów I/O (jedno i to samo dla PORT, PIN i DDR).<br />Teraz wystarczy rozpisać sobie wszystkie komendy LCD-ka tak by nie biegać po nocie i można się bawić w ręczne sterowanie  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><a href="https://obrazkiforum.atnel.pl/6265/5c7131443b57c591d71d6d5474e142aa.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/6265/5c7131443b57c591d71d6d5474e142aa.jpg" alt="Obrazek" /></a><br /></div><br /><br /><br /><br />Daro69 wrcając do tematu wyświetlacza  coś jest nie tak .<br /><br />wszystko jest podłączone tak jak opisałeś , załączam wyświetlacz  ,czysty wystarczy by nacisnąć E (enable ) i kursor na ekranie miga w pozycji 0,0 , problem w tym że ja nie zmieniałem stanu na liniach d4-d7 nie rozumiem , <br />mam zestaw ATB 1.05 <br /><br />nie mam wglądu w to co już jest ustawione w samym wyświetlaczu na liniach danych nie moge tego rozgryść , wychodza różne głupoty , sprawdzisz to u siebie?<br /><br />czy trzeba ustawić wyświetlacz w tryb 4 bitowej magistrali czy jest to nie istotne?<br /><br />sprawdzałem zachowanie wyświetlacza pod tym adresem :<br /><!-- m --><a class="postlink" href="http://www.dinceraydin.com/djlcdsim/djlcdsim.html" >http://www.dinceraydin.com/djlcdsim/djlcdsim.html</a><!-- m --><br /><br />i wszystko działa prawidłowo i jest fajnie czytelnie szkoda że nie ma takiego interface-u dodałoby to czytelności , sprawdzałem stany na magistrali danych  miernikiem  ale szczerze to mi się poplątało  ratunku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 22 gru 2017, o 17:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-10-12T07:09:47+01:00</updated>
<published>2017-10-12T07:09:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196883#p196883</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196883#p196883"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196883#p196883"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent">;) już kumam ciekawy przykład, Mirku<br /></div><br />Jak widać, trzeba cały czas doskonalić swój warsztat dydaktyczny <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ... chyba będę dołączał ten przykład do innych z bloga <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  ale się uchichotałem.  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br />Mirku, tłumaczenie makra zarympoliste.  <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=11549">Daro69</a> — 12 paź 2017, o 07:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-11T19:08:31+01:00</updated>
<published>2017-10-11T19:08:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196855#p196855</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196855#p196855"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196855#p196855"><![CDATA[
Lepiej wyjść na idiotę pytając, niż odpowiadając <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Wysłane ze srajfona.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 11 paź 2017, o 19:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T16:08:33+01:00</updated>
<published>2017-10-11T16:08:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196844#p196844</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196844#p196844"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196844#p196844"><![CDATA[
trochę Cie pociągnąłem za język przepraszam , ale cierpliwość to masz przyzwoitą  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  , wole wszystko wyjaśniać do końca więc trochę wychodzę na idi.. porostu chce dobrze wszystko zrozumieć.<br /><br />Tak polecam ten przykład jest bardzo fajny pokazuj go innym <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />To jeszcze nie koniec pytań na pewno będą następne wątki <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=17263">procek87</a> — 11 paź 2017, o 16:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-11T15:52:32+01:00</updated>
<published>2017-10-11T15:52:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196842#p196842</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196842#p196842"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196842#p196842"><![CDATA[
<div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />;) już kumam ciekawy przykład, Mirku<br /></div><br />Jak widać, trzeba cały czas doskonalić swój warsztat dydaktyczny <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ... chyba będę dołączał ten przykład do innych z bloga <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 paź 2017, o 15:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T15:39:00+01:00</updated>
<published>2017-10-11T15:39:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196840#p196840</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196840#p196840"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196840#p196840"><![CDATA[
<img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> już kumam ciekawy przykład, Mirku<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 11 paź 2017, o 15:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-11T15:25:17+01:00</updated>
<published>2017-10-11T15:25:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196838#p196838</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196838#p196838"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196838#p196838"><![CDATA[
<div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />1. dlaczego trzeba stworzyć kolejne makro by nastąpiła podmiana<br /></div><br /><br />no przyznam że troszkę mnie kolega zaskakuje bo już o tym pisałem wyżej<br /><br />toż na poziomie pierwszego makra podłoży TYLKO kurczę NAZWĘ makra a nie to co jest argumentem makra<br /><br />[syntax=c]#define PIPA   DUPY<br /><br />#define KLEJ(x)  (_DO_##x)[/syntax]<br /><br />to spowoduje że w wyniku zapisu gdzieś w kodzie:<br /><br />[syntax=c]KLEJ( PIPA )[/syntax]<br /><br />uzyskasz<br /><br /><strong><span style="color: #0080FF"><span style="font-size: 150%; line-height: normal">KLEJ_DO_PIPA</span></span></strong><br /><br />bo z napisem KLEJ sklei nam PIPĘ<br /><br />a my przecież chcemy skleić DUPĘ z KLEJem, żeby wyszło<br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #008000">KLEJ_DO_DUPY</span></span></strong><br /><br />dlatego trzeba zrobić to dwupoziomowo czyli<br />[syntax=c]#define PIPA   DUPY<br /><br />#define KLEJ(x)  SILIKON(x)<br />#define SILIKON(x) (_DO_##x)[/syntax]<br /><br />no i w końcu pojawi się<br /><br /><strong><span style="font-size: 200%; line-height: normal"><span style="color: #0040FF">KLEJ_DO_DUPY </span></span></strong><br /><br />sorki za słówka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> użyte w przykładzie no ale - postanowiłem po raz tysiąc sześćset osiemdziesiąty czwarty podejść do tematu i zrobić to nieco inaczej <br /><br />sorki ale jak teraz nie dotrze to ja się poddaję - już więcej nie będę w stanie wyjaśnić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 paź 2017, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T14:56:32+01:00</updated>
<published>2017-10-11T14:56:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196837#p196837</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196837#p196837"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196837#p196837"><![CDATA[
Już chyba zaskoczyłem preprocesor lecąc od góry napotyka<br /><br />[syntax=c]#define LCD_RSPORT A[/syntax]<br /><br />później napotyka definicje makr<br /><br />[syntax=c]#define PORT(x) SPORT(x)<br />#define SPORT(x) (PORT##x)[/syntax]<br /><br />w dalszym ciągu nic się nie dzieje dopiero gdy napotka wywołanie <br /><br />[syntax=c]PORT(LCD_RSPORT) |= (1&lt;&lt;LCD_RS)[/syntax]<br /><br /><br />przekazuje to co jest pomiędzy nawiasami zamiast x wyżej do <br /><br />[syntax=c]#define PORT(x) SPORT(x)[/syntax]<br /><br />teraz wygląda to tak<br />[syntax=c]#define  PORT(LCD_RSPORT)  SPORT(LCD_RSPORT)[/syntax]<br /><br />Podmiana na LCD_RSPORT na A nastąpi na poziomie drugiego makra<br /><br /><br />[syntax=c]#define  SPORT(A)  (PORT##A)[/syntax]<br /><br />1. dlaczego trzeba stworzyć kolejne makro by nastąpiła podmiana<br /><br />2. dlaczego coś mu się przestawia i to właśnie teraz , wpada na pomysł by podstawić tam A a nie  wczew pierwszej linijsniej  ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 11 paź 2017, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-11T10:19:44+01:00</updated>
<published>2017-10-11T10:19:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196819#p196819</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196819#p196819"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196819#p196819"><![CDATA[
no o to DOKŁADNIE chodzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 paź 2017, o 10:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T10:01:02+01:00</updated>
<published>2017-10-11T10:01:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196816#p196816</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196816#p196816"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196816#p196816"><![CDATA[
Czyli w pierwszym przebiegu preprocesor przekaże nazwę  z kodu poniżej pomiędzy nawiasami do tego makra z pierwszego przebiegu zamiast x, <br /><br />w drugim przebiegu SPORT(nazwa ) pomiędzy nawiasami ma już inne dla niego znaczenie preprocesor zobaczy że to co kryje się pod nazwą a wcześniej było x można rozwinąć bo zobaczy: #define NAZWA  D zdefiniowane wyżej.<br /><br />Dobrze to rozumiem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 11 paź 2017, o 10:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-11T08:45:15+01:00</updated>
<published>2017-10-11T08:45:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196808#p196808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196808#p196808"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196808#p196808"><![CDATA[
No bo nie może w jednym przebiegu rozwinąć makra - tylko wkleja jego nazwę , potrzebny jest drugi przebieg i takie drugie makro robocze - wtedy dzięki temu, że argumentem jest przekazana nazwa makra to ostatecznie może ona zostać rozwinięta i podkładany jest już argument makra<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 paź 2017, o 08:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T07:37:37+01:00</updated>
<published>2017-10-11T07:37:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196806#p196806</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196806#p196806"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196806#p196806"><![CDATA[
Mirku tak tylko dlaczego w lini 1 podstawia nazwy makr a w lini 2 już to co dalej czyli tego co zeszyte w definicji dalej?<br /><br />Skąd mu się to bierze ,w 1 jest tępy a w kolejnej lini podstawia już zamiast nazwy makr to co dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 11 paź 2017, o 07:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-11T07:08:47+01:00</updated>
<published>2017-10-11T07:08:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196804#p196804</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196804#p196804"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196804#p196804"><![CDATA[
No po to są (muszą być) te dwa przebiegi bo w pierwszym podstawiłby TYLKO nazwę makra a nie to co jest w nim zaszyte<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 paź 2017, o 07:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-11T05:04:29+01:00</updated>
<published>2017-10-11T05:04:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196796#p196796</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196796#p196796"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196796#p196796"><![CDATA[
Kolego marchew świetnie wytłumaczenie nie rozumiem tylko jednej rzeczy i tego usiłuje się dowiedzieć. <br /><br />Dlaczego dopiero w drugiej linijce następuje zamiana na &quot;C&quot; a nie w pierwszej czemu preprocesor nie zrobi tego w <br /><br />pierwszej linijce, skoro potrafi zrobić to w drugiej ?<br /><br />To mnie cały czas nurtuje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Próbuje odnaleźć &quot;wzór&quot; na to .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 11 paź 2017, o 05:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-10T22:15:35+01:00</updated>
<published>2017-10-10T22:15:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196783#p196783</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196783#p196783"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196783#p196783"><![CDATA[
Następnym razem zrobi się historyjkę obrazkową<br /><br />Wysłane ze srajfona.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 10 paź 2017, o 22:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-10-10T21:55:43+01:00</updated>
<published>2017-10-10T21:55:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196780#p196780</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196780#p196780"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196780#p196780"><![CDATA[
Przy pomocy preprocesora możesz pisać tzw. makra. Tłumaczę (a przynajmniej się postaram) na przykładzie:[syntax=c]#define LED_PORT C<br />#define LED_PIN 8[/syntax]W tych linijkach określasz, gdzie podłączasz diodę LED do procesora.<br />Tutaj wybierasz sobie zarówno port jak i pin, do którego podłączysz. Ale kompilator nie zna takich określeń, potrzebuje wprost: &quot;dioda podłączona pod pin PC8&quot;. Żeby ustawić ten pin jako WYJŚCIE, musisz wywołać:[syntax=c]DDRC |= (1&lt;&lt;PC8);[/syntax]Więc jak to zrobić? Myślisz sobie: &quot;wystarczy, jeśli przygotuję sobie makro:[syntax=c]#define DDR(x) (DDR##x)[/syntax]i wywołam na początku funkcji main() jako [syntax=c]DDR(LED_PORT) |= (1&lt;&lt;LED_PIN);[/syntax]<br />No więc teraz, dlaczego tak nie będzie. Zacznijmy od podstawowych podstaw preprocesora:<br />1) Dyrektywa #define działa w ten sposób, że w kodzie programu wyszukiwany jest ciąg znaków, który jest pierwszym wyrazem po #define, a następnie jest zastąpiony tym, co jest jako drugi wyraz.<br />2) wyrażenie [syntax=c]#define FUN(x) (x*x)[/syntax] działa w ten sposób, że to, co jest w nawiasie (w tym przypadku x, ale możesz tu sobie to dowolnie oznaczyć, uwaga <strong>jednym wyrazem</strong>) jest podstawiane do wyrażenia, które jest jako drugi wyraz, a następnie wykonywane są obliczenia (jak w tym przykładzie), albo inne czynności, zależy, co wpiszesz.<br />3) symbol &quot;##&quot; to tzw. symbol sklejania. Łączy ze sobą w jeden ciąg to, co jest przed tym symbolem, i to, co jest za tym symbolem.<br />No dobrze, ale jak się to ma do opisanego problemu, zapytasz? Już tłumaczę:<br />Jeżeli wpiszesz tylko:[syntax=c]DDR(LED_PORT) |= (1&lt;&lt;LED_PIN);[/syntax]to makro rozwinie to do: [syntax=c]DDRLED_PORT |= (1&lt;&lt;8);[/syntax]<br />A teraz, jak powinno być:[syntax=c]#define DDR(x) SDDR(x)<br />#define SDDR(x) (DDR##x)[/syntax]To są dwa makra, które rozwiązują problem. Wywołujesz to samo, czyli [syntax=c]DDR(LED_PORT) |= (1&lt;&lt;LED_PIN);[/syntax]Teraz rozpiszę tylko, jak zadziała część [syntax=c]DDR(LED_PORT)[/syntax]Najpierw wykona się pierwsze makro, czyli[syntax=c]#define DDR(LED_PORT) SDDR(LED_PORT)[/syntax]W wyniku tego działania do makra z SDDR zostanie jako argument przekazane rozwinięcie makra LED_PORT. Czyli to drugie makro wywoła się jako:[syntax=c]SDDR(C) (DDR##C)[/syntax]Ponieważ wiemy, że symbol &quot;##&quot; oznacza sklejenie dwóch ciągów w jeden, więc w miejscu wywołania [syntax=c]DDR(LED_PORT)[/syntax] pojawi się wynik działania drugiego makra, czyli[syntax=c]PORTC[/syntax]<br />Mam nadzieję, że się rozjaśni. Prościej tego nie potrafię wytłumaczyć<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 10 paź 2017, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-10T20:50:40+01:00</updated>
<published>2017-10-10T20:50:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196776#p196776</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196776#p196776"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196776#p196776"><![CDATA[
<div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />Nie jasne dla mnie jest reaguje na ciąg dupa,jaką końcówkę?<br /></div><br />[syntax=c]#define LCD_D7DUPA C[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 10 paź 2017, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-10T20:27:38+01:00</updated>
<published>2017-10-10T20:27:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196773#p196773</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196773#p196773"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196773#p196773"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Preprocesor reaguje na ciąg &quot;DUPA&quot; w kodzie czyli zamienia nam naszą końcówkę na ALAMAKOTA <br />nasze &quot;x&quot; w kodzie to nic innego jak rozwinięcie LCD_D7DUPA do C, to chyba proste  w<br /></div><br /><br />Nie jasne dla mnie jest reaguje na ciąg dupa,jaką końcówkę? Fajnie jakby mi ktoś to wyjaśnił krok po kroku jeszcze raz . Bo pewnych rżyczy nie dostrzegam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 10 paź 2017, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-10T20:13:35+01:00</updated>
<published>2017-10-10T20:13:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196772#p196772</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196772#p196772"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196772#p196772"><![CDATA[
To może napisz czego konkretnie nie rozumiesz, bo wydaje mi się, że wytłumaczyłem jak chłopu na miedzy co z czego wynika.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 10 paź 2017, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-10-10T20:04:14+01:00</updated>
<published>2017-10-10T20:04:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196770#p196770</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196770#p196770"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196770#p196770"><![CDATA[
Dalej tego nie widzę mi żeby wytłumaczyć to pozostaje chyba już namalować jak przedszkolakowi  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo dla mnie to nielogiczne, ten Preprocesor chyba porusza według własnego wzoru .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 10 paź 2017, o 20:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-10T19:33:55+01:00</updated>
<published>2017-10-10T19:33:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196764#p196764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196764#p196764"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196764#p196764"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Nie lubię takich określeń, a szczególnie tu na forum ...<br /></div><br />Na przyszłość obiecuje poprawę  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 10 paź 2017, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-10T19:27:18+01:00</updated>
<published>2017-10-10T19:27:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196762#p196762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196762#p196762"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196762#p196762"><![CDATA[
<div class="quotetitle">Harry napisał(a):</div><div class="quotecontent"><br />Preprocesor reaguje na ciąg &quot;DUPA&quot; ...<br /></div><br />Nie lubię takich określeń, a szczególnie tu na forum ... ale ... no ale może dzięki takiemu dobremu tłumaczeniu to jednak dotrze <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=54">mirekk36</a> — 10 paź 2017, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-10T18:42:17+01:00</updated>
<published>2017-10-10T18:42:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196760#p196760</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196760#p196760"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196760#p196760"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />[syntax=c]#define PORT(x) ALAMAKOTA(x)      <br />#define ALAMAKOTA(x) (PORT##x)[/syntax]<br /></div><br /><br />Mirek tu użył niefortunnie PORT do tłumaczeń, bo wszystkim kojarzy się tylko z jednym <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]#define LCD_D7DUPA C[/syntax]<br />[syntax=c]1#define DUPA(x) ALAMAKOTA(x)      <br />#define ALAMAKOTA(x) (PORT##x)[/syntax]<br /><br />Preprocesor  reaguje na ciąg &quot;DUPA&quot; w kodzie czyli zamienia nam naszą końcówkę na ALAMAKOTA <br />nasze &quot;x&quot; w kodzie to nic innego jak rozwinięcie LCD_D7DUPA do C, to chyba proste <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> w drugiej linijce zmieniamy ALA... na już właściwy PORT - operator &quot;##&quot; służy do łączenia(sklejania) znaków, czyli wychodzi nam z tego już prawidłowe PORTC <br /><br /><br />jakby ktoś się poczuł urażony określeniami...<br />sorka, nie jestem zbyt kreatywny przy tłumaczeniach, może jakiś niebieski poprawi zanim mnie poczęstuje bananem lewoskrtętnym za wulgaryzmy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 10 paź 2017, o 18:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-10-10T18:20:04+01:00</updated>
<published>2017-10-10T18:20:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196758#p196758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196758#p196758"/>
<title type="html"><![CDATA[Re: Wyświetlacz LCD pytania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19309&amp;p=196758#p196758"><![CDATA[
Ja sobie zawsze to tak tłumaczyłem, że preprocesor potrafi dokonać tylko jednopoziomowej podmiany, a tu zachodzi już dwupoziomowa podmiana, bo za  x podstawiane jest LCD_RSPORT, a z kolei za LCD_RSPORT podstawiane jest D więc dla tego trzeba to zrobić w dwóch krokach. Nie wiem na ile w tym prawdy ale przynajmniej mi udało się zapamiętać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 10 paź 2017, o 18:20</p><hr />
]]></content>
</entry>
</feed>