📄 lcd._c
字号:
DDRA&=0x03;
DDRC&=0XFC;
}
//向lcd_cs1写数据函数
void lcd_wr1_data (unsigned char lcd_wr_buffer)
{
unsigned char lcd_wr_temp;
e_off; //读lcd状态
rw_on;
di_off;
cs1_on;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs1_off;
while(lcd_wr_temp&0x90)
{
e_off; //读lcd状态
rw_on;
di_off;
cs1_on;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs1_off;
}
e_off; //向lcd写数据
rw_off;
di_on;
cs1_on;
PORTA&=0x03;
PORTA|=(lcd_wr_buffer&0xFC);
PORTC&=0xFC;
PORTC|=(lcd_wr_buffer&0x03);
DDRA|=0xFC;
DDRC|=0X03;
e_on;
NOP();
NOP();
NOP();
NOP();
e_off;
cs1_off;
NOP();
NOP();
DDRA&=0x03;
DDRC&=0XFC;
}
//写lcd的cs2命令寄存器函数
void lcd_wr2_ins (unsigned char lcd_wr_buffer)
{
unsigned char lcd_wr_temp;
e_off; //读lcd状态
rw_on;
di_off;
cs2_on;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs2_off;
while(lcd_wr_temp&0x90)
{
e_off; //读lcd状态
rw_on;
di_off;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs2_off;
}
e_off; //写lcd命令
rw_off;
di_off;
cs2_on;
PORTA&=0x03;
PORTA|=(lcd_wr_buffer&0xFC);
PORTC&=0xFC;
PORTC|=(lcd_wr_buffer&0x03);
DDRA|=0xFC;
DDRC|=0X03;
e_on;
NOP();
NOP();
NOP();
NOP();
e_off;
cs2_off;
NOP();
NOP();
DDRA&=0x03;
DDRC&=0XFC;
}
//向lcd_cs2写数据函数
void lcd_wr2_data (unsigned char lcd_wr_buffer)
{
unsigned char lcd_wr_temp;
e_off; //读lcd状态
rw_on;
di_off;
cs2_on;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs2_off;
while(lcd_wr_temp&0x90)
{
e_off; //读lcd状态
rw_on;
di_off;
cs2_on;
DDRA&=0x03;
PORTA&=0x03;
DDRC&=0xFC;
PORTC&=0xFC;
e_on;
NOP();
NOP();
NOP();
lcd_wr_temp=(PINA&0XFC);
lcd_wr_temp|=(PINC&0x03);
e_off;
cs2_off;
}
e_off; //向lcd写数据
rw_off;
di_on;
cs2_on;
PORTA&=0x03;
PORTA|=(lcd_wr_buffer&0xFC);
PORTC&=0xFC;
PORTC|=(lcd_wr_buffer&0x03);
DDRA|=0xFC;
DDRC|=0X03;
e_on;
NOP();
NOP();
NOP();
NOP();
e_off;
cs2_off;
NOP();
NOP();
DDRA&=0x03;
DDRC&=0XFC;
}
//LCD显示刷屏函数,起始地址放在lcd_display2_buffer[0][0]中
//使用的全局变量:*lcd_display_rdp;
//API function
void lcd_display2(void)
{
const unsigned char *asc_rdp;
unsigned char lcd_row_counter;
unsigned char lcd_column_counter;
unsigned char lcd_asc;
unsigned char lcd_asc_column;
unsigned char lcd_buffer1;
unsigned char lcd_invter;
lcd_wr1_ins(0xc0); //显示起始行为0
lcd_wr2_ins(0xc0); //显示起始行为0
*lcd_display_rdp=lcd_display2_buffer[0][0];
for (lcd_row_counter=0;lcd_row_counter<=7;lcd_row_counter++) //显示的0~7行循环计数
{
lcd_wr1_ins(lcd_row_counter+0xb8); //设置x页地址
lcd_wr2_ins(lcd_row_counter+0xb8); //设置x页地址
lcd_wr1_ins(0x40); //y地址清零
lcd_wr2_ins(0x40); //y地址清零
for (lcd_column_counter=0;lcd_column_counter<=9;lcd_column_counter++) //显示的0~20列循环计数(cs1为0~9列)
{
lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lcd_display_rdp++;
if (lcd_asc&BIT(7))
{
lcd_invter|=BIT(0);
lcd_asc&=(~BIT(7));
}
else
{
lcd_invter&=(~BIT(0));
}
if ((lcd_asc<0x20)||(lcd_asc>=0x80))
{
lcd_asc=0x20;
}
lcd_asc=lcd_asc-0x20;
for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++) //显示的5列的循环
{
asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
if(lcd_invter&BIT(0))
{
lcd_buffer1=~lcd_buffer1;
}
lcd_wr1_data(lcd_buffer1);
}
if(lcd_invter&BIT(0))
{
lcd_wr1_data(0xff);
}
else
{
lcd_wr1_data(0x00);
}
}
lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lcd_display_rdp++;
if (lcd_asc&BIT(7))
{
lcd_invter|=BIT(0);
lcd_asc&=(~BIT(7));
}
else
{
lcd_invter&=(~BIT(0));
}
if ((lcd_asc<0x20)||(lcd_asc>=0x80))
{
lcd_asc=0x20;
}
lcd_asc=lcd_asc-0x20;
for (lcd_asc_column=0;lcd_asc_column<=0x03;lcd_asc_column++) //显示的5列的循环
{
asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
if(lcd_invter&BIT(0))
{
lcd_buffer1=~lcd_buffer1;
}
lcd_wr1_data(lcd_buffer1);
}
asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
if(lcd_invter&BIT(0))
{
lcd_buffer1=~lcd_buffer1;
}
lcd_wr2_data(lcd_buffer1);
if(lcd_invter&BIT(0))
{
lcd_wr2_data(0xff);
}
else
{
lcd_wr2_data(0x00);
}
for (lcd_column_counter=11;lcd_column_counter<=20;lcd_column_counter++) //显示的0~20列循环计数(cs2为11~20列)
{
lcd_asc=*lcd_display_rdp; //要显示的字符ASC码放在lcd_asc中
lcd_display_rdp++;
if (lcd_asc&BIT(7))
{
lcd_invter|=BIT(0);
lcd_asc&=(~BIT(7));
}
else
{
lcd_invter&=(~BIT(0));
}
if ((lcd_asc<0x20)||(lcd_asc>=0x80))
{
lcd_asc=0x20;
}
lcd_asc=lcd_asc-0x20;
for (lcd_asc_column=0;lcd_asc_column<=0x04;lcd_asc_column++) //显示的5列的循环
{
asc_rdp=&asc[lcd_asc][lcd_asc_column]; //取出当前字符的每列内容
lcd_buffer1=*asc_rdp; //要写入lcd的数据放入lcd_buffer1中
if(lcd_invter&BIT(0))
{
lcd_buffer1=~lcd_buffer1;
}
lcd_wr2_data(lcd_buffer1);
}
if(lcd_invter&BIT(0))
{
lcd_wr2_data(0xff);
}
else
{
lcd_wr2_data(0x00);
}
}
lcd_wr2_data(0x00);
lcd_wr2_data(0x00);
}
lcd_wr1_ins(0x3f); //lcd模块1显示
lcd_wr2_ins(0x3f); //lcd模块2显示
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -