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

📄 320240最终不带字库子程序.c

📁 这是关于液晶320240的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	WriteCommand( CsrW );						// 重新设置光标地址
	WriteData( (Uchar)(tempPtr & 0xff) );
	WriteData( (Uchar)(tempPtr /256) );
	WriteCommand( mWrite );						// 代码0x42,数据写入指令
	WriteData( tempD );							// 写入合成数据

}
//##########################函数12。画线###################################################
//*画线。任意方向的斜线,直线数学方程	aX+bY=1
//入口参数:初始点(X0,Y0)  X0 Y0为初始点的点坐标   x0为整形可大于256
//          终点  (xt,yt)    Xt Yt为终点的点坐标   xt为整形可大于256
//          参数 att  att=1为绘制图形 att=0为擦除图形
//          参数 qu  qu=1为2区 qu=0为1区

void Linexy(Uint x0,Uchar y0,Uint xt,Uchar yt,Uchar att,Uchar qu)
{
	register Uint 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,qu);				//画点
		xerr +=	delta_x	;
		yerr +=	delta_y	;

		if(	xerr > distance	)
		{
			xerr-=distance;
			col+=incx;
		}
		if(	yerr > distance	)
		{
			yerr-=distance;
			row+=incy;
		}
	}
}
//#####################函数13。矩形绘制函数############################################################################
//矩形绘制函数
//入口参数:
// X0 Y0为左上角的点 (x0,y0)   为点的坐标   x0为整形可大于256
// WIDE HIGHT分别为宽度和高    WIDE为整形可大于256
// att为绘制或者擦除矩形  att=1为绘制图形
void Rectangle( Uint X0, Uchar Y0, Uint wide,Uchar hight,Uchar att,Uchar qu)
{
                Uint ra0,ra1,ra2,ra3;
                Uchar rb0,rb1,rb2,rb3;
                ra0=X0;
                rb0=Y0;
                ra1=X0+wide;
                rb1=Y0;
                ra2=X0;
                rb2=Y0+hight;
                ra3=X0+wide;
                rb3=Y0+hight;

                Linexy( ra0,rb0,ra1,rb1,att,qu);
		Linexy( ra0,rb0,ra2,rb2,att,qu);
		Linexy( ra2,rb2,ra3,rb3,att,qu);
		Linexy( ra1,rb1,ra3,rb3,att,qu);
}
//###################函数14。画圆##########################################################################################
//画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2
//  入口参数:(Ox,Oy)为圆心点坐标 px可以超过256
//              Rx为半径  半径最大值要根据初始的值进行确定
//              参数 attr  attr=1为绘制图形 attr=0为擦除图形

void circle(Uint Ox,Uchar Oy,Uchar Rx,Uchar attr,Uchar qu)
{
	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,qu);
		col=Ox-xt;		//第二象限
		Point(col,row,attr,qu);
		row=Oy+yt;		//第三象限
		Point(col,row,attr,qu);
		col=Ox+xt;		//第四象限
		Point(col,row,attr,qu);

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

		col=Ox+yt;		//第一象限
		row=Oy-xt;
		Point(col,row,attr,qu);
		col=Ox-yt;		//第二象限
		Point(col,row,attr,qu);
		row=Oy+xt;		//第三象限
		Point(col,row,attr,qu);
		col=Ox+yt;		//第四象限
		Point(col,row,attr,qu);
	}
}

//#############################################################################################

// 滚动演示程序段 (包含向上,向下,向左,向右四个函数)
// 使用SED1335 等的屏幕滚动功能, 可以实现逐点滚动的显示效果. 这个效果的实现, 在
// 水平方向是依赖于指令HDOT SET的支持. 下面的演示程序中看到HDOT SET指令的使用方法.
// 参数说明:V控制移动的速度。 tt控制移动的幅度
//            横向移动的时候 tt控制移动的字节数目 纵向移动tt控制移动的点行数
//
//################函数15.滚动往左##########################
// 第一显示区向左滚动
//V控制移动的速度。 tt控制移动的幅度    横向移动的时候 tt控制移动的字节数目
void RollLaft( Uchar v,Uchar tt ) {

	Uchar tempI,jj=tt;
	Uint  iTemp=0;

	while(jj--) {

		for(tempI=0;tempI<8;tempI++) {
			WriteCommand( HdotScr );		// 写入HDOT SET 指令
			WriteData( tempI );				// 写入参数
			DelayMs(v);						// 调延时子程序
		}

		iTemp ++;
                }
	//	WriteCommand( Scroll );				// 设定显示区域起始地址
	//	WriteData( (Uchar)(iTemp & 0xff) );			// 写入参数
	//	WriteData( (Uchar)(iTemp /256) );			// 写入参数

}

//#################函数16.滚动往右######################
// 第一显示区向右滚动
//V控制移动的速度。 tt控制移动的幅度    横向移动的时候 tt控制移动的字节数目

void Rollright( Uchar v,Uchar tt ) {

	Uchar tempI,jj=tt;
	Uint  iTemp=24;
//	return;
//	WriteCommand( DispOn );			// 写入指令DISP ON/OFF代码,后续参数:
//	WriteData( 0x44 );				// 00 00 01 00显示1区开显示,其余层关闭

	while(jj--) {
		tempI = 8;
		WriteCommand( Scroll );				// 显示区域(起点)设置
		WriteData( (Uchar)(iTemp & 0xff) );			// 写入参数
		WriteData( (Uchar)(iTemp /256) );			// 写入参数
		while( tempI-- ) {
			WriteCommand( HdotScr );		// 写入HDOT SET 指令
			WriteData( tempI );				// 写入参数
			DelayMs(v);						// 调延时子程序
		}

		iTemp--;
  //              WriteCommand( Scroll );		// 设定显示区域起始地址
//	WriteData( 0 );			// 写入参数
//	WriteData( 0 );			// 写入参数
//	DelayMs(30);
	}

}
//##################函数17.滚动往下##########################
// 第一显示区向下滚动
//V控制移动的速度。 tt控制移动的幅度  纵向移动tt控制移动的点行数
void RollDown( Uchar v,Uchar tt ) {

Uchar 	jj = tt;					// 演示32次
Uint	iTemp=paraP9*50;

//	WriteCommand( DispOn );			// 写入指令DISP ON/OFF代码,后续参数:
//	WriteData( 0x44 );				// 00 00 01 00显示1区开显示,其余层关闭

	while(jj--) {
		iTemp -= paraP9;
		WriteCommand( Scroll );		// 设定显示区域起始地址
		WriteData( (Uchar)(iTemp & 0xff) );			// 写入参数
		WriteData( (Uchar)(iTemp /256) );			// 写入参数
		DelayMs(v);					// 调延时子程序
	}
	WriteCommand( Scroll );		// 设定显示区域起始地址
	WriteData( 0 );			// 写入参数
	WriteData( 0 );			// 写入参数
	DelayMs(30);
}
//#####################函数18.向上滚动#########################
// 第一显示区向上滚动
//V控制移动的速度。 tt控制移动的幅度  纵向移动tt控制移动的点行数
void RollUp( Uchar v,Uchar tt ) {

Uint	iTemp=0;
Uchar 	jj = tt;					// 演示30次

//	WriteCommand( DispOn );			// 写入指令DISP ON/OFF代码,后续参数:
//	WriteData( 0x44 );				// 00 00 01 00显示1区开显示,其余层关闭

	while(jj--) {

		iTemp += paraP9;

		WriteCommand( Scroll );		// 设定显示区域起始地址
		WriteData( (Uchar)(iTemp & 0xff) );			// 写入参数
		WriteData( (Uchar)(iTemp /256) );			// 写入参数

		DelayMs(v);				// 调延时子程序
	}
        WriteCommand( Scroll );		// 设定显示区域起始地址
	WriteData( 0 );			// 写入参数
	WriteData( 0 );			// 写入参数
	DelayMs(30);
}
//################函数19.文本方式下的西文字符串显示################################################
//      西文显示演示程序
// 仅仅用于文本方式下的西文字符串显示,本函数只写入第3显示区
//本函数含有切换到文本模式的代码,要切换到图形模式需有另外的指令,不然会乱码
//参数:OX OY为显示坐标 OX为横向的字母数 OX<320/8   OY为横向的字母数 OY<240/8
//      *ptr指向要显示的字符串
//
void TextDisp( Uchar Ox,Uchar Oy, Uchar code *ptr ) {

        Uchar TexLength=0,ii;
        Uint  iTemp;


	while(ptr[TexLength]>0x1f) {TexLength++;};   // 获取字串长度


	WriteCommand( CsrForm );		// 光标形状设置,代码0x5d
	WriteData( 0x07 );				// 设置光标水平点为CSX=8
	WriteData( 0x07 );				// 光标为块状形式,垂直点为CSY=8

	WriteCommand( Ovlay );			// 显示合成方式设置.代码0x5b
	WriteData( 0x01 );				// 设置参数:显示3区为文本属性,二重xor合成

	WriteCommand( DispOn );			// 写入指令DISP ON/OFF代码,后续参数:
	WriteData( 0x56 );				// 01 01 01 10显示1~4区开显示,光标闪烁显示

	iTemp = (Uint)Oy * paraP9 + Ox;			    // 光标位置到实际ram地址换算

	WriteCommand( CsrDirR );					// 自动右移光标指向

	WriteCommand( CsrW );						// 制定光标位置
	WriteData( (Uchar)(iTemp &0xff) );			// 设置光标地址CSR
	WriteData( (Uchar)(iTemp /256 + BasePart3) );	// 加入显示三区起始地址SAD2H

	WriteCommand( mWrite );						// 当前位置写入数据指令

	for(ii=0;ii < TexLength;ii++) {

		WriteData( ptr[ii] );					// 写入显示字符代码
	}
	DelayMs(350);
}

//########################函数20.三角形绘制函数#############################################
// 三角形绘制函数
// 入口参数  (X0,Y0),(X1,Y1),(X2,Y2),三角形三个顶点
//
void triangle( Uint X0, Uchar Y0, Uint X1, Uchar Y1,Uint X2, Uchar Y2,Uchar att,Uchar qu )
{
                Linexy( X0,Y0,X1,Y1,att,qu);
		Linexy( X0,Y0,X2,Y2,att,qu);
		Linexy( X1,Y1,X2,Y2,att,qu);

}
//########################################################################################
void Main(void)
{
   Uchar i;
   Delay(32767);			// 足够的延时确保lcm已经准备好
   LcmInition();
   LcmClear();

   WriteCommand( Ovlay );	    // 显示合成方式设置.代码0x5b
   WriteData( 0x04 );		    // 设置参数:显示3区为文本属性,二重xor合

   dprintf(8,20, test1,1);	   // 图形方式下中英文混合字符串的显示

   PutCdotInGraph( 5, 15, 4,16,1);   //单个汉字写入(图形方式) 16点

   PutCdotInGraph(220, 60, 3,24,1);   //单个汉字写入(图形方式) 24点

   Point(315, 220, 1,1);           //  绘点子程序

   Linexy(20,40,300,220,1,0);      //  绘线程序

   Rectangle( 20, 60, 80,100,1,1);  //画矩形

   circle(100,100,50,1,0);          //绘圆

   triangle( 100, 100, 200, 200,250, 128,1,1);
                                         //  三角形绘制

   RollUp(200,200);              //  滚动往上

   while(1)
   {
   ;
   }
}

⌨️ 快捷键说明

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