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

📄 t6963lib.c

📁 这个是我写的以t6963为主控芯片的显示屏的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   DrawLine(X1,Y2,X2,Y2, SetReset); 
   DrawLine(X2,Y2,X2,Y1, SetReset); 
   DrawLine(X2,Y1,X1,Y1, SetReset); 
#endif


#if LinesEnable                          // 采用第二种画线方式来画矩形 
   Lines(X1,Y1,X1,Y2); 
   Lines(X1,Y1,X2,Y1);
   Lines(X2,Y2,X1,Y2);
   Lines(X2,Y2,X2,Y1); 
#endif
}
#endif



#if LinesEnable             // 是否允许第二种方式画线
/******************************************************************************** 
函数名:Void Lines(unsigned char Xa, unsigned char Ya, unsigned char Xb, unsigned char Yb) 
函数功能: 第二种画线方式,采用增量方式,
          Xa,Ya,Xb,Yb:线的起点和终点
********************************************************************************/ 
void Lines(unsigned char Xa,unsigned char Ya,unsigned char Xb,unsigned char Yb)
{
    float X,Y,Xinc,Yinc,m;
    uchar temp;
    unsigned int i,step;
    if(Ya>Yb){                                          // 做个变换,将值大的一端放在前面
        temp=Yb;
		Yb=Ya;
    	Ya=temp;
		temp=Xb;
		Xb=Xa;
		Xa=temp;
	}
	if(Xa<Xb){
		X=(float)Xa;
		Y=(float)Ya;
	}
	else{
		X=(float)Xb;
		Y=(float)Yb;
	}
	
	m=(float)fabs(Yb-Ya)/(float)fabs(Xb-Xa);           // 求出线的斜率,确定增长方向
	if(m<=1){
		Xinc=1.0;
		step=abs(Xb-Xa);
		Yinc=m;
	}
	else{
		Xinc=1.0/m;
		step=abs(Yb-Ya);
		Yinc=1.0;
	}
	PutPixel((int)X,(int)Y,1);
	for(i=0;i<step;i++){
		X+=Xinc;
		if(((Xb>Xa)&&(Yb>Ya))||((Xb<Xa)&&(Yb<Ya)))
			Y+=Yinc;
		else
			Y-=Yinc;
		PutPixel((int)X,(int)Y,1);
	}#ENDFor
}
#endif                // 是否允许第二种方式画线结束



#if  ShowPictureEnable         // 是否允许显示图片
/******************************************************************************** 
函数名:Void ShowPicture(unsigned char Startline,unsigned char Startcolumn,unsigned char LineWidth,unsigned char ColumnWidth,unsigned int address) 
函数功能: 显示一幅图片
          Startline,Startcolumn : 图片起始行(0-128)与列(0-15);
		  LineWidth,ColumnWidth : 图片的行宽和列宽
		  PicturePoint : 图片所在数组的指针,图片存储方式:左上角->右上脚->左下脚->右下脚
********************************************************************************/ 
void ShowPicture(unsigned char Startline,unsigned char Startcolumn,
                 unsigned char LineWidth,unsigned char ColumnWidth,
				 unsigned char *PicturePoint) 
{ 
   unsigned char i,j; 
   unsigned int StartAddr; 

   StartAddr=Startline*LineChar + Startcolumn+GraphicStartAddr;                        // 定位起始位置 

   for(i=0;i<LineWidth;i++) 
   { 
     WriteCmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);     // set address 
     for(j=0;j<ColumnWidth;j++) { 
 	    WriteCmd2( *(PicturePoint+i*ColumnWidth+j), DataWAddrI);                      // 将数据写如后地址加1
	 } 
     StartAddr=StartAddr + LineChar;                                                  // 换行,即换到下一行进行显示
   } 
} 
#endif      // 是否允许显示图片结束





#if ShowHZ16x16Enable         // 是否允许显示16x16的汉字
/******************************************************************************** 
函数名:Void ShowHZ16x16(unsigned char column,unsigned char lin,unsigned int hzcode) 
函数功能:显示一个汉字(16*16点阵)
          column:汉字起始列(0-15) 
          lin: 汉字起始行(0-(64-16))
		  hzcode: 汉字代码(自定义的) 
		  注:超出范围的将直接写到RAM中,可以实现卷屏效果
********************************************************************************/ 
void ShowHZ16x16(unsigned char column,unsigned char lin,unsigned int hzcode) 
{ 
    uchar i,temp1,temp2; 
    uint StartAddr; 

    StartAddr=lin*LineChar+ column+GraphicStartAddr;       //定位起始行 

    for(i=0;i<16;i++) 
    { 
      WriteCmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), AddrSet); 
      temp1=HZK16x16[hzcode][i*2]; 
      WriteCmd2(temp1, DataWAddrI);             // 左半部 地址加一 
      temp2=HZK16x16[hzcode][i*2+1]; 
      WriteCmd2(temp2, DataWAddrNV);            // 右半部 显示地址不变
      StartAddr=StartAddr + LineChar;           // 换到下一行
    } 
} 



/********************************************************************************
函数名: Void Show16x16Chars(unsigned char column,unsigned char lin,unsigned int hzcode,unsigned int num)
函数功能:显示一行汉字
         column:汉字起始列(0-15)
		 lin:汉字汉字起始行(0-(64-16))   
		 hzcode:第一个汉字的编码(自定义)
		 num:显示个数(0-8)
*********************************************************************************/
void Show16x16Chars(unsigned char column,unsigned char lin,unsigned int hzcode,unsigned int num)
{
    int i;
	for(i=0;i<num;i++)
	    ShowHZ16x16(column+i*2,lin,hzcode+i);
}
#endif                      // 是否允许显示汉字结束



#if ReverseShowEnable       // 是否允许反显
/******************************************************************************** 
函数名: Void ReverseShowChar(unsigned char column,unsigned char lin) 
函数功能: 反显一个字符
          column:待反显字符的起始列(0-15)
		  lin: 待反显字符的起始行(0-(64-16)) 
********************************************************************************/ 
void ReverseShowChar(unsigned char column,unsigned char lin) 
{ 
   unsigned char i; 
   unsigned char dat; 
   unsigned int StartAddr; 

   StartAddr=lin*LineChar +column+GraphicStartAddr;       //定位起始行 

   for(i=0;i<16;i++) 
   { 
     WriteCmd3( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), AddrSet); //set address 
     WriteCmd1( DataRAddrNV );            // 数据一次读,地址不变 
     dat=ReadCmd();                       // 读入数据 
     dat=~dat;                            // 取反 
     WriteCmd2( dat, DataWAddrNV);        // 送回 

     StartAddr=StartAddr+ LineChar; 
   } 
} 


/******************************************************************************** 
函数名: Void ReverseShowHZ(unsigned char column,unsigned char lin) 
函数功能: 反显一个汉字 
          column:待反显汉字的起始列(0-15), 
          lin: 待反显汉字的起始行(0-(64-16)) 
********************************************************************************/ 
void ReverseShowHZ(unsigned char column,unsigned char lin)
{
    ReverseShowChar(column,lin);
	ReverseShowChar(column+1,lin);
}



/******************************************************************************** 
函数名: Void ReverseShowChars(unsigned char column,unsigned char lin,unsigned char num) 
函数功能: 反显一串字符 
          column:待反显字符的起始列(0-15), 
          lin: 待反显字符的起始行(0-(64-16)) 
          num: 待反显字符的个数
********************************************************************************/ 
void ReverseShowChars(unsigned char column,unsigned char lin,unsigned char num)
{
    uchar i;
	for(i=0;i<num;i++)
    	ReverseShowChar(column+i,lin);
}




#endif  // 是否允许反显结束



/******************************************************************************** 
函数名: Void WriteCmd1(uchar cmd)
        Void WriteCmd2(uchar dat1,uchar cmd)
        Void WriteCmd3(uchar dat1,uchar dat2,uchar cmd)
		Void WriteData(uchar dat)
函数功能: 写指令和写数据子程序
********************************************************************************/ 
void WriteCmd1(uchar cmd)                            // 写指令不带参数
{
    RWcheck();
    P3=cmd;
    WriteSingle();
}
void WriteCmd2(uchar dat1,uchar cmd)                 // 写指令带一个参数
{
    RWcheck();           // 写参数
    CDLine=0;
    P3=dat1;
    WriteSingle();
    RWcheck();           // 写指令
    P3=cmd;
    WriteSingle();
}
void WriteCmd3(uchar dat1,uchar dat2,uchar cmd)      // 写指令带两个参数
{
    RWcheck();          // 写第一个参数
    CDLine=0;
    P3=dat1;
    WriteSingle();
    RWcheck();         // 写第二个参数
    CDLine=0;
    P3=dat2;
    WriteSingle();
    RWcheck();         // 写第三个参数
    P3=cmd;
    WriteSingle();
}
void WriteData(uchar dat)                          // 写一个数据
{
    RWcheck();
    CDLine=0;
    P3=dat;
    WriteSingle();
}   



/******************************************************************************** 
函数名: Void ReadCmd() 
函数功能: 读数据子程序 
********************************************************************************/ 
uchar ReadCmd()
{
    uchar ReturnValue;
    RWcheck();
	CDLine=0;
	ReadLine=0;
    ReturnValue=P3;
    ReadLine=1;
    return ReturnValue;
}


/******************************************************************************** 
函数名: Void CursorPosSet(uchar X,uchar Y) 
函数功能:  光标位置设置 
********************************************************************************/ 
void CursorPosSet(unsigned char x,unsigned char y) 
{ 
   WriteCmd3(x,y,CursorPointer);         //X的取值范围0-20;Y的取值范围0-15; 
} 


#if CursorEnable           // 控制是否允许对光标的控制
/******************************************************************************** 
函数名: Void CursorUp() 
函数功能:  光标向上移动一格 
********************************************************************************/ 
void CursorUp() 
{ 
        if(Cursor_Y>0)Cursor_Y-=1; 
        WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); 
} 



/******************************************************************************** 
函数名: Void CursorDown() 
函数功能:  光标向下移动一格 
********************************************************************************/ 
void CursorDown() 
{ 
        if(Cursor_Y<8)Cursor_Y+=1; 
        WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); 
} 



/******************************************************************************** 
函数名: Void CursorRight() 
函数功能:  光标向右移动一格 
********************************************************************************/ 
void CursorRight() 
{ 
        if(Cursor_X<20)Cursor_X+=1; 
        WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); 
} 



/******************************************************************************** 
函数名: Void CursorLeft() 
函数功能:  光标向左移动一格 
********************************************************************************/ 
void CursorLeft() 
{ 
        if(Cursor_X>0)Cursor_X-=1; 
        WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); 
} 



/******************************************************************************** 
函数名: Void CursorEnter() 
函数功能:  光标换行
********************************************************************************/ 
void CursorEnter() 
{ 
   Cursor_X=0; 
   Cursor_Y+=1; 
   WriteCmd3(Cursor_X,Cursor_Y,CursorPointer); 
} 

#endif        // 是否允许控制光标结束

/******************************************************************************** 
函数名: Void ReadState() 
函数功能:  读状态字,返回当前状态
********************************************************************************/ 
uchar ReadState()
{
    uchar ReturnValue;
    DataPort=0xff;
    CDLine=1;
	ReadLine=0;
    ReturnValue=P3;
    ReadLine=1;
    return ReturnValue;
}



/******************************************************************************** 
函数名: Void RWcheck() 
函数功能: 判断状态位STA1,STA0子程序(读写指令和读写数据状态),在写指令的读,
          写数据之前这两个标志位必须同时为1 
********************************************************************************/ 
void RWcheck()
{
    do{
        ;
    }while( !(ReadState()&0x03) );
}





/******************************************************************************** 
函数名: Void AutoRcheck() 
函数功能: 判断状态位STA2的子程序(数据自动读状态),该位在数据自动读操作过程中
          取代STA0和STA1有效。在连续读过程中每读一次之前都要确认STA2=1
********************************************************************************/ 
void AutoRcheck()
{
    do{
        ;
    }while( !(ReadState()&0x04) );
}



/******************************************************************************** 
函数名: Void AutoWcheck() 
函数功能: 判断状态位STA3子程序(数据自动写状态) 
********************************************************************************/ 
void AutoWcheck()
{
    do{
        ;
    }while( !(ReadState()&0x08) );
}


/*判断状态位STA6子程序(屏读/屏拷贝状态)

st6:lcall read_state
    jb acc.6,err
    ret
err:ljmp st6
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -