som v tom ze podporuje HD44780 ci ako sa to vola tj aj 4bit komunikaciu …<<<< ???
velmi sa neskomplikuje. ak sa bavime o mojej verzii tak poslel 8bit slovo do radica…
unsigned char r1=0;
#define bsf_RS (bsfr(0))
#define bsf_E (bsfr(2))
#define bsf_RW (bsfr(1))
#define bsf_DB4 (bsfr(4))
#define bsf_DB5 (bsfr(5))
#define bsf_DB6 (bsfr(6))
#define bsf_DB7 (bsfr(7))
#define bcf_RS (bcfr(0))
#define bcf_E (bcfr(2))
#define bcf_RW (bcfr(1))
#define bcf_DB4 (bcfr(4))
#define bcf_DB5 (bcfr(5))
#define bcf_DB6 (bcfr(6))
#define bcf_DB7 (bcfr(7))
#define ledoff (bsfr(3));
#define ledon (bcfr(3));
#define bsfr(pins) r1 |= 1<<pins //nastav bit
#define bcfr(pins) r1 &= ~(1<<pins) //nuluj bit
#define bsf_clk (bsf(PORTD,PD1))
#define bsf_dat (bsf(PORTD,PD2))
//#define bsf_str (bsf(PORTD,PD0))
#define bsf_str (bsf(PORTB,PB6))
#define bcf_clk (bcf(PORTD,PD1))
#define bcf_dat (bcf(PORTD,PD2))
//#define bcf_str (bcf(PORTD,PD0))
#define bcf_str (bcf(PORTB,PB6))
#define bsf(port,pin) port |= 1<<pin //nastav bit
#define bcf(port,pin) port &= ~(1<<pin) //nuluj bit
#define negb(port,pin) port ^= 1<<pin //neguj bit
#define wrcmd(data) (bcf_RS);wrdata(data)
unsigned char cmd=2;
//;LCD********
void prenosLCD (void) //;prenosLCD
{
unsigned char a;
for(a=0b10000000;a>0;a>>=1)
{
bcf_clk;
bcf_dat;
if (r1&a)
bsf_dat;
bsf_clk;
}
bsf_str;
_delay_us(2);
bcf_str;
_delay_us(2);
return;
}
//++++++++++++++ podprogram prenosu do lcd ++++++++++++++++
void wrdata(unsigned char data)
{ unsigned char a,i=0b10000000;
for (a=0;a<cmd;a++)
{
bcf_DB4;
bcf_DB5;
bcf_DB6;
bcf_DB7;
if (i&data) bsf_DB7;
i>>=1;
if (i&data) bsf_DB6;
i>>=1;
if (i&data) bsf_DB5;
i>>=1;
if (i&data)bsf_DB4;
i>>=1;
bsf_E;
prenosLCD();
bcf_E;
prenosLCD();
}
_delay_us(40);
bsf_RS;
return;
}
//*********************************************************************
//---------------------------------------------------------------------
void inilcd (void)
{ _delay_ms(15);
cmd=1;
wrcmd(0x20); //4 bit comunikacia
cmd=2;
wrcmd(0x28); //5x7,2 riadky
wrcmd(0x01); //zmaze displey
_delay_ms(4);
wrcmd(0x0C); //zapne displey
wrcmd(0x06); //normlny mod inkrement.
_delay_ms(4);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++