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

📄 1335c51.c.bak

📁 这是一个成熟的用于驱动步进马达的程序,我们用于调试螺钉的.
💻 BAK
📖 第 1 页 / 共 3 页
字号:
	WriteCommand( Scroll ); 			//设定显示区域起始地址
	for (i=0;i<10;i++) {
		WriteData( ParaScrTableA[i] );
	}

	WriteCommand( HdotScr );		// 写入点位移指令代码
	WriteData( 0 );					// 写入P1参数
	WriteCommand( Ovlay );			// 显示合成方式设置
	WriteData( 0x08 );					// 0000 0100 显示一区文本,二区图形属性,二重"或"合成
	WriteCommand( DispOn );			// 写入指令代码
	WriteData( 0x54 );				// 显示 1~4 区开显示,光标关显示
	LcmClear();
	BuildCgram(0,15);               //
}

#if 0
/*============================================
 建立 cgram,将显示字符送入cgram中

  入口参数约定:Base.... 起始
=============================================*/
void BuildCgram( uchar Base, uchar EndlCode ) 
{

uchar iCgram,ii,ij;

	WriteCommand( CgramAdr );		// CGRAMADR 代码
	WriteData( 0 );					// 设置SAG=07000H
	WriteData( 0x70 );				// 汉字模在cgram中的编码0x70~0x73

	WriteCommand( CsrW );			// CSRW 代码,光标指针设置
	WriteData( 0 );					// 设置CSR=07400H(字符代码=80H)
	WriteData( 0x74 );				// 汉字模在cgram中的编码0x70~0x73
	WriteCommand( CsrDirR );		// CSRDIR 代码
	WriteCommand( mWrite );			// 代码0x42,数据写入指令
	for (ii=0;ii<EndlCode;ii++)
	{
		for (ij=0;ij<2;ij++)
		{
			for (iCgram=0;iCgram<32;iCgram+=2) 
				WriteData( Cdotlib[(Base+ii)*32+ij+iCgram] );	// 将制定的数据块写入 cgram
		}
		
	}
}

#endif

	

/*============================================================================
 汉字写入子程序(文本方式)
 在文本方式下显示汉字,	首先要建立汉字Cgram, 要定义汉字代码.
 在文本方式下写汉字需要写入4 个代码以组成一个汉字 
 每8字节组成一个点阵Ascii小区,4个小区组合成一个汉字所以需要4个代码
 ============================================================================*/
void PutCdotInAlpha( uchar Ox, uchar Oy, uchar Cnumber ) 
{

uint tempPtr;
uchar tempCount;
		
	tempPtr = (uint)Oy * paraP9 + Ox;
	WriteCommand( CsrDirD );					// CSRDIR 代码(下移)

	for(tempCount=0;tempCount<2;tempCount++)
	 {
		
		WriteCommand( CsrW );					// CSRW 代码,光标指针设置
		WriteData( (uchar)(tempPtr &0xff) );	// 设置光标地址CSR
		WriteData( tempPtr /256 + BasePart1 );
		WriteCommand( mWrite );					// 代码0x42,数据写入指令

		WriteData( Cnumber++ );					// 写入汉字代码

		WriteData( Cnumber++ );					// 写入汉字代码
		tempPtr++;								// 修正光标地址
	}
}

/*====================================================
;  绘点子程序,携入参数attr决定写或擦点
 ====================================================*/
void Point(uint Px, uchar Py, uchar attr ) 
{

	uint tempPtr;
	uchar tempD,tempP;
		
	tempPtr = (uint)Py * paraP9 + (Px / 8);			// 计算地址
	WriteCommand( CsrDirD );						// CSRDIR 代码(光标自动下移)
	WriteCommand( CsrW );							// 设置光标地址
	WriteData( (uchar)(tempPtr & 0xff) );
	WriteData( (uchar)(tempPtr /256 +BasePart2) );
	WriteCommand( mRead );							// 读显示ram指令
	tempD = ReadDataLcm();							// 读取当前显示数据
	//tempP = 1<<(uchar)(7-Px & 0x0007);
    tempP = Px - ((Px / 8) * 8);
	tempP = (0x80 >> tempP);

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

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

}

/*======================== 清显示 32K RAM区(清屏)子程序 ======================*/

void LcmClear( void ) 
{

	uint i1=32768;

	WriteCommand( CsrDirR ); 			// 光标移动方向定义:自动右移
	WriteCommand( CsrW );				// 光标Locate,定位
	WriteData( 0 );						// 写入参数CSRL设置参数光标指针低8位
	WriteData( 0 );						// 写入参数CSRH设置参数光标指针高8位
	WriteCommand( mWrite );				// 数据写入指令,代码0x42
	while(i1--)	
	{

		WriteData( 0x0 );	// 写入数据0
	}
}

#if 0
/*======================== 清显示 图形 RAM区(清屏)子程序 ======================*/
void LcmClear_G( void ) 
{

	uint i1=0x3400;

	WriteCommand( CsrDirR ); 			// 光标移动方向定义:自动右移
	WriteCommand( CsrW );				// 光标Locate,定位
	WriteData( 0xff );						// 写入参数CSRL设置参数光标指针低8位
	WriteData( 0x3f );						// 写入参数CSRH设置参数光标指针高8位
	WriteCommand( mWrite );				// 数据写入指令,代码0x42
	while(i1--)	
	{

		WriteData( 0x0 );	// 写入数据0
	}
}



/*============================================================================
 光标位定位,用于在1区图形方式下。
 输入参数约定:	x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标。
 				y...垂直方向以行线定位的坐标,可以定位到点单位。
				左上角约定坐标为( 0, 0 )

 ============================================================================*/
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位
}

#endif





#if 0

/************************************************/
/*画圆。数学方程(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);
	}
}

#endif


//显示BMP图片
void BmpDisp( uint Ox, uchar Oy, uchar width, uchar height, uchar code *pbmp ) 
{
	uint Optr;
	uchar tempCount1,tempCount2;
		
	Optr = (uint)Oy * paraP9 + Ox;
	WriteCommand( CsrDirR );						// 自动右移。

	for (tempCount1=0;tempCount1<height;tempCount1++) 
	{
		WriteCommand( CsrW );						// 光标定位指令
		WriteData( (uchar)(Optr &0xff) );			// 设置光标地址CSR
		WriteData( Optr /256 +BasePart2 );
		WriteCommand( mWrite );						// ram写指令
		

        for(tempCount2=0;tempCount2<width/8;tempCount2++) 
		{
			WriteData(pbmp[tempCount1*20+tempCount2]);		// 写入数据
		}
		Optr+=paraP9;
	}
}

/*==============================================================================
; 汉字写入子程序(图形方式)。每次调用输出一个汉字
; 支持图形方式使用,完成汉字点阵码的输出。
; 携入参数: Ox,Oy....写入显示的左上角坐标,Ox是以字节单位,Oy以行扫描线单位
			Ptr......汉字码,库内的排列编码,大型程序时请改用unsigned int类型
; 无返回数据。
 ==============================================================================*/
void PutCdotInGraph( uint Ox, uchar Oy, uchar DotWidth, uchar code *Disp) 
{
	uint Optr;
	uchar tempCount1,tempCount2,nByte;
		
	Optr = (uint)Oy * paraP9 + Ox;
	nByte = DotWidth/8;
	WriteCommand( CsrDirD );						// 自动下移

	for (tempCount1=0;tempCount1<nByte;tempCount1++) 
	{
		WriteCommand( CsrW );						// 光标定位指令
		WriteData( (uchar)(Optr &0xff) );			// 设置光标地址CSR
		WriteData( Optr /256 +BasePart2 );
		WriteCommand( mWrite );						// ram写指令
		
		switch(DotWidth)
		{

			case 16:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) 
						{
							WriteData( *Disp );		// 写入数据
                            Disp++;
						}
						break;
			case 24:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) 
						{
							WriteData( *Disp );		// 写入数据
							Disp++;
						}
						break;
		}
		Optr++;
	}
} 





//设置光标闪烁/不显示
void SurFlash(uchar x0,uchar y0,uchar att)
{
    uint iTemp;
    iTemp = (uint)y0/8 * paraP9 + x0/8;	// 光标位置到实际ram地址换算
	
	WriteCommand( CsrDirR );					// 自动右移光标指向
	
	WriteCommand( CsrW );						// 制定光标位置
	WriteData( (uchar)(iTemp &0xff) );			// 设置光标地址CSR
	WriteData( (uchar)(iTemp /256 + BasePart1) );
    WriteCommand( CsrForm );		// 光标形状设置,代码0x5d
	WriteData( 0x05 );				// 设置光标水平点为CSX=8
	WriteData( 0x87 );				// 光标为块状形式,垂直点为CSY=8
	WriteCommand( DispOn );			// 写入指令DISP ON/OFF代码,后续参数:
    if(att==1)
	    WriteData( 0x57 );				// 01 01 01 10显示1~4区开显示,光标闪烁显示 
    else
        WriteData( 0x54 );
}

⌨️ 快捷键说明

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