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

📄 lcd_12864.h

📁 51单片机控ADC(MAX197)采集数据
💻 H
📖 第 1 页 / 共 2 页
字号:
  	uRow = fnGetRow();    
  	uCol = fnGetCol();

    for(j=0;j<ASC_CHR_HEIGHT;j++) //写16行
     {
		fnPR12(LC_AUT_WR);    			// 写数据(命令)
    	if (c1 >= 0x20)
    	{
		 fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
    	}
		else
	    {
        fnPR13(cData);
     	}
    	fnPR12(LC_AUT_OVR);  			//写数据结束
	    fnSetPos(uRow+j+1,uCol);
     }
       if(c1 != BS)  	// 非退格
      {
        uCol++;   // 列数加1
      }

}  

/**************************************************
函数名称 Dispnumber(uint number,uchar j,uchar x,uchar y) 
修改日期 :07.07.10日  11.20分
**************************************************/
void Dispnumber(uint number,uchar j,uchar x,uchar y) 
//显示一个INT型的数字,J为所要显示的位数,X,Y为显示的末坐标
{
 unsigned char temp;
  for(;(j>0)&(j<6);j--)
{
  temp=number%10+0x30;
  Disponechar(x--,y,temp);
  number=number/10;
}
}

/**************************************************
函数名称 dispnumber_long(uint number,uchar j,uchar x,uchar y) 
修改日期 :07.07.10日  11.30分
**************************************************/

void Dispnumber_long(ulong number,uchar j,uchar x,uchar y) 
//显示一个LONG型的数字,J为所要显示的位数,X,Y为显示的末坐标
{
 unsigned char i=0,digit;
 ulong temp;
 temp=number;
  for(;j>0;j--)
{
  i++;
  digit=temp%10+0x30;
  Disponechar(x--,y,digit);
  temp=temp/10;
  if(temp==0) break;
  if(i==3){Disponechar(x--,y,',');i=0;}
}
}

/**************************************************
函数名称 dispnumber_float(uint number,uchar i,uchar j,uchar x,uchar y) 
修改日期:07.07.22日 21.33分
函数功能: 显示小数,但原理与直接显示float型的数不同,此函数是直接将小数点写入,此处形参number为扩大一定倍数后的值.
备注:     此方式比显示float型的数速度快,可在大多数情况下代替函数 dispnumber_float();
***************************************************/
void Dispnumber_float(uint number,uchar i,uchar j,uchar x,uchar y) 
//显示一个INT型的数字,i为所要显示的总位数,j为小数部分的位数,X,Y为显示的末坐标
{
 unsigned char k=0,temp;
  for(;(i>0)&(i<6);k++,i--)
{
  temp=number%10+0x30;
  if(k==j) Disponechar(x--,y,'.');
  Disponechar(x--,y,temp);  
  number=number/10;
 // if(number==0) break;
}
}
/********************************************************/
/* ASCII(8*16) 及 汉字(16*16) 显示函数      */
/********************************************************/

unsigned char LcdPrintf(unsigned char x,unsigned char y, char *ptr)
{
    unsigned char c1,c2,cData;
    unsigned char i,j,uLen,uRow,uCol;
    unsigned int  k;
	unsigned char temp,q;
    uLen=0;
    i=0;
    uRow = y;
    uCol = x;
    fnSetPos(uRow*16,uCol);      //起点定位

    while (ptr[uLen]!=0) //探测字串长度
    {
        uLen++;
    }	
    while(i<uLen)
    {
    	c1 = ptr[i];
    	c2 = ptr[i+1];
        //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
    	uRow = fnGetRow();    
    	uCol = fnGetCol();
    	if(c1 <=128)	// ASCII
      	    {
		     for(j=0;j<ASC_CHR_HEIGHT;j++) //写16行
           		 {
		        	fnPR12(LC_AUT_WR);    			// 写数据(命令)
		        	if (c1 >= 0x20)
			          	{
			            	    fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
			          	}
		        	else
				        {
				          	    fnPR13(cData);
				       	}
		         	fnPR12(LC_AUT_OVR);  			//写数据结束
		            fnSetPos(uRow+j+1,uCol);
           	 	 }
			         if(c1 != BS)  	// 非退格
			            {
			                uCol++;   // 列数加1
			            }
          			   				
            }
    	else    	// 中文
      	    {
		       for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)  	// 查找定位,第几个汉字
		            {
			                if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
			                {
			                    break;
			                }
		          				
		             }
             //for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)    //16行循环

		      for(k=0;k<CHAR_HEIGHT;k++)    //CHAR_HEIGHT 行循环
                 {
		                    fnSetPos(uRow+k,uCol);
		                	fnPR12(LC_AUT_WR);      		// 写数据
		            	    if(j < sizeof(GB_16)/sizeof(GB_16[0]))  //第几个汉字
						       {
						          //汉字大小为16*16
						          // fnPR13(GB_16[j].Msk[k*2]);
						          // fnPR13(GB_16[j].Msk[k*2+1]); 
						           temp=CHAR_LONG/8;
								   for(q=0;q<temp;q++)
								   fnPR13(GB_16[j].Msk[k*temp+q]);   
				               	}
		        			else   		// 未找到该字
		          			{
				          	    if(k < sizeof(GB_16[0].Msk)/4)
				            	    {
				                        fnPR13(0x00);
				            		    fnPR13(0x00);
				            	     }
				         	    else
				            	    {
				            		fnPR13(0xff);
							        fnPR13(0xff);
				            	    }
		              		 }
		        			fnPR12(LC_AUT_OVR);
          	      }
          
           //汉字大小为16*16 
      	    //uCol += 2;
           

            //汉字大小为24*24 
            // uCol += 3;

           
            //汉字大小为32*32 
            uCol += temp;
      	    i++;
        }

	    if(uCol >= LCD_XMAX/ASC_CHR_WIDTH)    
      	{
      	    uRow +=ASC_CHR_HEIGHT;
            if(uRow < 0x40)            //显示到最后一个坐标处则从头显示a
		            {
		                uCol -= LCD_XMAX/ASC_CHR_WIDTH;
		             }
      	    else
		            {
		        	uRow = 0;
		        	uCol = 0;
		            }
      	 }
         fnSetPos(uRow,uCol);
    	 i++;
    }
    return uLen;        //返回字串长度,汉字按2字节计算
}  

/*************************/
/* 画点*/
/*************************/
/*
void LCDPoint(unsigned char x,unsigned char y,unsigned char s)
{
    unsigned char x1;
    x1 = x >> 3; // 取Y方向分页地址
    fnSetPos(y,x1); // 起点定位
    x1 = turnf[ x & 0x07 ];
    x1 = 0xF0 | x1 | s; // 字节内位置计算
    fnPR12(x1); // 画上屏幕S显示属性8 画点0 擦除点
}
*/
/************************************************/
/* 画线任意方向的斜线,直线数学方程aX+bY=1 */
/************************************************/
/*
void LCDLinexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
{
    register unsigned char t;
    int xerr = 0,yerr = 0;
    int delta_x,delta_y,distance;
    int incx,incy,uRow,uCol;
    delta_x = xt-x0;     // 计算坐标增量
    delta_y = yt-y0;
    uRow = x0;
    uCol = 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++ )   // 画线输出
    { 
        LCDPoint(uRow,uCol,s);      // 画点
        xerr += delta_x;
        yerr += delta_y;
        if( xerr > distance )
        {
            xerr -= distance;
            uRow += incx;
        }
        if( yerr > distance )
        {
            yerr -= distance;
            uCol += incy;
        }
    }
}
*/
/********************************************/
/* 画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/********************************************/
/*
void LCDCircle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
{
    unsigned int xx,rr;
    unsigned int xt,yt;
    unsigned int rs,row,col;
    yt = Rx;
    rr = (unsigned int)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--;
        }
        row = Ox+xt; // 第一象限
        col = Oy-yt;
        LCDPoint(row,col,s);
        row = Ox-xt; // 第二象限
        LCDPoint(row,col,s);
        col = Oy+yt; // 第三象限
        LCDPoint(row,col,s);
        row = Ox+xt; // 第四象限
        LCDPoint(row,col,s);
        // 45度镜象画另一半
        row = Ox+yt; // 第一象限
        col = Oy-xt;
        LCDPoint(row,col,s);
        row = Ox-yt; // 第二象限
        LCDPoint(row,col,s);
        col = Oy+xt; // 第三象限
        LCDPoint(row,col,s);
        row = Ox+yt; // 第四象限
        LCDPoint(row,col,s);
    }
}
*/

⌨️ 快捷键说明

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