Добрый вечер!
Подскажите пожалуйста, есть пример, который работает замечательно... Но не могу разобраться только в одном...
Вывод D/C (Data/Command) как работает? Как я понял, если на нем 0, то передаются данные, а если 1, то передаются комманды...
Так вот при инициализации дисплея задаются команды и на выводе 1... но почему когда передается символ, то на этот вывод опять таки подается 1...Зачем нужен режим DATA? Что происходит когда на этот вывод подаем 0? обьясните пожалуйста... Пример кода прикладываю...
Раздел: AVR
Подскажите пожалуйста, есть пример, который работает замечательно... Но не могу разобраться только в одном...
Вывод 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