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

📄 1335c51.c.bak

📁 这是一个成熟的用于驱动步进马达的程序,我们用于调试螺钉的.
💻 BAK
📖 第 1 页 / 共 3 页
字号:
[说明]:线状光标的形状由CRX确定其长度,由CRY确定其所占的显示行数,当CRY=FY时,
光标显示底线形式。光标显示仅在文本方式下有效。
*/

//Cgram首地址设置.A0=1..写指令/0...读写参数;/WR=0;/RD=1.后续参数2字节
#define CgramAdr	0x5c

/* 该指令设置了CGRAM在显示存储器内的起始地址SAG.从该地址SAG起的2K字节空间(M2=0)
或4K字节空间(M2=1)为CGRAM区域。该指令带有两个参数:
   P1    [  SAGL  ]
   P2    [  SAGH  ]
SAG.... CGRAM起始地址。SAGL为SAG的低8位,SAGH为SAG的高8位。
[说明]SAG所指向对应的是字符代码0的字模首地址,所以对于CGRAM1的首地址应该是SAG+
0x80*8,CGRAM2区域的字符代码为0xE0~0xFF,但是由于控制部在CGRAM2的首地址上安置了异
或0x40的电路,所以,CGRAM2的地址应按0xA0~0xBF计算,即CGRAM2的首地址为SAG+0xA0*8
*/

//光标移动方向设置。A0=1;/WR=0;/RD=1.后续参数:无
#define CsrDirR		0x4c
#define CsrDirL		0x4d
#define CsrDirU		0x4e
#define CsrDirD		0x4f

/* 该指令规定了光标指针CSR在计算机读写显示数据后自动修复的方向,从显示效果来说,
就是光标移动的方向设置。该指令的两个参数位DR1,DR0:
		===========================
		  DR1 DR0   自动定位方向
		===========================
		   0   0    右
		   0   1    左
		   1   0    上
		   1   1    下
		===========================

*/
//光标指针设置。A0=1..写指令/0...读写参数;/WR=0/1;/RD=1/0(指令/后续参数读写).后
//续参数2字节

#define	CsrW		0x46

/* 该指令设置了光标指针CSR.该指针有两个功能:1。作为当前光标显示的位置;2。作为
显示存储器当前的地址指针。2个参数:CSRL,CSRH

[说明]:当光标指针指向有效显示区域之外时,光标将自动消失,但不影响显示数据的读写。
光标指针在计算机的每次读写显示数据操作后,将根据最近设置的光标指针移动方向而自动
修正。光标指针不受画面滚动操作的影响。
*/

//读取光标指针。A0=1..写指令/0...读写参数;/WR=0;/RD=1.后续参数2字节
#define	CsrR		0x47

/* 该指令代码写入后,计算机将从SED1335等数据通道读出当前的光标指针值。光标指针读
出的顺序是先CSRL再CSRH.
*/

//数据写入设置。A0=1..写指令/0...读写参数;/WR=0;/RD=1.后续参数N字节
#define	mWrite		0x42

/*该指令写入后将允许计算机连续的向显示存储器内写入数据。写入的单元地址由光标指针
CSR提供,写操作完成后光标指针自动根据所设置的光标指针移动方向进行修改。显示数据
写入操作在计算机写入下一指令代码后结束。
*/

//数据读取设置。A0=1..写指令/0...读写参数;/WR=0;/RD=1.后续参数N字节
#define	mRead		0x43

// 程序参数定义,根据用户选择的LCM型号修改
#define Busy		0x40		// 忙状态标志位0b0100 0000
#define	paraP9		0x28		// 相对于320 X 240
















//菜单光标控制程序,控制光标开/关
void SurCtl(uint x0, uchar y0, uint xt, uchar yt, uchar att)
{
    Rectangle(x0-7, y0-7, xt+7, yt+7, att);
    Rectangle(x0-6, y0-6, xt+6, yt+6, att);
    Rectangle(x0-5, y0-5, xt+5, yt+5, att);
    if(att==0)
        {
            Linexy(x0-8,y0-8,x0-4,y0-4,1);
            Linexy(x0-8,yt+8,x0-4,yt+4,1);
            Linexy(xt+8,y0-8,xt+4,y0-4,1);
            Linexy(xt+8,yt+8,xt+4,yt+4,1);
        }
}







//============================== 西文显示演示程序 ==============================
// 仅仅用于文本方式下的西文字符串显示,本函数只写入第3显示区

void TextDisp( uchar Ox,uchar Oy, uchar  *ptr ) 
{

	uchar TexLength=0,ii;
	uint  iTemp;

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

	iTemp = Oy*paraP9+Ox;
	//WriteCommand( CsrForm );		// 光标形状设置,代码0x5d
	//WriteData( 0x07 );				// 设置光标水平点为CSX=8
	//WriteData( 0x07 );				// 光标为块状形式,垂直点为CSY=8
	//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 + BasePart1) );	

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

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

		WriteData( ptr[ii] );					// 写入显示字符代码
	}
    WriteCommand( DispOn );
    WriteData( 0x54 );
}


//数字显示,por为是表示负数,要显示“-”
void NumDisp(uchar x0, uchar y0, int dat)
{
    uint temp;
    uint tempPtr;
    tempPtr = (uint)y0*paraP9+x0-1;
    WriteCommand(CsrDirR);
    WriteCommand( CsrW );						// 制定光标位置
	WriteData( (uchar)(tempPtr &0xff) );			// 设置光标地址CSR
	WriteData( (uchar)(tempPtr /256 + BasePart1) );	

	WriteCommand( mWrite );						// 当前位置写入数据指令
    if(dat<0)
    {
        WriteData('-');
        dat-=1;
        dat=~dat;
    }
    else
    {
        WriteData(' ');
    }
    WriteData(dat/1000+48);
    temp=dat%1000;
    WriteData(temp/100+48);
    temp%=100;
    WriteData(temp/10+48);
    WriteData(temp%10+48);
}



/********************************************/
/*画线。任意方向的斜线,直线数学方程	aX+bY=1	*/
/********************************************/
// 参数类型有待修改
void Linexy(uint x0,uchar y0,uint xt,uchar yt,uchar att)
{
	register uchar 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;
		}
	}
}


/********************************************/
/*画矩形	*/
/********************************************/
void Rectangle(uint x0, uchar y0, uint xt, uchar yt, uchar att)
{
    Linexy(x0, y0, x0, yt,att);
    Linexy(x0, yt, xt, yt,att);
    Linexy(xt, yt, xt, y0,att);
    Linexy(xt, y0, x0, y0,att);
}




// 写指令代码子程序
void WriteCommand( uchar CommandByte ) 
{
	LCD_CS=0;    //选通
    LCD_A0=1;    //1为写命令或读数据
    LCD_WR=0;  
    LCD_RD=1;    //确定读信号不起作用
    LCM_DATA=CommandByte;  //向1335中写入指令代码     
    LCD_WR=1;
    LCD_CS=1; 
	//LcmCmdPort = CommandByte;
}

//---------------------------
// 写参数及显示数据子程序
void WriteData( uchar dataW ) 
{
	LCD_CS=0;    //选通
    LCD_A0=0;    //0为写数据、参数和读忙标志        
    LCD_RD=1;    //确定读信号不起作用
    LCM_DATA=dataW;  //向1335中写入指令代码    
    LCD_WR=0;   
    LCD_WR=1;
    LCD_CS=1;
	//LcmWdataPort = dataW;
}

//---------------------------
// 读参数及显示数据子程序
uchar ReadDataLcm( void ) 
{
	uchar Lcmdat;
    LCM_DATA=0xff;
    LCD_CS=0;    //选通
    LCD_A0=1;    //0为写数据、参数和读忙标志        
    LCD_RD=0;    //  
    LCD_WR=1;
    Lcmdat=LCM_DATA;
    LCD_RD=1;
    LCD_CS=1;    
  	return Lcmdat;
}

/*=====================================
 初始化子程序
======================================*/
void LcmInition( void ) 
{

	uchar i;
	delay_xms(500);			// 足够的延时确保Lcm已经准备好	
	WriteCommand( SystemSet );			// 系统参数设置
	for (i=0;i<8;i++) {				
		WriteData( ParaSysTable8[i] );	//
	}

⌨️ 快捷键说明

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