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

📄 sed1335.c.bak

📁 这是一整套USB2.0试验程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
----------------------------------------------------------------------------*/
void Locatexy(Uchar x,Uchar y, Uchar attribs) {
Uint temp;
	temp = (Uint)y*paraP9+x;
	if(attribs)temp += BasePart2*256;	// 如果需要就指向第二区,加上第二区首地址
	WriteCommand( CsrW );				// 光标Locate,定位
	WriteData( (Uchar)(temp & 0xff) );	// 写入参数CSRL设置参数光标指针低8位
	WriteData( (Uchar)(temp /256 ) );	// 写入参数CSRH设置参数光标指针高8位
}
/********************************************/
/*画线。任意方向的斜线,直线数学方程	aX+bY=1	*/
/********************************************/
// 参数类型有待修改
void Linexy(Uint x0,Uchar y0,Uint xt,Uchar yt,Uchar att)
{
	int t;
	int	xerr=0,yerr=0,delta_x,delta_y,distance;
	int	incx,incy;
	Uint row,col;
	delta_x	= xt-x0;							//计算坐标增量
	delta_y	= yt-y0;
	col	= x0;
	row	= y0;
	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((Uint)col,row,att);				//画点
		xerr +=	delta_x	;
		yerr +=	delta_y	;
		
		if(	xerr > distance	)
		{
			xerr-=distance;
			col+=incx;
		}
		if(	yerr > distance	)
		{
			yerr-=distance;
			row+=incy;
		}
	}
}
/*====================================================
;  绘点子程序,携入参数X坐标的最高位决定写或擦点
 ====================================================*/
void Point(Uint Px, Uchar Py, Uchar attr ) {

Uint tempPtr;
Uchar tempD,tempP;
		
	tempPtr = (Uint)Py * paraP9 + (Px & 0x7fff)/8;	// 去除最高位(显示属性)
	WriteCommand( CsrDirD );						// CSRDIR 代码(光标自动下移)
	WriteCommand( CsrW );							// 设置光标地址
	WriteData( (Uchar)(tempPtr & 0xff) );
	WriteData( (Uchar)(tempPtr /256) );
	WriteCommand( mRead );							// 读显示ram指令
	tempD = ReadDataLcm();							// 读取当前显示数据
	tempP = 1<<(Uchar)(7-Px & 0x0007);

// 根据预定属性决定写点或擦除
	if( attr )tempD |= tempP;	// 画点
	else tempD &= ~tempP;				// 消点

	WriteCommand( CsrW );						// 重新设置光标地址
	WriteData( (Uchar)(tempPtr & 0xff) );
	WriteData( (Uchar)(tempPtr /256) );
	WriteCommand( mWrite );						// 代码0x42,数据写入指令
	WriteData( tempD );							// 写入合成数据

}
/************************************************/
/*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2		*/
/************************************************/
void circle(Uint Ox,Uchar Oy,Uchar Rx,Uchar attr)
{
	Uint xx,rr,xt,yt,rs,col,row;
	yt=Rx;
	rr=Rx*Rx+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--;
		col=Ox+xt;		//第一象限
		row=Oy-yt;
		Point(col,row,attr);
		col=Ox-xt;		//第二象限
		Point(col,row,attr);
		row=Oy+yt;		//第三象限
		Point(col,row,attr);
		col=Ox+xt;		//第四象限
		Point(col,row,attr);

/***************45度镜象画另一半***************/

		col=Ox+yt;		//第一象限
		row=Oy-xt;
		Point(col,row,attr);
		col=Ox-yt;		//第二象限
		Point(col,row,attr);
		row=Oy+xt;		//第三象限
		Point(col,row,attr);
		col=Ox+yt;		//第四象限
		Point(col,row,attr);
	}
}
/**********************************************
 ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数	
  
	x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
							
	*ptr...字符串指针,本函数所指的是flash字串
	att....显示区标志,0...第一区;1...第二区
  返回参数:输出字串长度,留意汉字一个算两个
  其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
***********************************************/
void Putstr(Uchar x,Uchar y,Uchar  *pstr,Uchar flag)
{ 
  Uchar j,m,temp;
  Uchar uRow,uCol;
  Uint count;
  uRow=x;
  uCol=y;
  WriteCommand( CsrDirD ); 
  Locatexy(uRow,uCol,flag);
  while(*pstr)
  {
	  if(*pstr>0xa0)//汉字
	  {
		  count=0;
		  while((HZ16_16[count]!=*pstr)||(HZ16_16[count+1]!=*(pstr+1)))
		  { //根据区码位码查找汉字库
		  	count=count+0x22;
			if(HZ16_16[count]==0)
			{ //没有找到退出
				count=0xffff;
				break;
			}
		      
		   }
		   pstr+=2;
		   count+=2;
		   for(m=0;m<2;m++)
		   { 
		     Locatexy(uRow+m,uCol,flag);
		     WriteCommand( mWrite );				// 写数据(命令)
		     for(temp=0;temp<16;temp++)
		     {WriteData(HZ16_16[2*temp+count+m]);}
		   }
		   uRow+=2;
	  }//ASC码
	  else
	  { 
	     Locatexy(uRow,uCol,flag);
	     WriteCommand( mWrite );				// 写数据(命令)
	     for(j=0;j<16;j++)
	     {
		 	WriteData(ASC_MSK[(*pstr-0x20)*16 +j ]);
		 }
	     pstr++;
	     uRow++;
	  }//光标控制
	  if(uRow >= 40)								// 光标后移
	  {
	     uCol += 16;								// Y坐标
		 uRow = 0;					    		    // X坐标
		 if( uCol >= 240 ) uCol = 0;
	  }
	  Locatexy(uRow,uCol,flag);
 }
}
void PutLogo(Uchar x,Uchar y,Uchar flag)
{ 
  Uchar j,m,temp;
  Uchar uRow,uCol;
  Uint count;
  uRow=x;
  uCol=y;
  WriteCommand( CsrDirD ); 
  Locatexy(uRow,uCol,flag);
//  while(*pstr)
  {
//	  if(*pstr>0xa0)//汉字
	  {
		  count=0;
/*		  while((HZ32_32[count]!=*pstr)||(HZ32_32[count+1]!=*(pstr+1)))
		  { //根据区码位码查找汉字库
		  	count=count+0x82;
			if(HZ32_32[count]==0)
			{ //没有找到退出
				count=0xffff;
				break;
			}
		      
		   }
		   pstr+=2;
		   count+=2;*/
		   for(m=0;m<4;m++)
		   { 
		     Locatexy(uRow+m,uCol,flag);
		     WriteCommand( mWrite );				// 写数据(命令)
		     for(temp=0;temp<32;temp++)
		     {WriteData(Logo[4*temp+count+m]);}
		   }
//		   uRow+=4;
	  }//ASC码
/*	  else
	  { 
	     Locatexy(uRow,uCol,flag);
	     WriteCommand( mWrite );				// 写数据(命令)
	     for(j=0;j<16;j++)
	     {
		 	WriteData(ASC_MSK[(*pstr-0x20)*16 +j ]);
		 }
	     pstr++;
	     uRow++;
	  }//光标控制 
	  if(uRow >= 40)								// 光标后移
	  {
	     uCol += 32;								// Y坐标
		 uRow = 0;					    		    // X坐标
		 if( uCol >= 240 ) uCol = 0;
	  }
	  Locatexy(uRow,uCol,flag);	*/
 }
}
void PutHz_32(Uchar x,Uchar y,Uchar  *pstr,Uchar flag)
{ 
  Uchar j,m,temp;
  Uchar uRow,uCol;
  Uint count;
  uRow=x;
  uCol=y;
  WriteCommand( CsrDirD ); 
  Locatexy(uRow,uCol,flag);
  while(*pstr)
  {
	  if(*pstr>0xa0)//汉字
	  {
		  count=0;
		  while((HZ32_32[count]!=*pstr)||(HZ32_32[count+1]!=*(pstr+1)))
		  { //根据区码位码查找汉字库
		  	count=count+0x82;
			if(HZ32_32[count]==0)
			{ //没有找到退出
				count=0xffff;
				break;
			}
		      
		   }
		   pstr+=2;
		   count+=2;
		   for(m=0;m<4;m++)
		   { 
		     Locatexy(uRow+m,uCol,flag);
		     WriteCommand( mWrite );				// 写数据(命令)
		     for(temp=0;temp<32;temp++)
		     {WriteData(HZ32_32[4*temp+count+m]);}
		   }
		   uRow+=4;
	  }//ASC码
	  else
	  { 
	     Locatexy(uRow,uCol,flag);
	     WriteCommand( mWrite );				// 写数据(命令)
	     for(j=0;j<16;j++)
	     {
		 	WriteData(ASC_MSK[(*pstr-0x20)*16 +j ]);
		 }
	     pstr++;
	     uRow++;
	  }//光标控制 
	  if(uRow >= 40)								// 光标后移
	  {
	     uCol += 32;								// Y坐标
		 uRow = 0;					    		    // X坐标
		 if( uCol >= 240 ) uCol = 0;
	  }
	  Locatexy(uRow,uCol,flag);
 }
}
/******************************************
        整数输出到字符串函数            
入口: 位数:wei; 字符串:*str  变量:ivar  
*******************************************/
void send_int(Uchar wei,Uchar *str,Uint shu) 
{
  data Uchar i,num;
  Uint intbuf;   // 整型数缓冲

  intbuf = (Uint)shu;// 变整形
  str[wei] = 0;       // 字符串结束
  num = wei;
  for(i=0;i<wei;i++){
    num --;
    str[num] = intbuf % 10 + 0x30;// 送一个字符 
    intbuf = intbuf / 10;         // 上一位 
    }// for 
}
/**********************************************************
函数功能:输出整数
x:字节位置,y:点位置
attribte:0:一区显示;1:二区显示

**********************************************************/
void put_uint(Uchar x,Uchar y,Uchar wei,Uint shu,Uchar attribte) 
{
  Uchar cbuf[20];   // 字符串缓冲区   
  send_int(wei,cbuf,shu);
  Putstr( x, y, cbuf,attribte);;  // 送显示     
}
/************************************************
显示浮点数函数                               
 入口:format +62 显示6位数,2位小数,显示+/-号  
      fbuf 浮点数                             
   x:字节位置,y:点位置
  attribte:0:一区显示;1:二区显示
  *P:指向显示位数                     
*************************************************/
/*void Putf(Uchar x,Uchar y,Uchar *p,float fbuf,Uchar attribte)
{ 
  Uchar cbuf[16]; // 字符串缓冲区  
  SPutf(p,cbuf,fbuf);
  Putstr( x, y, cbuf,attribte); // 送显示
}  */
/*********************************************
 浮点数输出到字符串                         
 入口: 说明 *format, 字符串:*str 变量:fvar  
***********************************************/
void SPutf(Uchar *format,Uchar *str,float fvar)
{ 
  data Uchar a,b,i,num=0;
  data unsigned long longbuf; // 整型数缓冲   

  if (*format =='+'){
    if (fvar<0){ 
      fvar = -fvar;    // 负变量转换绝对值  
      str[num]='-';   // 加负号            
      }
    else{ 
      str[num]='+'; // 加正号            
      }
    num ++;
    format ++;
    }//
  a = *format - 0x30;    // 取总长度a     
  format ++;
  b = *format - 0x30;    // 取小数点位数b 
  for (i=0;i<b;i++){
    fvar = fvar * 10;    // 消除小数      
    }//
  fvar = fvar + 0.5;     // 四舌五入      
  num = num + a;
  if (b>0){ 
    num ++;                  // 有小数点  
    }//
  longbuf = (unsigned long)fvar;// 变整形 
  str[num] = 0;             // 字符串结束 
  for(i=1;i<=a;i++){
    num --;
    str[num] = longbuf % 10 + 0x30; // 送一个字符  
    longbuf = longbuf / 10;         // 上一位      
    if (i==b){ 
      num --;
      str[num] = '.';               // 加小数点    
      }
    }//for
}

/*************************************************
函数说明:中断函数
**************************************************/
void timer0(void) interrupt 1
{ 
  TH0=0x4c;
  TL0=0x00;
  click++;
  if(click>=20)
  {click=0;
   secflag=1;}
}
  

⌨️ 快捷键说明

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