📄 t6963驱动.h
字号:
}
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
ShowPageSet(Page0);
WrLcdCmd(LCD_DIS_SW | 0x0c); // 显示开关设置
}
/************************************************
*函数名称:画点函数
*功能描述:Dot为点的颜色,WhiteDot为白色BlackDot为黑色
************************************************/
#define BlackDot 0x08
#define WhiteDot 0x00
void point(uchar x,uchar y,uchar Dot,uchar Page)
{
uchar code turnf[8] = {7,6,5,4,3,2,1,0};//画点时对应的字节单元的位
uchar x1;
x-=1;y-=1;
x1 = x >> 3; // X地址除8计算出X的实际地质地址
ShowAddrSet(y,x1,Page); // 设置地址
x1 = 0xF0 | (turnf[ x & 0x07 ]) | Dot;//点数据对应的字节位置计算
WrLcdCmd(x1); //T6963位操作命令
}
/************************************************
*函数名称:清显示区函数(以点方式清楚)
*功能描述:x,y为坐标,w,h为宽度与高度,Dot为点的颜色White或Black
Page为要清除的显示页号
************************************************/
void ClearShowBit(uchar x,uchar y,uchar Dot,uchar Page,uchar w,uchar h)
{
uchar w1,x1;
x1=x;
for(;h!=0;h--,y++)
{
x=x1;
for(w1=w;w1!=0;w1--,x++)
{
point(x,y,Dot,Page);
}
}
}
/************************************************
*函数名称:清显示区函数(以字节方式清楚)
*功能描述:x,y为坐标,w,h为宽度与高度,Dot为点的颜色White或Black
Page为要清除的显示页号
************************************************/
void ClearShow(uchar x,uchar y,uchar Dot,uchar Page,uchar w,uchar h)
{
uchar w1;
x-=1;y-=1;
for(;h!=0;h--,y++)
{
ShowAddrSet(y,x,Page); // 设置地址
WrLcdCmd(LCD_AUT_WR); // 自动写
for(w1=w;w1!=0;w1--)
{
if(Dot!=0)Dot=0xff;
WrLcdData(Dot);// 写数据0x0
}
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
}
}
/************************************************
*函数名称:任意画线函数
*功能描述:StartX,StartY为线的水平和垂直起点变量,EndX,EndY为线的水平和垂直重点变量
************************************************/
void Linexy(uchar StartX,uchar EndX,uchar StartY,uchar EndY,uchar Dot,uchar Page)
{
register uchar t;
int xerr = 0,yerr = 0;
int delta_x,delta_y,distance;
int incx,incy,TempX,TempY;
delta_x = EndX-StartX;
delta_y = EndY-StartY;
TempX = StartX;
TempY = StartY;
if(delta_x>0)incx = 1;
else if( delta_x==0 )incx=0;
else
{
incx = -1;
delta_x = -delta_x;
}
if(delta_y>0)incy=1;
else if( delta_y==0 )incy=0;
else
{
incy=-1;
delta_y=-delta_y;
}
if( delta_x > delta_y )distance=delta_x;
else distance=delta_y;
for( t=0;t <= distance+1; t++ )
{
point(TempX,TempY,Dot,Page);
xerr += delta_x;
yerr += delta_y;
if( xerr > distance )
{
xerr -= distance;
TempX += incx;
}
if( yerr > distance )
{
yerr -= distance;
TempY += incy;
}
}
}
/************************************************
*函数名称:画圆
*功能描述:CoreX圆心的x坐标,CoreY圆心的y坐标,Dia直径,Dot点颜色
************************************************/
void circle(uchar CoreX,uchar CoreY,uchar Dia,uchar Dot,uchar Page)
{
uint xx,rr;
uint xt,yt;
uint rs,X,Y;
yt = Dia;
rr = (uint)Dia*Dia+1; // 补偿1 修正方形
rs = (yt+(yt>>1))>>1; // (*0.75)分开1/8圆弧画
for (xt=0;xt<=rs;xt++)
{
xx = xt*xt;
while ((yt*yt)>(rr-xx))yt--;
X = CoreX+xt,Y = CoreY-yt;
point(X,Y,Dot,Page);
X = CoreX-xt;
point(X,Y,Dot,Page);
Y = CoreY+yt;
point(X,Y,Dot,Page);
X = CoreX+xt;
point(X,Y,Dot,Page);
X = CoreX+yt,Y = CoreY-xt;
point(X,Y,Dot,Page);
X = CoreX-yt;
point(X,Y,Dot,Page);
Y = CoreY+xt;
point(X,Y,Dot,Page);
X = CoreX+yt;
point(X,Y,Dot,Page);
}
}
/************************************************
*函数名称:点阵图形写入函数
*功能描述:
************************************************/
void WrDotImage(uchar x,uchar y,uchar *Pointer,uchar Dot,uchar Page)
{
uchar ShowData,Temp,Temp1,Temp2,Temp3,Width,High;
Width=*Pointer++;
High=*Pointer++;
Temp3=x;//保存X原始值
for(;High!=0;High--,y++)
{
x=Temp3;
for(Temp=Width;Temp!=0;)
{
ShowData=*Pointer++;
if(Dot==BlackDot)ShowData=~ShowData;
for(Temp1=8;Temp1!=0;Temp1--,Temp--)
{
Temp2=ShowData&0X80;
if(Temp2)point(x,y,WhiteDot,Page);//写入一个点
else point(x,y,BlackDot,Page);//Lcd_parallel_wr_dot(1,1,Black);
ShowData<<=1;
x++;
}
}
}
}
/************************************************
*函数名称:字节图形写入函数
*功能描述:
************************************************/
void WrByteImage(uchar x,uchar y,uchar *Pointer,uchar Dot,uchar Page)
{
uchar ShowData,Temp,Width,High;
x-=1;y-=1;
Width=*Pointer++>>3;
High=*Pointer++;
for(;High!=0;High--,y++)
{
ShowAddrSet(y,x,Page); // 设置地址
WrLcdCmd(LCD_AUT_WR); // 自动写
for(Temp=Width;Temp!=0;Temp--)
{
ShowData=*Pointer++;
if(Dot!=0)ShowData=~ShowData;
WrLcdData(ShowData);// 写数据
}
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
}
}
/************************************************
*函数名称:面页拷贝函数
*功能描述:
************************************************/
#define CopyTime 10
#define LoopTime 30*128/CopyTime
void CopyByteImage(uchar RdPage,uchar WrPage)
{
uchar TempData[CopyTime];
uchar i;
uint Times=LoopTime;
uint LcdIramAddr1,LcdIramAddr2;
if(RdPage>7)return;
LcdIramAddr1=RdPage*0xf00;
LcdIramAddr2=WrPage*0xf00;
while(Times--)
{
WrDparCmd(LCD_ADD_POS,LcdIramAddr1 & 0xFF,LcdIramAddr1/256);// 设置地址
WrLcdCmd(LCD_AUT_RD);
for(i=0;i<CopyTime;i++)
{
TempData[i]=RdLcdData();//读出数据
}
LcdIramAddr1+=CopyTime;
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
WrDparCmd(LCD_ADD_POS,LcdIramAddr2 & 0xFF,LcdIramAddr2/256);
WrLcdCmd(LCD_AUT_WR);
for(i=0;i<CopyTime;i++)
{
WrLcdData(TempData[i]);
}
LcdIramAddr2+=CopyTime;
WrLcdCmd(LCD_AUT_OVR); // 自动写结束
}
}
/************************************************
*函数名称:菜单位置计算函数
*功能描述:
************************************************/
uint MenuAddrC(uchar Temp,uchar *Point)
{
uchar White,Hight;
uint Times;
Times=0;
for(;Temp!=0;Temp--)
{
White=*Point++>>3;
Hight=*Point++;
Times+=White*Hight+2;
Point+=White*Hight;
}
return(Times);
}
/*************************************************
*函数名称:创建信息窗口
*************************************************/
void FoundMessageWindow(uchar CopyPage,uchar FoundPage)
{
CopyByteImage(CopyPage,FoundPage);
ClearShow(9,39,BlackDot, FoundPage,13,50);//104*50信息窗口
Linexy(66,167,40,40,WhiteDot, FoundPage);
Linexy(66,167,87,87,WhiteDot, FoundPage);
Linexy(66,66,40,87,WhiteDot, FoundPage);
Linexy(167,167,40,87,WhiteDot, FoundPage);
ShowPageSet(FoundPage);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -