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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-09-21T11:58:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21307&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-09-21T11:58:04+01:00</updated>
<published>2018-09-21T11:58:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211856#p211856</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211856#p211856"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211856#p211856"><![CDATA[
a po co? to też zawsze jakaś podpowiedź dla innych - że czasem warto szukać nawet takich prostych literówek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 wrz 2018, o 11:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kefir98]]></name></author>
<updated>2018-09-21T11:44:00+01:00</updated>
<published>2018-09-21T11:44:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211854#p211854</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211854#p211854"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211854#p211854"><![CDATA[
Tak przepraszam. Nawet usunąłbym wątek ale nie widzę takiej opcji<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19980">Kefir98</a> — 21 wrz 2018, o 11:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-09-21T08:09:22+01:00</updated>
<published>2018-09-21T08:09:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211846#p211846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211846#p211846"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211846#p211846"><![CDATA[
<div class="quotetitle">Harry napisał(a):</div><div class="quotecontent"><br />Pomijam już fakt że na forum istnieje bezwzględny zakaz umieszczania kodów z książki.<br /></div><br /><br />Kefir98 bardzo proszę weź pod uwagę również to co napisał wyżej kolega Harry ok ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 wrz 2018, o 08:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kefir98]]></name></author>
<updated>2018-09-20T20:58:11+01:00</updated>
<published>2018-09-20T20:58:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211839#p211839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211839#p211839"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211839#p211839"><![CDATA[
Chyba nigdy bym tego nie zauważył... Dziękuję za pomoc! Aż mi głupi, że zaśmiecam forum takimi tematami :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19980">Kefir98</a> — 20 wrz 2018, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2018-09-20T20:45:30+01:00</updated>
<published>2018-09-20T20:45:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211838#p211838</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211838#p211838"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211838#p211838"><![CDATA[
[syntax=c]#define USE_LCD_STER_P 1<br />#define USE_LCD_STER_E 1[/syntax]a dalej masz:<br />[syntax=c]#if USE_LCD_STR_P==1<br />void lcd_str_P(const char * str)<br />{<br />        register char znak;<br />        while ( (znak=pgm_read_byte(str++)) ) lcd_char( znak );<br />}<br />#endif[/syntax]<br /><br />Pomijam już fakt że na forum istnieje bezwzględny zakaz umieszczania kodów z książki.<br /><br />o Mirek mnie ubiegł <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=14685">Harry</a> — 20 wrz 2018, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-09-20T20:35:09+01:00</updated>
<published>2018-09-20T20:35:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211837#p211837</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211837#p211837"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211837#p211837"><![CDATA[
w pliku *.c masz:<br />[syntax=c]USE_LCD_STR_P[/syntax]<br /><br />a w pliku *.h masz:<br />[syntax=c]USE_LCD_STER_P[/syntax]<br /><br />znajdź jedną różnicę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 wrz 2018, o 20:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kefir98]]></name></author>
<updated>2018-09-20T20:21:50+01:00</updated>
<published>2018-09-20T20:21:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211836#p211836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211836#p211836"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211836#p211836"><![CDATA[
Właśnie mam program podzielony na pliki, w main.c i w tym drugim pliku .c do inicjalizacji mam includy do pliku nagłówkowego .h<br />Pisząc ten kod cały czas analizowałem kody z pendriva i naprawdę nie widzę błędu :/. Wydaje mi się ze rozumiem kod i jak to wszystko działa ale nie rozumiem dlaczego jest ten błąd. Tutaj jest mój plik nagłówkowy [syntax=c]#ifndef PINY_H_<br />#define PINY_H_<br /><br />#define LCD_Y 2<br />#define LCD_x 16<br /><br />#define USE_RW 1<br /><br />#define LCD_D7PORT A<br />#define LCD_D7 6<br />#define LCD_D6PORT A<br />#define LCD_D6 5<br />#define LCD_D5PORT A<br />#define LCD_D5 4<br />#define LCD_D4PORT A<br />#define LCD_D4 3<br /><br />#define LCD_RSPORT A<br />#define LCD_RS 0<br />#define LCD_RWPORT A<br />#define LCD_RW 1<br />#define LCD_EPORT A<br />#define LCD_E 2<br /><br />#define PORT(x) SPORT(x)<br />#define SPORT(x) (PORT##x)<br />// *** PIN<br />#define PIN(x) SPIN(x)<br />#define SPIN(x) (PIN##x)<br />// *** DDR<br />#define DDR(x) SDDR(x)<br />#define SDDR(x) (DDR##x)<br /><br />#define SET_RS PORT(LCD_RSPORT)|= (1&lt;&lt;LCD_RS)<br />#define CLR_RS PORT(LCD_RSPORT)&amp;=~(1&lt;&lt;LCD_RS)<br /><br />#define SET_RW PORT(LCD_RWPORT)|=(1&lt;&lt;LCD_RW)<br />#define CLR_RW PORT(LCD_RWPORT)&amp;=~(1&lt;&lt;LCD_RW)<br /><br />#define SET_E PORT(LCD_EPORT)|= (1&lt;&lt;LCD_E)<br />#define CLR_E PORT(LCD_EPORT)&amp;=~(1&lt;&lt;LCD_E)<br /><br />#define USE_LCD_LOCATE 1<br /><br />#define USE_LCD_STER_P 1<br />#define USE_LCD_STER_E 1<br /><br />#define USE_LCD_INT 1<br />#define USE_LCD_HEX 1<br /><br />#define USE_LCD_DEFCHAR 1<br />#define USE_LCD_DEFCHAR_P 1<br />#define USE_LCD_DEFCHAR_E 1<br /><br />#define USE_LCD_CURSOR_ON 0<br />#define USE_LCD_CURSOR_BLINK 0<br />#define USE_LCD_CURSOR_HOME 0<br /><br /><br />#define LCDC_CLS0x01<br />#define LCDC_HOME0x02<br />#define LCDC_ENTRY0x04<br />#define LCDC_ENTRYR0x02<br />#define LCDC_ENTRYL0<br />#define LCDC_MOVE0x01<br />#define LCDC_ONOFF0x08<br />#define LCDC_DISPLAYON0x04<br />#define LCDC_CURSORON0x02<br />#define LCDC_CURSOROFF0<br />#define LCDC_BLINKON0x01<br />#define LCDC_SHIFT0x10<br />#define LCDC_SHIFTDISP0x08<br />#define LCDC_SHIFTR0x04<br />#define LCDC_SHIFTL0<br />#define LCDC_FUNC0x20<br />#define LCDC_FUNC8B0x10<br />#define LCDC_FUNC4B0<br />#define LCDC_FUNC2L0x08<br />#define LCDC_FUNC1L0<br />#define LCDC_FUNC5x100x04<br />#define LCDC_FUNC5x70<br />#define LCDC_SET_CGRAM0x40<br />#define LCDC_SET_DDRAM0x80<br /><br />#if ( (LCD_ROWS == 4) &amp;&amp; (LCD_COLS == 16) )<br />#define LCD_LINE1 0x00// adres 1 znaku 1 wiersza<br />#define LCD_LINE2 0x28// adres 1 znaku 2 wiersza<br />#define LCD_LINE3 0x14  // adres 1 znaku 3 wiersza<br />#define LCD_LINE4 0x54  // adres 1 znaku 4 wiersza<br />#else<br />#define LCD_LINE1 0x00// adres 1 znaku 1 wiersza<br />#define LCD_LINE2 0x40// adres 1 znaku 2 wiersza<br />#define LCD_LINE3 0x10  // adres 1 znaku 3 wiersza<br />#define LCD_LINE4 0x50  // adres 1 znaku 4 wiersza<br />#endif<br /><br />void lcd_ini(void);// WŁĄCZONA na stałe do kompilacji<br />void lcd_cls(void);// WŁĄCZONA na stałe do kompilacji<br />void lcd_str(char * str);// WŁĄCZONA na stałe do kompilacji<br /><br />void lcd_locate(uint8_t y, uint8_t x);// domyślnie WŁĄCZONA z kompilacji w pliku lcd.c<br /><br />void lcd_char(char c);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_str_P(const char * str);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_str_E(char * str);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_int(int val);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_hex(uint32_t val);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_defchar(uint8_t nr, uint8_t *def_znak);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_defchar_P(uint8_t nr, const uint8_t *def_znak);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_defchar_E(uint8_t nr, uint8_t *def_znak);// domyślnie wyłączona z kompilacji w pliku lcd.c<br /><br />void lcd_home(void);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_cursor_on(void);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_cursor_off(void);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_blink_on(void);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_blink_off(void);<br /><br /><br />#endif /* PINY_H_ */[/syntax] <br />a tu main.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &quot;piny.h&quot;<br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br />const char PROGMEM tab1&#91;&#93;={&quot;abc&quot;};<br />char EEMEM tab2&#91;&#93; ={&quot;def&quot;};<br /><br />int main (void)<br />{<br />lcd_ini();<br />lcd_str_P(tab1);<br />lcd_locate(0,10);<br />while(1)<br />{<br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19980">Kefir98</a> — 20 wrz 2018, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-09-20T20:14:00+01:00</updated>
<published>2018-09-20T20:14:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211835#p211835</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211835#p211835"/>
<title type="html"><![CDATA[Re: Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211835#p211835"><![CDATA[
A jak myślisz, po co są kody dołączone do książki? Tylko po to aby je uruchomić i zobaczyć, że działają ? .... Nie - są po to przede wszystkim aby można było porównywać je do tego co sami piszemy, aby móc zobaczyć gdzie popełniamy błędy podczas własnych prób ... itp itd<br /><br />Teraz do meritum, wrzucasz tak troszkę wszystko jakby do jednego worka nie zwracając uwagi chociażby na konieczność prawidłowego podziału projektu na pliki.<br /><br /><div class="quotetitle">Kefir98 napisał(a):</div><div class="quotecontent"><br />wyskakuje mi taki oto komunikat: undefined reference to `lcd_str_P'.<br /></div><br />to oznacza, że w programie głównym nie widać prawidłowego odwołania do tejże funkcji - najprawdopodobniej właśnie masz namieszane w pliku nagłówkowym, czyli np brak nagłówka tej funkcji ... <br /><br />proszę zajrzyj do kodu na pendrive z książki i zobacz jak to się robi dla dowolnie wybranej funkcji ... Poza tym masz rozdział w książce o podziale projektu na pliki *.c i *.h<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 wrz 2018, o 20:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kefir98]]></name></author>
<updated>2018-09-20T19:34:17+01:00</updated>
<published>2018-09-20T19:34:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211834#p211834</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211834#p211834"/>
<title type="html"><![CDATA[Co oznacza &quot; undefined reference to...&quot;?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21307&amp;p=211834#p211834"><![CDATA[
Witam to mój pierwszy post na tym forum. Jestem początkującym który zmaga się z wyświetlaczem LCD z BB. Program zamieszczony na pendrive działa dobrze, tekst wyświetla się poprawnie, ale gdy sam piszę kod w oparciu o książkę by go zrozumieć, wyskakuje mi taki oto komunikat:  undefined reference to `lcd_str_P'.<br />Program się przez to nie kompiuje do końca. Nawet przekopiowałem odpowiednio fragment lcd_str_P z pendriva ale jest bez zmian. Proszę o pomoc bo naprawdę nie wiem co jest nie tak.  Tutaj zamieszczam plik .c przepisywałem wszystko z książki [syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;piny.h&quot;<br />static inline void data_dir_out(void)<br />{<br />DDR(LCD_D7PORT)|=(1&lt;&lt;LCD_D7);<br />DDR(LCD_D6PORT)|=(1&lt;&lt;LCD_D6);<br />DDR(LCD_D5PORT)|=(1&lt;&lt;LCD_D5);<br />DDR(LCD_D4PORT)|=(1&lt;&lt;LCD_D4);<br />DDR(LCD_RSPORT)|=(1&lt;&lt;LCD_RS);<br />DDR(LCD_EPORT)|=(1&lt;&lt;LCD_E);<br />#if USE_RW==1<br />DDR(LCD_RWPORT)|=(1&lt;&lt;LCD_RW);<br />#endif<br />}<br />static inline void data_dir_in(void)<br />{<br />DDR(LCD_D7PORT)&amp;= ~(1&lt;&lt;LCD_D7);<br />DDR(LCD_D6PORT)&amp;= ~(1&lt;&lt;LCD_D6);<br />DDR(LCD_D5PORT)&amp;= ~(1&lt;&lt;LCD_D5);<br />DDR(LCD_D4PORT)&amp;= ~(1&lt;&lt;LCD_D4);<br />}<br /><br /><br />static inline void lcd_sendHalf (uint8_t data)<br />{<br />if(data&amp;(1&lt;&lt;0))<br />PORT(LCD_D4PORT)|=(1&lt;&lt;LCD_D4);<br />else PORT(LCD_D4PORT)&amp;=~(1&lt;&lt;LCD_D4);<br /><br />if(data&amp;(1&lt;&lt;1))<br />PORT(LCD_D5PORT)|=(1&lt;&lt;LCD_D5);<br />else PORT(LCD_D5PORT)&amp;=~(1&lt;&lt;LCD_D5);<br /><br />if(data&amp;(1&lt;&lt;2))<br />PORT(LCD_D6PORT)|=(1&lt;&lt;LCD_D6);<br />else PORT(LCD_D6PORT)&amp;=~(1&lt;&lt;LCD_D6);<br /><br />if(data&amp;(1&lt;&lt;3))<br />PORT(LCD_D6PORT)|=(1&lt;&lt;LCD_D6);<br />else PORT(LCD_D6PORT)&amp;=~(1&lt;&lt;LCD_D6);<br />}<br />#if USE_RW==1<br /><br />static inline uint8_t lcd_readHalf(void)<br />{<br />uint8_t result=0;<br />if(PIN(LCD_D4PORT)&amp;(1&lt;&lt;LCD_D4)) result|=(1&lt;&lt;0);<br />if(PIN(LCD_D5PORT)&amp;(1&lt;&lt;LCD_D5)) result|=(1&lt;&lt;1);<br />if(PIN(LCD_D6PORT)&amp;(1&lt;&lt;LCD_D6)) result|=(1&lt;&lt;2);<br />if(PIN(LCD_D7PORT)&amp;(1&lt;&lt;LCD_D7)) result|=(1&lt;&lt;3);<br />return result;<br />}<br />#endif<br /><br />#if USE_RW==1<br />uint8_t _lcd_read_byte(void)<br />{<br /> uint8_t result=0;<br /> data_dir_in();<br /> SET_RW;<br /> SET_E;<br /> result|=lcd_readHalf()&lt;&lt;4;<br /> CLR_E;<br /> SET_E;<br /> result|= lcd_readHalf();<br /> CLR_E;<br /> return result;<br /><br />}<br />#endif<br />#if USE_RW==1<br />uint8_t check_BF(void)<br />{<br />CLR_RS;<br />return _lcd_read_byte();<br />}<br />#endif<br />void _lcd_write_byte (unsigned char _data)<br />{<br />data_dir_out();<br />#if USE_RW==1<br />CLR_RW;<br />#endif<br />SET_E;<br />lcd_sendHalf(_data&gt;&gt;4);<br />CLR_E;<br /><br />SET_E;<br />lcd_sendHalf(_data);<br />CLR_E;<br /><br />#if USE_RW==1<br />while(check_BF()&amp;(1&lt;&lt;7));<br />#else<br />_delay_us(120);<br />#endif<br />}<br /><br />void lcd_write_cmd( uint8_t cmd)<br />{<br />CLR_RS;<br />_lcd_write_byte(cmd);<br /><br />}<br />void lcd_write_data(uint8_t data)<br />{<br />SET_RS;<br />_lcd_write_byte(data);<br />}<br /><br />void lcd_cls(void)<br />{<br />lcd_write_cmd(LCDC_CLS);<br />#if USE_RW==0<br />_delay_ms(4.9);<br />#endif<br />}<br />#if USE_LCD_CURSOR_HOME==1<br />void lcd_home(void)<br />{<br />lcd_write_cmd(LCDC_CLS|LCDC_HOME);<br />#if USE_RW==0<br />_delay_ms(4.9);<br />#endif<br />}<br />#endif<br /><br />#if USE_LCD_CURSOR_ON==1<br />void lcd_cursor_on(void)<br />{<br />lcd_write_cmd(LCDC_ONOFF|LCDC_DISPLAYON|LCDC_CURSORON);<br />}<br />void lcd_cursor_off (void)<br />{<br />lcd_write_cmd(LCDC_ONOFF|LCDC_DISPLAYON);<br />}<br />#endif<br />#if USE_LCD_CURSOR_BLINK==1<br />void lcd_blink_on(void)<br />{<br />lcd_write_cmd( LCDC_ONOFF|LCDC_DISPLAYON|LCDC_CURSORON|LCDC_BLINKON);<br />}<br />void lcd_blink_off(void)<br />{<br />lcd_write_cmd(LCDC_ONOFF|LCDC_DISPLAYON);<br />}<br />#endif<br />#if USE_LCD_CHAR == 1<br />//----------------------------------------------------------------------------------------<br />//<br />// Wysłanie pojedynczego znaku do wyświetlacza LCD w postaci argumentu<br />//<br />// 8 własnych znaków zdefiniowanych w CGRAM<br />// wysyłamy za pomocą kodów 0x80 do 0x87 zamiast 0x00 do 0x07<br />//<br />//----------------------------------------------------------------------------------------<br />void lcd_char(char c)<br />{<br />lcd_write_data( ( c&gt;=0x80 &amp;&amp; c&lt;=0x87 ) ? (c &amp; 0x07) : c);<br />}<br />#endif<br />void lcd_str(char * str)<br />{<br />register char znak;<br />while((znak=*(str++)))lcd_write_data((znak&gt;=0x80&amp;&amp;znak&lt;=0x87)?(znak&amp;0x07):znak);<br /><br />}<br />#if USE_LCD_STR_P==1<br />void lcd_str_P(const char * str)<br />{<br />register char znak;<br />while ( (znak=pgm_read_byte(str++)) ) lcd_char( znak );<br />}<br />#endif<br /><br /><br />#if USE_LCD_STR_E == 1<br />//----------------------------------------------------------------------------------------<br />//<br />// Wysłanie stringa do wyświetlacza LCD z pamięci EEPROM<br />//<br />// 8 własnych znaków zdefiniowanych w CGRAM<br />// wysyłamy za pomocą kodów 0x80 do 0x87 zamiast 0x00 do 0x07<br />//<br />//----------------------------------------------------------------------------------------<br />void lcd_str_E(char * str)<br />{<br />register char znak;<br />while(1)<br />{<br />znak=eeprom_read_byte( (uint8_t *)(str++) );<br />if(!znak || znak==0xFF) break;<br />else lcd_char( znak );<br />}<br />}<br />#endif<br />#if USE_LCD_INT==1<br />void lcd_int(int val)<br />{<br />char bufor&#91;17&#93;;<br />lcd_str(itoa(val,bufor,10));<br />}<br />#endif<br />#if USE_LCD_HEX==1<br />void lcd_hex(uint32_t val)<br />{<br />char bufor&#91;17&#93;;<br />lcd_str(itoa(val,bufor,16));<br />}<br />#endif<br />#if USE_LCD_DEFCHAR==1<br />void lcd_defchar(uint8_t nr,uint8_t *def_znak)<br />{<br />register uint8_t i,c;<br />lcd_write_cmd(64+((nr&amp;0x07)*8));<br />for(i=0;i&lt;8;i++)<br />{<br />c=*(def_znak++);<br />lcd_write_data(c);<br />}<br />}<br />#endif<br /><br />#if USE_LCD_DEFCHAR_P==1<br />void lcd_defchar_P(uint8_t nr, const uint8_t *def_znak)<br />{<br />register uint8_t i,c;<br />lcd_write_cmd(64+((nr&amp;0x07)*8));<br />for(i=0; i&lt;8;i++)<br />{<br />c=pgm_read_byte(64+((nr&amp;0x07)*8));<br />lcd_write_data(c);<br />}<br />}<br />#endif<br />#if USE_LCD_DEFCHAR_E==1<br />void lcd_defchar_E(uint8_t nr, uint8_t *def_znak)<br />{<br />register uint8_t i,c;<br />lcd_write_cmd(64+((nr&amp;0x07)*8));<br />for(i=0;i&lt;8;i++)<br />{<br />c=eeprom_read_byte(def_znak++);<br />lcd_write_data(c);<br />}<br />}<br />#endif<br />#if USE_LCD_LOCATE == 1<br />//----------------------------------------------------------------------------------------<br />//<br />//Ustawienie kursora w pozycji Y-wiersz, X-kolumna<br />//<br />// Y = od 0 do 3<br />// X = od 0 do n<br />//<br />//funkcja dostosowuje automatycznie adresy DDRAM<br />//w zależności od rodzaju wyświetlacza (ile posiada wierszy)<br />//<br />//----------------------------------------------------------------------------------------<br />void lcd_locate(uint8_t y, uint8_t x)<br />{<br />switch(y)<br />{<br />case 0: y = LCD_LINE1; break;<br /><br />#if (LCD_ROWS&gt;1)<br />    case 1: y = LCD_LINE2; break; // adres 1 znaku 2 wiersza<br />#endif<br />#if (LCD_ROWS&gt;2)<br />    case 2: y = LCD_LINE3; break; // adres 1 znaku 3 wiersza<br />#endif<br />#if (LCD_ROWS&gt;3)<br />    case 3: y = LCD_LINE4; break; // adres 1 znaku 4 wiersza<br />#endif<br />}<br /><br />lcd_write_cmd( (0x80 + y + x) );<br />}<br />#endif<br /><br />void lcd_ini(void)<br />{<br />data_dir_out();<br />PORT(LCD_RSPORT)|=(1&lt;&lt;LCD_RS);<br />PORT(LCD_EPORT)|=(1&lt;&lt;LCD_E);<br />#if USE_RW==1<br />PORT(LCD_RWPORT)|=(1&lt;&lt;LCD_E);<br />#endif<br />_delay_ms(15);<br />PORT(LCD_EPORT)&amp;=~(1&lt;&lt;LCD_E);<br />PORT(LCD_RSPORT)&amp;=~(1&lt;&lt;LCD_RS);<br />#if USE_RW==1<br />PORT(LCD_RWPORT)&amp;=~(1&lt;LCD_RW);<br />#endif<br />SET_E;<br />lcd_sendHalf(0x03);<br />CLR_E;<br />_delay_ms(4.1);<br />SET_E;<br />lcd_sendHalf(0x03);<br />CLR_E;<br />_delay_us(100);<br />SET_E;<br />lcd_sendHalf(0x03);<br />CLR_E;<br />_delay_us(100);<br />SET_E;<br />lcd_sendHalf(0x02);<br />CLR_E;<br />_delay_us(100);<br /><br />lcd_write_cmd(LCDC_FUNC|LCDC_FUNC4B|LCDC_FUNC2L|LCDC_FUNC5x7);<br />lcd_write_cmd(LCDC_ONOFF|LCDC_CURSOROFF);<br />lcd_write_cmd(LCDC_ENTRY|LCDC_ENTRYR);<br />lcd_cls();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19980">Kefir98</a> — 20 wrz 2018, o 19:34</p><hr />
]]></content>
</entry>
</feed>