📄 lcd_driver.c
字号:
signed char lcd_display(unsigned char x,unsigned char y,unsigned char data)
{
if(x >= 192 || y > 7) /*地址超出允许范围 */
return(-1);
else
;
y = y | 0x0b8; /*y = 1011 1XXX */
if(x < 64) /*Chip1 */
{
write_instruction_cs1(y); /*页面地址设定 */
write_instruction_cs1(x | 0x40); /*X列地址设定,01XX XXXX */
write_data_cs1(data);
}
else if(x >= 64 && x < 128) /*Chip2 */
{
write_instruction_cs2(y); /*页面地址设定 */
write_instruction_cs2((x-64) | 0x40); /*X列地址设定,01XX XXXX */
write_data_cs2(data);
}
else /*Chip3 */
{
write_instruction_cs3(y); /*页面地址设定 */
write_instruction_cs3((x-128) | 0x40); /*X列地址设定,01XX XXXX */
write_data_cs3(data);
}
return(1);
}
/******************************LCD显示驱动子程序**********************************/
void write_instruction_cs1(unsigned char data)
{
busy_check(1); /*CS1忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 0; /*DI=0 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable1 = 1; /*CS1=1 */
}
void write_instruction_cs2(unsigned char data)
{
busy_check(2); /*CS2忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 0; /*DI=0 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable2 = 1; /*CS2=1 */
}
void write_instruction_cs3(unsigned char data)
{
busy_check(3); /*CS3忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 0; /*DI=0 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable3 = 1; /*CS3=1 */
}
void write_data_cs1(unsigned char data)
{
busy_check(1); /*CS1忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable1 = 1; /*CS1=1 */
}
void write_data_cs2(unsigned char data)
{
busy_check(2); /*CS2忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable2 = 1; /*CS2=1 */
}
void write_data_cs3(unsigned char data)
{
busy_check(3); /*CS3忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
lcd_data = data;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable3 = 1; /*CS3=1 */
}
void busy_check(unsigned char flag)
{
lcd_data_dir = 0x00;
lcd_data = 0x0ff; /*lcd_data置成输入口并置位上拉电阻 */
switch(flag)
{
case 1:
do
{
lcd_rw = 1; /*RW=1 */
lcd_enable1 = 0; /*CS1=0 */
lcd_DI = 0; /*DI=0 */
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
}while(busy);
break;
case 2:
do
{
lcd_rw = 1; /*RW=1 */
lcd_enable2 = 0; /*CS2=0 */
lcd_DI = 0; /*DI=0 */
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
}while(busy);
break;
case 3:
do
{
lcd_rw = 1; /*RW=1 */
lcd_enable3 = 0; /*CS3=0 */
lcd_DI = 0; /*DI=0 */
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
}while(busy);
break;
default:
break;
}
lcd_data_dir = 0x0ff; /*lcd_data恢复为输出口 */
}
//***************************************************************************************
void X_write_data_cs1(unsigned char data)
{
unsigned char i;
busy_check(1); /*CS1忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
i=data;
lcd_data = ~i;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable1 = 1; /*CS1=1 */
}
void X_write_data_cs2(unsigned char data)
{
unsigned char i;
busy_check(2); /*CS2忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
i=data;
lcd_data = ~i;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable2 = 1; /*CS2=1 */
}
void X_write_data_cs3(unsigned char data)
{
unsigned char i;
busy_check(3); /*CS3忙碌状态检查 */
lcd_rw = 0; /*RW=0 */
lcd_DI = 1; /*DI=1 */
i=data;
lcd_data = ~i;
lcd_DataEnable = 1; /*lcd_DataEnable = 1 */
Watchdog();
lcd_DataEnable = 0; /*lcd_DataEnable = 0 */
lcd_rw = 1; /*RW=1 */
lcd_enable3 = 1; /*CS3=1 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -