⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t6963驱动.h

📁 C语言编写的T6963驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
    	}
    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 + -