27,373
社区成员
发帖
与我相关
我的任务
分享
#define DATA_PORT PORTB //数据端口为PB口
//cs1-->portd3
//cs2-->portd4
//rs -->portd5
//rw -->portd6
//e -->portd7
void lcd_WCMDL(unsigned char command)
{
PORTD&=0b10011111; //rs=rw=0
PORTD|=0b00001000; //cs1=1
PORTD&=0b11101111; //cs2=0
DATA_PORT=command; //data out
PORTD|=0b10000000; //e=1
wait;
PORTD&=0b01111111; //e=0
wait;
}
void lcd_WDL(unsigned char lcd_data)
{
PORTD|=0b00100000; //rs=1
PORTD&=0b10111111; //rw=0
PORTD|=0b00001000; //cs1=1
PORTD&=0b11101111; //cs2=0
DATA_PORT=lcd_data; //data out
PORTD|=0b10000000; //e=1
wait;
PORTD&=0b01111111; //e=0
wait;
PORTD&=0b11100111;//---> cs1=cs2=0;
}
void lcd_WCMDR(unsigned char command)
{
PORTD&=0b10011111; //rs=rw=0
PORTD&=0b11110111; //cs1=0
PORTD|=0b00010000; //cs2=1
DATA_PORT=command; //data out
PORTD|=0b10000000; //e=1
wait;
PORTD&=0b01111111; //e=0
wait;
}
void lcd_WDR(unsigned char lcd_data)
{
PORTD|=0b00100000; //rs=1
PORTD&=0b10111111; //rw=0
PORTD&=0b11110111; //cs1=0
PORTD|=0b00010000; //cs2=1
DATA_PORT=lcd_data; //data out
PORTD|=0b10000000; //e=1
wait;
PORTD&=0b01111111; //e=0
wait;
PORTD|=0b00011000;//--->cs1=cs2=1;
}
//lcd 初始化
void lcd_init(void)
{
lcd_WCMDL(0x3f);
lcd_WCMDL(0xc0);
lcd_WCMDR(0x3f);
lcd_WCMDR(0xc0);
}
void lcd_wrch(unsigned char x,unsigned char y,unsigned char dd)
{
PORTD&=0b11100111;//---> cs1=cs2=0;
if (x<64)
{
lcd_WCMDL(0xb8|y);//DATA_PORT=0xb8|y; //data out
lcd_WCMDL(0x40|x);//DATA_PORT=0x40|x; //data out
lcd_WDL(dd); //data out
}
else
{ x=x-64;
lcd_WCMDR(0xb8|y);//DATA_PORT=0xb8|y; //data out
lcd_WCMDR(0x40|x);//DATA_PORT=0x40|x; //data out
lcd_WDR(dd); //data out
}
}
void lcd_clear(void)
{
unsigned char x,y;
for (y=0;y<8;y++)
for(x=0;x<128;x++)
lcd_wrch(x,y,0x00);
}