Сообщение от
eclipsevl
Alex, выше - что ?
#20
Сообщение от
Grigori G.
Этот лсд надо для начала проверить, например вывести на него слово в верхнюю строчку и в нижнюю строчку. Как это сделать в CVAVR или WinAVR? Простейший код?
Как в этих - не знаю, а вообще так (это для 4-х битного режима и 16х2, так что, в любом случае на 8х2 что-то увидишь. Лень мне смотреть что надо для 8х2 изменить в инициализации).
Код:
#define DelayUs(x) { тут надо написать процедуру задержки в Х мкс. }
void Delay5ms(void){
byte i;
for (i=20; i>0; i--) DelayUs(250);
}
//------------------------------------------------------------------
#define EN PD2
#define RS PD0
#define PDATA PORTD
#define Strobe EN=1; asm("nop"); asm("nop");EN=0;
#define CStrobe RS=0; asm("nop"); asm("nop"); Strobe; Delay5ms();
#define DStrobe RS=1; asm("nop"); asm("nop"); Strobe; DelayUs(60);
//------------------------------------------------------------------
void putch (char DAT){ // use low nibble
byte tmp;
tmp = DAT & 0xF0; // use high nibble
PDATA = tmp ; DStrobe; // sent high nibble first
PDATA = ((DAT<<4) & 0xF0) ; DStrobe; // send low nibble
}
void WriteWCMD(byte DAT){ // use high nibble
byte tmp;
tmp = DAT & 0xF0; // use high nibble
PDATA = tmp;
CStrobe; // sent high nibble first
Delay5ms();
PDATA = ((DAT<<4) & 0xF0);
CStrobe; // send low nibble
}
//-------------------------------------------------------
#define lcd_blank() WriteWCMD(0x01);
//-------------------------------------------------------
void lcd_init(void){ // Initialise the LCD Display.
byte i;
Delay5ms();Delay5ms();Delay5ms();
// data length is 8 at this point
WriteWCMD(0x33); //set data length to 8
WriteWCMD(0x32); // do that a number of times to make SURE
WriteWCMD(0x28); // 4 bit, 2 lines, 5x7 dots
//"Mode set, display shift, inc address"
WriteWCMD(0x06); //
//"Set display ON, cursor OFF, blink OFF"
WriteWCMD(0x0C); //0C-0E 0000 1100
//"Reset and blank display"
WriteWCMD(0x01);
}
//-----------------------------------------------------
void putstr (const char const * ptr){
char c, i=0;
while (c = ptr[i++]) putch(c);
}
void printi(byte i){
byte d = 100;
char c;
do {
c = i/d+*0*;
putch(c);
i %= d; d /= 10;
} while (d > 0);
}
//////////////////////////////////////////
....
putstr ("Hello world ");
printi (123);
....
Социальные закладки