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

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

📁 这是关于液晶320240的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,		// 工
		0x18,0x3F,0xFF,0xFC,0x00,0x18,0x00,0x00,
		0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,
		0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,
		0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,
		0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,
		0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,
		0x00,0x00,0x18,0x0C,0x7F,0xFF,0xFE,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

		0x02,0x08,0x00,0x03,0x8E,0x00,0x03,0x0C,		// 作
		0x00,0x03,0x0C,0x00,0x07,0x18,0x0C,0x06,
		0x1F,0xFE,0x06,0x36,0x00,0x0F,0x26,0x00,
		0x0E,0x66,0x00,0x1E,0x46,0x00,0x36,0x86,
		0x18,0x26,0x07,0xFC,0x46,0x06,0x00,0x86,
		0x06,0x00,0x06,0x06,0x00,0x06,0x06,0x0C,
		0x06,0x07,0xFE,0x06,0x06,0x00,0x06,0x06,
		0x00,0x06,0x06,0x00,0x06,0x06,0x00,0x06,
		0x06,0x00,0x06,0x06,0x00,0x04,0x04,0x00,

		0x00,0x30,0x00,0x00,0x18,0x00,0x10,0x10,		// 室
		0x0C,0x1F,0xFF,0xFE,0x30,0x00,0x0C,0x30,
		0x00,0x10,0x60,0x00,0xC0,0x07,0xFF,0xE0,
		0x00,0x60,0x00,0x00,0xC2,0x00,0x01,0x81,
		0x80,0x02,0x00,0x60,0x0F,0xFF,0xF0,0x07,
		0x10,0x30,0x00,0x1C,0x10,0x00,0x18,0x00,
		0x00,0x18,0x60,0x0F,0xFF,0xF0,0x00,0x18,
		0x00,0x00,0x18,0x00,0x00,0x18,0x0C,0x7F,
		0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00
};



Uchar code test1[]={"图形shuai文本test测试12345"};


//##################################################################################
 //函数声明
void LcmInition( void );                 //  函数1.初始化子程序

void WriteData( Uchar dataW );           //  函数2.写参数及显示数据子程序

Uchar ReadDataLcm( void );               //  函数3.读参数及显示数据子程序

void WriteCommand( Uchar CommandByte );  //  函数4. 写指令代码子程序

void Delay( Uint );                      //  函数5.延时子程序

void DelayMs(Uint tt);                   //  函数6.长延时程序

void PutCdotInGraph( Uint Ox, Uchar Oy, Uchar Cnumber,Uchar DotWidth,Uchar att);
                                         //  函数7.单个汉字写入子程序(图形方式)

void LcmClear( void );                   //  函数8. 清显示 32K RAM区(清屏)子程序

void Locatexy(Uchar x,Uchar y, Uchar attribs);
                                         //  函数9.光标位定位

Uchar dprintf(Uchar x,Uchar y, char code *ptr, Uchar att);
                                         //  函数10.ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
void Point(Uint Px, Uchar Py, Uchar attr,Uchar qu );
                                         //  函数11.绘点子程序
void Linexy(Uint x0,Uchar y0,Uint xt,Uchar yt,Uchar att,Uchar qu);
                                         //  函数12.画线。任意方向的斜线,直线数学方程	aX+bY=1

void Rectangle( Uint X0, Uchar Y0, Uint wide,Uchar hight,Uchar att,Uchar qu );
                                         //  函数13.矩形绘制函数

void circle(Uint Ox,Uchar Oy,Uchar Rx,Uchar attr,Uchar qu);
                                         //  函数14.画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2

void RollLaft( Uchar,Uchar );            //  函数15.滚动往左

void Rollright( Uchar,Uchar);            //  函数16.滚动往右

void RollDown( Uchar,Uchar );            //  函数17.滚动往下

void RollUp( Uchar,Uchar );              //  函数18.滚动往上

void TextDisp( Uchar Ox,Uchar Oy, Uchar code *ptr );
                                        //  函数19.文本方式下的西文字符串显示,本函数只写入第3显示区

void triangle( Uint X0, Uchar Y0, Uint X1, Uchar Y1,Uint X2, Uchar Y2,Uchar att,Uchar qu );
                                         //  函数20.三角形绘制函数




//####################函数1.初始化子程序#####################################################
//
// 初始化子程序  对SED1335控制器进行初始化
// 参数
//******************************************************************
void LcmInition( void ) {

        Uchar i;

	WriteCommand( SystemSet );			// 系统参数设置
	for (i=0;i<8;i++) {
		WriteData( ParaSysTable8[i] );	//
	}

	WriteCommand( Scroll ); 			//设定显示区域起始地址
	for (i=0;i<10;i++) {
		WriteData( ParaScrTableA[i] );
	}

	WriteCommand( HdotScr );		// 写入点位移指令代码
	WriteData( 0 );					// 写入P1参数
	WriteCommand( Ovlay );			// 显示合成方式设置
	WriteData( 4 );					// 0000 0100 显示一区图形,三区文本属性,二重"或"合成
	WriteCommand( DispOn );			// 写入指令代码
	WriteData( 0x54 );				// 显示 1~4 区开显示,光标关显示
}
//################函数2.写参数及显示数据子程序#############################
//
// 写参数及显示数据子程序
//入口参数:dataW     将数据dataW 写入SED1335
//*******************************************************
void WriteData( Uchar dataW ) {

	LcmWdataPort = dataW;
}
//################函数3.读参数及显示数据子程序#############################
//
// 读参数及显示数据子程序
// 读出的参数 LcmRdataPort
//******************************************************
Uchar ReadDataLcm( void ) {
	return LcmRdataPort;
}
//################函数4. 写指令代码子程序##################################
//
// 写指令代码子程序
//入口参数:CommandByte     将指令CommandByte写入SED1335
//******************************************************
void WriteCommand( Uchar CommandByte ) {

	LcmCmdPort = CommandByte;
}
//################函数5.延时子程序#########################################
//延时子程序1
//短暂延时参数tt
void Delay( Uint tt ) {

	while( tt-- );
}
//################函数6.长延时程序#########################################
// 延时程序2
// 参数:count
// 延时: 1MS *COUNT
   void DelayMs(Uint count)
   {
    Uint i,j;

    for(i=0;i<count;i++)
       for(j=0;j<120;j++)
              ;
   }
//################函数7.单个汉字写入子程序(图形方式)########################
// 汉字写入子程序(图形方式)。每次调用输出一个汉字
// 支持图形方式使用,完成汉字点阵码的输出。
// 携入参数: Ox,Oy....写入显示的左上角坐标,Ox是以字节单位,Oy以行扫描线单位
//           DotWidth为汉字点数选择   这里提供16点和24点两种选择
//	    cnumber 为字码表中的位置即第几个字
//          att 为写入区位选择,为0选择第一区,为1选择第二区
//需要显示24点的汉字要在程序里建24点字库表

void PutCdotInGraph( Uint Ox, Uchar Oy,Uchar Cnumber,Uchar DotWidth,Uchar att ) {
 Uint tempPtr,Optr;
Uchar tempCount1,tempCount2,nByte;
        
	Optr = (Uint)Oy * paraP9 + Ox;
	nByte = DotWidth/8;
	WriteCommand( CsrDirD );						// 自动右移。
	tempPtr = (Uint)Cnumber * DotWidth*nByte;
        
        if(att)Optr += BasePart2*256;
        
	for (tempCount1=0;tempCount1<nByte;tempCount1++) {

		WriteCommand( CsrW );						// 光标定位指令
		WriteData( (Uchar)(Optr &0xff) );		// 设置光标地址CSR
		WriteData( (Uchar)(Optr /256 ) );
		WriteCommand( mWrite );						// ram写指令

		switch(DotWidth){

			case 16:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
						WriteData( Cdotlib[Cnumber].Msk[tempCount2*2+tempCount1] );		// 写入数据
						}
						break;
			case 24:	for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
						WriteData( Cdot24lib[tempPtr] );		// 写入数据
						tempPtr += nByte;
						}
						break;
		}
		tempPtr = Cnumber * DotWidth*nByte + tempCount1 + 1;
		Optr++;
	}
}
//################函数8. 清显示 32K RAM区(清屏)子程序######################
// 清显示 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
	}
}
//################函数9.光标位定位###########################################
// 光标位定位,用于在1区图形方式下。
// 输入参数:x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标。
// 	     y...垂直方向以行线定位的坐标,可以定位到点单位.
//           attribs=1则指向2区     BasePart2为2区显示缓存的高位   2区显示缓存的低位为0
//           规定左上角约定坐标为( 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位
}
//###################函数10.ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数###########################################################################################
// ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
// 输入参数约定:
//	x,y显示字符串的左上角xy坐标.x    横向字节位置; y..一条扫描线定位
//	*ptr...字符串指针,所指的是要显示的字符串 不限定大小
//	att....显示区标志,0...第一区;1...第二区
//  返回参数:输出字串长度,留意汉字一个算两个

Uchar dprintf(Uchar x,Uchar y, char code *ptr, Uchar att)
{
       Uchar  c1,c2;
	Uchar i,j,uLen,uRow,uCol,temp;
	Uint  k;
	uRow = x;
	uCol = y;
	uLen=0;
	WriteCommand( CsrDirD ); 						// 光标移动方向定义:自动下移
	Locatexy(uRow,uCol,att);						//起点定位
	while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;};	//探测字串长度
	i=0;
	while(i<uLen)
	{
		c1 = ptr[i];
		c2 = ptr[i+1];

//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
		if(c1 <=128)								// ASCII
		{
			if (c1 >= 0x10)	{
				WriteCommand( mWrite );				// 写数据(命令)
				for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]);
			}
			uRow++;									// 列数加1
		}
		else										// 中文
		{
			for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++)	// 查找定位
			{
				if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1]))
					break;
			}
			for(k=0;k<2;k++)						// 分16行输出
			{
				Locatexy(uRow+k,uCol,att);
				WriteCommand( mWrite );				// 写数据(命令)

				for(temp=0;temp<16;temp++) WriteData( Cdotlib[j].Msk[temp*2 + k]);
			}
			uRow +=2;								// 光标右移一大格
			i++;
		}
		if(uRow >= 40)								// 光标后移
		{
			uCol += 16;								// Y坐标
			uRow = 0;					    		// X坐标
			if( uCol >= 240 ) uCol = 0;
		}

		Locatexy(uRow,uCol,att);
		i++;
	}
	return uLen;
        									//返回字串长度,汉字按2字节计算
}
//#######################函数11。绘点子程序##########################################################################
//  绘点子程序,携入参数X坐标的最高位决定写或擦点
//  入口参数:(px,py)为点坐标 px可以超过256
//              参数 attr  attr=1为绘制图形 attr=0为擦除图形

void Point(Uint Px, Uchar Py, Uchar attr,Uchar qu ) {

Uint tempPtr;
Uchar tempD,tempP;

	tempPtr = (Uint)Py * paraP9 + (Px & 0x7fff)/8;	// 去除最高位(显示属性)

        if(qu)tempPtr += BasePart2*256;	// 如果需要就指向第二区,加上第二区首地址

	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;				// 消点

⌨️ 快捷键说明

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