<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>https://senzor.robotika.sk/sensorwiki/index.php?action=history&amp;feed=atom&amp;title=AVR_lcd.c</id>
	<title>AVR lcd.c - História úprav</title>
	<link rel="self" type="application/atom+xml" href="https://senzor.robotika.sk/sensorwiki/index.php?action=history&amp;feed=atom&amp;title=AVR_lcd.c"/>
	<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;action=history"/>
	<updated>2026-05-20T00:50:29Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2658&amp;oldid=prev</id>
		<title>Balogh na 07:58, 28. október 2011</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2658&amp;oldid=prev"/>
		<updated>2011-10-28T07:58:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;amp;diff=2658&amp;amp;oldid=2196&quot;&gt;Zobraziť rozdiely&lt;/a&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2196&amp;oldid=prev</id>
		<title>Balogh na 11:44, 4. október 2010</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2196&amp;oldid=prev"/>
		<updated>2010-10-04T11:44:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sk&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Staršia verzia&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Verzia z 11:44, 4. október 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Riadok 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=&quot;c&quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#include &amp;quot;lcd.h&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#include &amp;quot;lcd.h&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l227&quot;&gt;Riadok 227:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 228:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
	<entry>
		<id>https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2195&amp;oldid=prev</id>
		<title>Balogh: Nová stránka: #include &quot;lcd.h&quot;   // *********************************************************** // ******************** PUBLIC FUNCTIONS ********************* // **********************************...</title>
		<link rel="alternate" type="text/html" href="https://senzor.robotika.sk/sensorwiki/index.php?title=AVR_lcd.c&amp;diff=2195&amp;oldid=prev"/>
		<updated>2010-10-04T11:43:59Z</updated>

		<summary type="html">&lt;p&gt;Nová stránka: #include &amp;quot;lcd.h&amp;quot;   // *********************************************************** // ******************** PUBLIC FUNCTIONS ********************* // **********************************...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#include &amp;quot;lcd.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ***********************************************************&lt;br /&gt;
// ******************** PUBLIC FUNCTIONS *********************&lt;br /&gt;
// ***********************************************************&lt;br /&gt;
&lt;br /&gt;
void lcdInit4(void)&lt;br /&gt;
{ 	                                        // initialize LCD control &amp;amp; data &lt;br /&gt;
										    // lines to output&lt;br /&gt;
&lt;br /&gt;
	PORTD = 0b00000001;						// pull-up on unused input &lt;br /&gt;
	DDRD  = 0b11111110;						// set ctrl &amp;amp; data as outputs &lt;br /&gt;
&lt;br /&gt;
	delay_ms(50);        					// -  wait 15ms or more&lt;br /&gt;
											// -------------------&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_RS);			// set RS to &amp;quot;control&amp;quot;&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_RW);			// set R/W to &amp;quot;write&amp;quot;&lt;br /&gt;
											// 4 bit write&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);			    // set &amp;quot;E&amp;quot; line&lt;br /&gt;
//	PORTD = (PORTD | 0x30) &amp;amp; 0x3F;          // output data, high 4 bits&lt;br /&gt;
	PORTD = (PORTD | 0x20) &amp;amp; 0x2F;          // output data, high 4 bits&lt;br /&gt;
	LCD_DELAY;							    // wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);			// clear &amp;quot;E&amp;quot; line	&lt;br /&gt;
											// -------------------&lt;br /&gt;
	delay_ms(5); 				            // -  wait 4.1ms&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);	 	        // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);			// clear &amp;quot;E&amp;quot; line	&lt;br /&gt;
											// -------------------&lt;br /&gt;
    delay_ms(1);	                        // -  wait 0.1ms&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);			    // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;						        // wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);			// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
											// -------------------   &lt;br /&gt;
	while(lcdBusy()) /* wait */ ;           // check for not busy&lt;br /&gt;
    										// -------------------&lt;br /&gt;
	PORTD = (PORTD | 0x20) &amp;amp; 0x2F;	        // output data, high 4 bits&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);		        // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);		    // clear &amp;quot;E&amp;quot; line&lt;br /&gt;
											// -------------------&lt;br /&gt;
	lcdControlWrite(0x28);					// 0x28	- function set (2 rows, 5x8 font)&lt;br /&gt;
	lcdControlWrite(0x08);					// 0x08	- display OFF&lt;br /&gt;
	lcdControlWrite(0x01);					// 0x01 - clear display &lt;br /&gt;
	lcdControlWrite(0x06); 					// 0x06 - shift right&lt;br /&gt;
	lcdControlWrite(0x0C); 					// 0x0C - display ON, cursor OFF	&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ************************************************************&lt;br /&gt;
// ********************** LOCAL FUNCTIONS *********************&lt;br /&gt;
// ************************************************************&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void lcdControlWrite(unsigned char c_data)  // write the CONTROL byte to the display controller&lt;br /&gt;
{&lt;br /&gt;
	while(lcdBusy()) /* wait here */ ;		// wait until LCD not busy  or timeout&lt;br /&gt;
	&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_RS);		    // set RS to &amp;quot;control&amp;quot;&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_RW);	    	// set R/W to &amp;quot;write&amp;quot;	&lt;br /&gt;
	&lt;br /&gt;
	PORTD = (PORTD&amp;amp;0x0F)|(c_data&amp;amp;0xF0);	    // output data, high 4 bits&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);		        // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);	        // clear &amp;quot;E&amp;quot; line&lt;br /&gt;
&lt;br /&gt;
	PORTD = (PORTD&amp;amp;0x0F) | (c_data&amp;lt;&amp;lt;4);	    // output data, low 4 bits&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);		        // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);	        // clear &amp;quot;E&amp;quot; line			&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void lcdDataWrite(unsigned char w_data)     // write a DATA byte to the display&lt;br /&gt;
{&lt;br /&gt;
	while(lcdBusy())	 /* wait */ ;		// wait until LCD not busy or timeout&lt;br /&gt;
		&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_RS);		        // set RS to &amp;quot;data&amp;quot;&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_RW);		    // set R/W to &amp;quot;write&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
	PORTD = (PORTD&amp;amp;0x0F) | (w_data&amp;amp;0xF0);	// output data, high 4 bits&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);	            // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);		    // clear &amp;quot;E&amp;quot; line&lt;br /&gt;
	&lt;br /&gt;
	PORTD = (PORTD&amp;amp;0x0F) | (w_data&amp;lt;&amp;lt;4);	    // output data, low 4 bits&lt;br /&gt;
	SETBIT(PORTD, LCD_CTRL_E);		        // set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;								// wait&lt;br /&gt;
	CLEARBIT(PORTD, LCD_CTRL_E);		    // clear &amp;quot;E&amp;quot; line	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ak vrati 1, OK&lt;br /&gt;
// ak vrati 0, vyprsal timeout&lt;br /&gt;
&lt;br /&gt;
volatile unsigned char t_out_LCD; 		// timeout displeja (krok 1024 us) &lt;br /&gt;
//																krok 1ms&lt;br /&gt;
unsigned char lcdBusy(void)&lt;br /&gt;
{	&lt;br /&gt;
&lt;br /&gt;
   delay_ms(10);&lt;br /&gt;
   return 0;&lt;br /&gt;
/*&lt;br /&gt;
unsigned char pom;&lt;br /&gt;
	t_out_LCD=4; // pockam cca 4ms&lt;br /&gt;
	// wait until LCD busy bit goes to zero&lt;br /&gt;
	// do a read from control register&lt;br /&gt;
	CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_RS);				// set RS to &amp;quot;control&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	LCD_DATA_PORT |=  0xF0;	// set pull-ups to on (4bit)&lt;br /&gt;
	LCD_DATA_DDR  &amp;amp;=  0x0F;	// set data I/O lines to input (4bit)&lt;br /&gt;
	&lt;br /&gt;
	SETBIT(LCD_CTRL_PORT, LCD_CTRL_RW);				// set R/W to &amp;quot;read&amp;quot;&lt;br /&gt;
	SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);				// set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;										// wait&lt;br /&gt;
	pom= LCD_DATA_PIN&amp;amp;0xF0;		// input data, high 4 bits&lt;br /&gt;
	CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);		// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;										// wait&lt;br /&gt;
	SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);				// set &amp;quot;E&amp;quot; line&lt;br /&gt;
	LCD_DELAY;										// wait&lt;br /&gt;
	pom|=(LCD_DATA_PIN&amp;gt;&amp;gt;4)&amp;amp;0x0F;		// input data, low 4 bits&lt;br /&gt;
	CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);		// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
	&lt;br /&gt;
	while ((pom &amp;amp; (1&amp;lt;&amp;lt;LCD_BUSY))  &amp;amp;&amp;amp; t_out_LCD )&lt;br /&gt;
	{&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);				// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;										// wait&lt;br /&gt;
		pom=LCD_DATA_PIN&amp;amp;0xF0;		// input data, high 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);		// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;										// wait&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);				// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;										// wait&lt;br /&gt;
		pom|=(LCD_DATA_PIN&amp;gt;&amp;gt;4)&amp;amp;0x0F;		// input data, low 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);		// clear &amp;quot;E&amp;quot; line	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	//	leave data lines in input mode so they can be most easily used for other purposes	&lt;br /&gt;
	if(t_out_LCD)&lt;br /&gt;
		return 1;	// ak vrati 1 timeout OK &lt;br /&gt;
	else &lt;br /&gt;
		return 0;		// ak vrati 0 timeout notOK&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
unsigned char lcdControlRead(void)&lt;br /&gt;
{&lt;br /&gt;
	// read the control byte from the display controller&lt;br /&gt;
	register unsigned char r_data=0;&lt;br /&gt;
&lt;br /&gt;
	if(lcdBusyWait())	// wait until LCD not busy or time out&lt;br /&gt;
	{	&lt;br /&gt;
		outb(LCD_DATA_PORT, inb(LCD_DATA_PORT)|0xF0);	// set pull-ups to on (4bit)&lt;br /&gt;
		outb(LCD_DATA_DDR, inb(LCD_DATA_DDR)&amp;amp;0x0F);	// set data I/O lines to input (4bit)&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_RS);				// set RS to &amp;quot;control&amp;quot;&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_RW);				// set R/W to &amp;quot;read&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		r_data = inb(LCD_DATA_PIN)&amp;amp;0xF0;		// input data, high 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		r_data |= inb(LCD_DATA_PIN)&amp;gt;&amp;gt;4;		// input data, low 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
		&lt;br /&gt;
		//	leave data lines in input mode so they can be most easily used for other purposes&lt;br /&gt;
	}	&lt;br /&gt;
	return r_data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char lcdDataRead(void)&lt;br /&gt;
{&lt;br /&gt;
// read a data byte from the display&lt;br /&gt;
	register unsigned char r_data =0;&lt;br /&gt;
&lt;br /&gt;
	if(lcdBusyWait())				// wait until LCD not busy or time out&lt;br /&gt;
	{			&lt;br /&gt;
		outb(LCD_DATA_PORT, inb(LCD_DATA_PORT)|0xF0);	// set pull-ups to on (4bit)&lt;br /&gt;
		outb(LCD_DATA_DDR, inb(LCD_DATA_DDR)&amp;amp;0x0F);	// set data I/O lines to input (4bit)&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_RS);				// set RS to &amp;quot;data&amp;quot;&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_RW);				// set R/W to &amp;quot;read&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		r_data = inb(LCD_DATA_PIN)&amp;amp;0xF0;		// input data, high 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		SETBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// set &amp;quot;E&amp;quot; line&lt;br /&gt;
		LCD_DELAY;							// wait&lt;br /&gt;
		r_data |= inb(LCD_DATA_PIN)&amp;gt;&amp;gt;4;		// input data, low 4 bits&lt;br /&gt;
		CLEARBIT(LCD_CTRL_PORT, LCD_CTRL_E);	// clear &amp;quot;E&amp;quot; line&lt;br /&gt;
		&lt;br /&gt;
	}	&lt;br /&gt;
	//	leave data lines in input mode so they can be most easily used for other purposes&lt;br /&gt;
	return r_data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
void delay_ms(unsigned int ms)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int index;&lt;br /&gt;
&lt;br /&gt;
  while (ms)&lt;br /&gt;
  {&lt;br /&gt;
   index = F_CPU / 5000;    // vypocitajte, kolko treba, aby sme dostali 1ms!!&lt;br /&gt;
        &lt;br /&gt;
   while (index)&lt;br /&gt;
   {&lt;br /&gt;
    asm volatile (&amp;quot;nop&amp;quot;);&lt;br /&gt;
    index--;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   ms--;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Balogh</name></author>
	</entry>
</feed>