Работа Экрана Nokia 5110 С Atmega8

8-09-2014, 14:48 От: admin Посмотрели: 856
Добрый вечер!

Подскажите пожалуйста, есть пример, который работает замечательно... Но не могу разобраться только в одном...

Вывод D/C (Data/Command) как работает? Как я понял, если на нем 0, то передаются данные, а если 1, то передаются комманды...

Так вот при инициализации дисплея задаются команды и на выводе 1... но почему когда передается символ, то на этот вывод опять таки подается 1...Зачем нужен режим DATA? Что происходит когда на этот вывод подаем 0? обьясните пожалуйста... Пример кода прикладываю...




#define LCD_RST_set PORTD |= (1<<0) //external reset input
#define LCD_RST_clr PORTD &=~ (1<<0)

#define LCD_DC_set PORTD |= (1<<1) //data/commande
#define LCD_DC_clr PORTD &=~ (1<<1)

#define SDIN_set PORTD |= (1<<2) //serial data input
#define SDIN_clr PORTD &=~ (1<<2)

#define SCLK_set PORTD |= (1<<3) //serial clock input
#define SCLK_clr PORTD &= ~(1<<3)

#include <io.h>
#include <delay.h>
#include "english_font.h"

void LCD_write_byte(unsigned char dat, unsigned char command);
void LCD_init();
void LCD_clear();
void LCD_set_XY(unsigned char X, unsigned char Y);
void LCD_write_char(unsigned char c);
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);

void main(void)
{
DDRD = 0x0F;

LCD_init(); //LCD initialization

LCD_write_english_string(0,0," Hello World ! ");
LCD_write_english_string(0,1," bananas ");
LCD_write_english_string(0,2,"dancing potato");
LCD_write_english_string(0,3," tomato");
LCD_write_english_string(0,4," with love ");
LCD_write_english_string(0,5," from 4a4ik ");


while(1)
{
}
}

void LCD_write_byte(unsigned char dat, unsigned char command)
{
unsigned char i;

if (command == 0)
LCD_DC_clr;
else
LCD_DC_set;

for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN_set;
else
SDIN_clr;
SCLK_clr;
SCLK_set;
dat = dat << 1;

}
}

void LCD_init()
{
LCD_RST_clr;
delay_us(1);
LCD_RST_set;

delay_us(1);

LCD_write_byte(0x21, 1); // set LCD mode
LCD_write_byte(0xc8, 1); // set bias voltage
LCD_write_byte(0x06, 1); // temperature correction
LCD_write_byte(0x13, 1); // 1:48
LCD_write_byte(0x20, 1); // use bias command, vertical
LCD_write_byte(0x0c, 1); // set LCD mode,display normally
LCD_clear(); // clear the LCD
}

void LCD_clear()
{
unsigned int i;

LCD_write_byte(0x0c, 0);
LCD_write_byte(0x80, 0);

for (i=0; i<504; i++)
{
LCD_write_byte(0x00, 1);
}
}

void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0); // column
LCD_write_byte(0x80 | X, 0); // row
}

void LCD_write_char(unsigned char c)
{
unsigned char line;

c -= 32;

for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);
}

void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
LCD_set_XY(X,Y);
while (*s)
{
LCD_write_char(*s);
s++;
}
}

Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Работа Экрана Nokia 5110 С Atmega8 все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
avatar

4a4ik

24 октября 2014 15:11 | Гости | |

Это мой код, там была ошибка, я перепутал 0 и 1.
Потом исправил
http://4a4ik.blogspot.com/2014/07/nokia-5110-lcd.html

команды лог 0
дата лог 1

дата это символы.

Могли спросить и в комментариях.

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031