📄 sc_t6963.c
字号:
{
T6963_OutData(0x00);
}
T6963_OutCommand0byte(T6963_AUTO_RESET);
}
/***************************************************************
Function: // LcdTxtLayer
Description:// 切换显示指定文本页
Input: TPage: 要显示的文本页号 (0-4)
***************************************************************/
void LcdTxtLayer(uchar TPage)
{
uint Add = T6963_TXT_HOME_ADD + TPage * T6963_TXT_PAGESIZE;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8),T6963_SET_TXT_HOME_ADD);
}
/***************************************************************
Function: // GraphLayer
Description:// 切换显示指图形页
Input: GPage: 要显示的文本页号 (0-6)
***************************************************************/
void LcdGraphLayer(uchar GPage)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8),T6963_SET_GRAPH_HOME_ADD);
}
/***************************************************************
Function: // LcdPutChar
Description:// 在屏幕指定位置显示一个字符,应用于文本模式下
8*8大小的字符
T6963自带的字库不好用,字符代码没有和ASCII码对应,显示字符需要查表.
Input: TPage: 要显示的文本页号 (0-4)
CharX: 字符显示的横坐标 0---29
CharY: 字符显示的纵坐标 0---15
uChar: 字符对应的代码,需要查表
***************************************************************/
void LcdPutChar(uchar TPage, uchar CharX,uchar CharY,uchar uChar)
{
uint Add = T6963_TXT_HOME_ADD + TPage * T6963_TXT_PAGESIZE + CharX + CharY*30;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand1byte(uChar,T6963_DATA_WRITE_NO_ADP);
}
/***************************************************************
Function: // LcdStr
Description:// 应用于文本模式下,在屏幕指定位置显示字符串
格式为 2006-09-13
Input: TPage: 要显示的文本页号 (0-4)
StrX: 字符串在屏幕上显示的横坐标 0---29
StrY: 字符串在屏幕上显示的纵坐标 0---15
uString: 字符串存储的首地址
***************************************************************/
void LcdStr(uchar TPage,uchar StrX,uchar StrY,uchar *uString)
{
uint Add = T6963_TXT_HOME_ADD + TPage * T6963_TXT_PAGESIZE + StrX + StrY*30;
uchar i;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand0byte(T6963_DATA_AUTO_WRITE);
for(i = 0; i < strlen(uString); i++)
{
T6963_OutData(*(uString+i) - 0x20);
}
T6963_OutCommand0byte(T6963_AUTO_RESET);
}
/***************************************************************
Function: // LcdClearStr
Description:// 应用于文本模式下,清除屏幕指定位置字符串
Input: TPage: 要显示的文本页号 (0-4)
StrX: 清除的字符串在屏幕上显示的横坐标 0---29
StrY: 清除的字符串在屏幕上显示的纵坐标 0---15
Length: 清除的字符串的长度
***************************************************************/
void LcdClearStr(uchar TPage,uchar StrX,uchar StrY,uchar Length)
{
uint Add = T6963_TXT_HOME_ADD + TPage * T6963_TXT_PAGESIZE + StrX + StrY*30;
uchar i;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand0byte(T6963_DATA_AUTO_WRITE);
for(i = 0;i < Length;i++)
T6963_OutData(0x00);
T6963_OutCommand0byte(T6963_AUTO_RESET);
}
/***************************************************************
Function: // LcdBmp
Description:// 在屏幕指定位置显示一个图形(汉字,字符),
应用于图形模式下
Input: GPage: 要显示的图形页号 (0-6)
BmpX: 图形显示的横坐标 0×8---29×8
BmpY: 图形显示的纵坐标 0---127
BmpWidth: 图形的宽度 1×8---30×8
BmpHeigh: 图形的高度 1---128
BmpAdd: 图形存储数组的首地址
***************************************************************/
void LcdBmp(uchar GPage, uchar BmpX, uchar BmpY, uchar* BmpAdd)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE + BmpX/8 + BmpY*30;
uchar i = 0, j = 0;
uchar BmpWidth = BmpAdd[0], BmpHeigh = BmpAdd[1];
BmpAdd+=2;
for(i = 0;i < BmpHeigh;i++)
{
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
for(j = 0;j < (BmpWidth/8);j++)
{
T6963_OutCommand1byte(*(BmpAdd),T6963_DATA_WRITE_INCRE_ADP);
BmpAdd++;
}
Add += 30;
//T6963_Delay(50);
}
}
/***************************************************************
Function: // LcdClearRect
Description:// 清除屏幕上指定的一个四边形,应用于图形模式下
Input: GPage: 要显示的图形页号 (0-6)
X: 清屏起始横坐标 0×8--29×8
Y: 清屏起始纵坐标 0--127
Rect_Width: 清屏宽度 1×8--30*8
Rect_Heigh: 清屏高度 1--128
***************************************************************/
void LcdClearRect(uchar GPage,uchar X,uchar Y,uchar Rect_Width,uchar Rect_Heigh)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE + X/8 + Y*30;
uchar i = 0, j = 0;
for(i = 0;i < Rect_Heigh;i++)
{
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
for(j = 0;j < Rect_Width/8;j++)
{
T6963_OutCommand1byte(0x00,T6963_DATA_WRITE_INCRE_ADP);
}
Add += 30;
}
}
/***************************************************************
Function: // LcdRevRect
Description:// 反显指定区域
***************************************************************/
void LcdRevRect(uchar GPage,uchar X,uchar Y,uchar Width,uchar Heigh)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE + X/8 + Y*30;
uchar i = 0, j = 0, uData = 0;
for(i = 0;i < Heigh;i++)
{
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
for(j = 0;j < Width/8;j++)
{
T6963_OutCommand0byte(T6963_DATA_READ_NO_ADP);
uData = T6963_InData();
uData = ~uData;
T6963_OutCommand1byte(uData,T6963_DATA_WRITE_INCRE_ADP);
}
Add += 30;
}
}
/***************************************************************
Function: // LcdPixel
Description:// 画点函数,应用于图形模式下
Called by: // LcdLine
Input: GPage: 要显示的图形页号 (0-6)
X: 点的横坐标
Y: 点的纵坐标
Disp: 1画该点,0清除该点
***************************************************************/
void LcdPixel(uchar GPage, uchar X,uchar Y,bit Disp)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE + X/8 + Y*30;
uchar Temp;
Temp = 0xF7 - (X%8);
if(Disp) Temp |= 0x08;
T6963_OutCommand2byte((uchar)Add, (uchar)(Add >> 8), T6963_SET_ADD_POINTER);
T6963_OutCommand0byte(Temp);
}
/***************************************************************
Function: // LcdLine
Description:// 画直线函数,应用于图形模式下
Calls: // LcdPixel
Input: GPage: 要显示的图形页号 (0-6)
X1,Y1: 第一个点的坐标
X2,Y2: 第二个点的坐标
坐标范围:(0,0)---(239,127)
Disp: 1画该直线,0清除该直线
***************************************************************/
void LcdLine(uchar GPage,uchar X1,uchar Y1,uchar X2,char Y2,bit Disp)
{
uchar i = 0;
uchar j = 0;
float k = 0; //斜率
if(X1 == X2) //k = 无穷
{
j = Y1;
do
{
LcdPixel(GPage,X1,j,Disp);
if(Y1 < Y2)
j++;
else
j--;
}while(j != Y2);
LcdPixel(GPage,X2,Y2,Disp);
}
else if(Y1 == Y2) //k = 0
{
i = X1;
do
{
LcdPixel(GPage,i,Y1,Disp);
if(X1 < X2)
i++;
else
i--;
}while(i != X2);
LcdPixel(GPage,X2,Y2,Disp);
}
else if(abs(X1-X2) < abs(Y1-Y2)) //|k| > 1
{
k = (double)(Y2-Y1) / (double)(X2-X1);
i = X1;
do
{
j = (i-X1)*k +Y1;
LcdPixel(GPage,i,j,Disp);
if(X1 < X2)
i++;
else
i--;
}while(i != X2);
LcdPixel(GPage,X2,Y2,Disp);
}
else if(abs(X1-X2) >= abs(Y1-Y2)) //|k| <= 1
{
k = (double)(X2-X1) / (double)(Y2-Y1);
j = Y1;
do
{
i = (j-Y1)*k + X1;
LcdPixel(GPage,i,j,Disp);
if(Y1 < Y2)
j++;
else
j--;
}while(j != Y2);
LcdPixel(GPage,X2,Y2,Disp);
}
}
/***************************************************************
Function: // LcdScrRoll
Description:// 滚屏函数,应用于图形模式下
Input: GPage: 要显示的图形页号 (0-6)
n:滚动的行数
***************************************************************/
void LcdScrRoll(uchar GPage,uchar n)
{
uint Add = T6963_GRAPH_HOME_ADD + GPage * T6963_GRAPH_PAGESIZE +30*n;
T6963_OutCommand2byte((uchar)(Add),(uchar)(Add >> 8),T6963_SET_GRAPH_HOME_ADD);
}
//-------------------------------------------------------------
void T6963_Delay(uchar n)
{
uchar i;
uchar j;
for(i = 0;i < n;i++)
{
for(j = 0;j < 6;j++)
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -