📄 lcd_driver.c
字号:
/*
LCD Driver For TG19264A-02
arkuo Write at 2008/08/25
*/
#include "KeyDisplay.h"
signed char CharDisplay(unsigned char,unsigned char,unsigned char __flash *,unsigned char,unsigned char);
signed char lcd_display(unsigned char,unsigned char,unsigned char);
void DisplayClear(void);
void write_instruction_cs1(unsigned char data);
void write_data_cs1(unsigned char data);
void X_write_data_cs1(unsigned char data);
void write_instruction_cs2(unsigned char data);
void write_data_cs2(unsigned char data);
void X_write_data_cs2(unsigned char data);
void write_instruction_cs3(unsigned char data);
void write_data_cs3(unsigned char data);
void X_write_data_cs3(unsigned char data);
void busy_check(unsigned char);
extern void Watchdog(void);
/******************************LCD显示清屏子程序**********************************/
void DisplayClear(void)
{
unsigned char page;
unsigned char line;
for(page = 0;page < 8;page ++)
for(line = 0;line < 192;line ++)
lcd_display(line,page,0x00);
}
void DisplayClear2(void)
{
unsigned char page;
unsigned char line;
for(page = 2;page < 8;page ++)
for(line = 0;line < 192;line ++)
lcd_display(line,page,0x00);
}
/***************************字符显示子程序***************************/
/*
调用格式:Page为显示Y页坐标,Line为显示X行坐标,*TableAddress为查表首地址,BCase为0时表示半角显示,非0时表示全角显示,
Size表示所显示的字符个数,按顺序排列。
*/
signed char CharDisplay(unsigned char Page,unsigned char Line,unsigned char __flash *TableAddress,unsigned char BCase,unsigned char Size)
{
unsigned char LineTotal;
unsigned char LineTemp,CountTemp;
if(BCase)
BCase = 16; /*全角显示 */
else
BCase = 8; /*半角显示 */
LineTotal = BCase;
CountTemp = 0;
if(Line >= 192 || Page > 7) /*地址超出允许范围 */
return(-1);
else
;
do
{
if(LineTotal == BCase)
LineTemp = Line;
else
;
if(Line < 64) /*Chip1 */
{
write_instruction_cs1(Page | 0x0b8);/*页面地址设定,Page = 1011 1XXX */
write_instruction_cs1(Line | 0x40); /*X列地址设定,01XX XXXX */
for(;Line<64 && LineTotal>0;Line++,LineTotal--)
write_data_cs1(*(TableAddress++));
}
else if(Line >= 64 && Line < 128) /*Chip2 */
{
write_instruction_cs2(Page | 0x0b8);/*页面地址设定,Page = 1011 1XXX */
write_instruction_cs2((Line-64) | 0x40); /*X列地址设定,01XX XXXX */
for(;Line<128 && LineTotal>0;Line++,LineTotal--)
write_data_cs2(*(TableAddress++));
}
else if(Line >= 128 && Line+LineTotal <= 192) /*Chip3 */
{
write_instruction_cs3(Page | 0x0b8); /*页面地址设定,Page = 1011 1XXX */
write_instruction_cs3((Line-128) | 0x40); /*X列地址设定,01XX XXXX */
for(;Line<192 && LineTotal>0;Line++,LineTotal--)
write_data_cs3(*(TableAddress++));
}
else
;
if(LineTotal == 0 && CountTemp == 0 && Page < 7) /*写下半行 */
{
Watchdog();
Page++;
CountTemp++;
LineTotal = BCase;
Line = LineTemp;
}
else if(LineTotal == 0 && CountTemp == 0 && Page == 7 && Line+BCase <= 192) /*行数不够,只写上半行*/
{
TableAddress += BCase;
LineTotal = BCase;
Size--;
}
else if(LineTotal == 0 && CountTemp > 0 && Line+BCase <= 192) /*返回写上半行 */
{
Watchdog();
Page--;
CountTemp = 0;
LineTotal = BCase;
Size--;
}
else if(LineTotal == 0 && CountTemp > 0 && Line+BCase > 192 && Page < 7) /*写下一行字符*/
{
Watchdog();
Page++;
LineTotal = BCase;
CountTemp = 0;
Line = 0;
Size--;
}
else if(Line+BCase >= 192 && Page >= 7) /*显示溢出 */
break;
else
;
}while(Size > 0);
return(1);
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
signed char X_CharDisplay(unsigned char X_Page,unsigned char X_Line,unsigned char __flash *X_TableAddress,unsigned char X_BCase,unsigned char X_Size)
{
unsigned char X_LineTotal;
unsigned char X_LineTemp,CountTemp;
if(X_BCase)
X_BCase = 16; /*全角显示 */
else
X_BCase = 8; /*半角显示 */
X_LineTotal = X_BCase;
CountTemp = 0;
if(X_Line >= 192 || X_Page > 7) /*地址超出允许范围 */
return(-1);
else
;
do
{
if(X_LineTotal == X_BCase)
X_LineTemp = X_Line;
else
;
if(X_Line < 64) /*Chip1 */
{
write_instruction_cs1(X_Page | 0x0b8);/*页面地址设定,X_Page = 1011 1XXX */
write_instruction_cs1(X_Line | 0x40); /*X列地址设定,01XX XXXX */
for(;X_Line<64 && X_LineTotal>0;X_Line++,X_LineTotal--)
X_write_data_cs1(*(X_TableAddress++));
}
else if(X_Line >= 64 && X_Line < 128) /*Chip2 */
{
write_instruction_cs2(X_Page | 0x0b8);/*页面地址设定,X_Page = 1011 1XXX */
write_instruction_cs2((X_Line-64) | 0x40); /*X列地址设定,01XX XXXX */
for(;X_Line<128 && X_LineTotal>0;X_Line++,X_LineTotal--)
X_write_data_cs2(*(X_TableAddress++));
}
else if(X_Line >= 128 && X_Line+X_LineTotal <= 192) /*Chip3 */
{
write_instruction_cs3(X_Page | 0x0b8); /*页面地址设定,X_Page = 1011 1XXX */
write_instruction_cs3((X_Line-128) | 0x40); /*X列地址设定,01XX XXXX */
for(;X_Line<192 && X_LineTotal>0;X_Line++,X_LineTotal--)
X_write_data_cs3(*(X_TableAddress++));
}
else
;
if(X_LineTotal == 0 && CountTemp == 0 && X_Page < 7) /*写下半行 */
{
Watchdog();
X_Page++;
CountTemp++;
X_LineTotal = X_BCase;
X_Line = X_LineTemp;
}
else if(X_LineTotal == 0 && CountTemp == 0 && X_Page == 7 && X_Line+X_BCase <= 192) /*行数不够,只写上半行*/
{
X_TableAddress += X_BCase;
X_LineTotal = X_BCase;
X_Size--;
}
else if(X_LineTotal == 0 && CountTemp > 0 && X_Line+X_BCase <= 192) /*返回写上半行 */
{
Watchdog();
X_Page--;
CountTemp = 0;
X_LineTotal = X_BCase;
X_Size--;
}
else if(X_LineTotal == 0 && CountTemp > 0 && X_Line+X_BCase > 192 && X_Page < 7) /*写下一行字符*/
{
Watchdog();
X_Page++;
X_LineTotal = X_BCase;
CountTemp = 0;
X_Line = 0;
X_Size--;
}
else if(X_Line+X_BCase >= 192 && X_Page >= 7) /*显示溢出 */
break;
else
;
}while(X_Size > 0);
return(1);
}
/*********************LCD显示数据写入子程序(非查表字符)***************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -