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

📄 sed1330.h

📁 ucos51通用板调试系统
💻 H
📖 第 1 页 / 共 2 页
字号:
	LCDORDER=0X42;
	for(counter=0;counter<16;counter++)
    	LCDDATA=buff[counter];
	

    /*以下写字符的右部*/
	curadd.add=curadd.add+1;         /*地址加1,移到右部*/
	
	LCDORDER=0X4F;                   /*确定光标移动方向为向下*/
	
	LCDORDER=0X46;                   /*确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	flag1=(0XFF)>>offset;
	flag2=~flag1;
	flag1=0XFF>>offset;
				
	LCDORDER=0X43;                   /*由光标处开始,向下读入16个数据*/
	for(counter=0;counter<16;counter++)
		buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter]<<(8-offset));
	
	LCDORDER=0X46;                   /*再次确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	LCDORDER=0X42;
	for(counter=0;counter<16;counter++)
		LCDDATA=buff[counter];
	
////////////////////////////////////////////////
	LCDORDER=0X46;                         /*确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	
	/*以下写字符的左部*/
	LCDORDER=0X4F;                         /*确定光标移动方向为向下*/
	
	flag1=(0XFF)<<(8-offset);
	flag2=~flag1;	
		
	LCDORDER=0X43;                         /*由光标处开始,向下读入16个数据*/                                        
	for(counter=0;counter<16;counter++)
    	buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter+16]>>offset);
    
	LCDORDER=0X46;                         /*再次确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	LCDORDER=0X42;
	for(counter=0;counter<16;counter++)
		LCDDATA=buff[counter];
	
	
	curadd.add=curadd.add+1;         /*地址加1,移到右部*/
	
	LCDORDER=0X4F;                   /*确定光标移动方向为向下*/
	
	LCDORDER=0X46;                   /*确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	flag1=(0XFF)>>offset;
	flag2=~flag1;
	flag1=0XFF>>offset;
				
	LCDORDER=0X43;                   /*由光标处开始,向下读入10个数据*/
	for(counter=0;counter<16;counter++)
		buff[counter]=(LCDORDER&flag1)|(GB_16[chatnum].Msk[counter+16]<<(8-offset));
	
	LCDORDER=0X46;                   /*再次确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	LCDORDER=0X42;
	for(counter=0;counter<16;counter++)
		LCDDATA=buff[counter];
}
void myprintf(unsigned int sad,unsigned char bcenter,unsigned int hnum,unsigned char vnum,unsigned char *fmt, ...)
{
	va_list arg_ptr;
	unsigned char tmpBuf[64];				// LCD显示数据缓冲区
	unsigned char i,uLen,j;
	unsigned char c1,c2;
	
	va_start(arg_ptr,fmt);
	uLen=(unsigned char)vsprintf(tmpBuf,fmt,arg_ptr);
	va_end(arg_ptr);
	
	if(bcenter)
		hnum=hnum-(uLen*4);
	i=0;
	while(i<uLen)
	{
		c1 = tmpBuf[i];
		c2 = tmpBuf[i+1];
		if(c1<128)//ASCII
		{
			if(c1<31)
			{
				if(c1==13||c1==10)
				{					
					i++;
					if(vnum<224)
						vnum+=16;
					else
						vnum=0;
					hnum=0;
					continue;
				}		
				c1=31;
			}
			wrchatasc(sad,hnum,vnum,(c1-31));
			hnum+=8;
		}
		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])
				{
					wrchat(sad,hnum,vnum,j);
					break;
				}
			}			
			hnum+=16;
			i++;
		}
		i++;
		if(hnum>312)
		{
			hnum=0;
			if(vnum<224)
				vnum+=17;
			else
				vnum=0;
		}		
	}
}

#if Number361
void wrnumber(unsigned int sad,unsigned char hnum,unsigned char vnum,unsigned char chatnum)
{
	unsigned char counter;
	union {unsigned int add;
	struct {unsigned char addhi;unsigned char addlo;}addhalf;
	}curadd;
	curadd.add=vnum*(APL)+hnum+sad;      /*计算出首址*/
	LCDORDER=0X46;                         /*确定光标地址*/
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	
	
	LCDORDER=0X4F;                         /*确定光标移动方向为向下*/
	LCDORDER=0X42;
	for(counter=0;counter<36;counter++)
    	LCDDATA=mynumbermsk[chatnum][counter];
    //以下写字符的右部
	curadd.add++;	
	LCDORDER=0X46;                   
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	LCDORDER=0X42;
	for(counter=0;counter<36;counter++)
    	LCDDATA=mynumbermsk[chatnum][counter+36];
	curadd.add++;	
	LCDORDER=0X46;                   
	LCDDATA=curadd.addhalf.addlo;
	LCDDATA=curadd.addhalf.addhi;
	LCDORDER=0X42;
	for(counter=0;counter<36;counter++)
    	LCDDATA=mynumbermsk[chatnum][counter+72];
    
}

void mynuprintf(unsigned int sad,unsigned char hnum,unsigned char vnum,unsigned char *fmt, ...)
{
	va_list arg_ptr;
	unsigned char tmpBuf[16];				// LCD显示数据缓冲区
	unsigned char i,uLen;
	
	va_start(arg_ptr,fmt);
	uLen=(unsigned char)vsprintf(tmpBuf,fmt,arg_ptr);
	va_end(arg_ptr);
	
	i=0;
	hnum=hnum-(uLen*3);
	while(i<uLen)
	{
		if(tmpBuf[i]<58&&tmpBuf[i]>47)
		{
			wrnumber(sad,hnum,vnum,(tmpBuf[i]-47));
			hnum+=3;
		}
		else
		{
			if(tmpBuf[i]=='.')
			{
				wrnumber(sad,hnum,vnum,0);
				hnum+=1;
			}
			else
			{
				if(tmpBuf[i]=='-')
					wrnumber(sad,hnum,vnum,12);
				else
					wrnumber(sad,hnum,vnum,11);
				hnum+=3;
			}			
		}
		i++;		
	}
}

#endif


/*void rectangl(unsigned int sad,unsigned int strhnum,unsigned char strvnum,unsigned int endhnum,unsigned char endvnum)
{
	linex(sad,strvnum,strhnum,endhnum);
	linex(sad,endvnum,strhnum,endhnum);
	liney(sad,strhnum,strvnum,endvnum);
	liney(sad,endhnum,strvnum,endvnum);
}*/
/***********************************************************
*   程序名称: RECTANGLE()                                 *
*   程序用途: 在指定层的指定位置填充矩形                  *
*   输入参数: sad       指定层的内存起始地址              *
*             strhnum   起始点横坐标                      *
*             strvnum   起始点纵坐标                      *
*             endrhnum  结束点横坐标                      *
*             endvnum   结束点纵坐标                      *
*             fill      填充类型(1:填充1;0填充0)          *
***********************************************************/
void rectangle(unsigned int sad,unsigned int strhnum,unsigned char strvnum,unsigned int endhnum,unsigned char endvnum,unsigned char fill)
{
	xdata unsigned char count1;
	xdata unsigned char count2;
	xdata LCD_BUFF[240];                          /*屏幕一列的缓冲*/ 
	xdata unsigned char stroffset;
	xdata unsigned char endoffset;
	
	xdata unsigned char flag_str;                 /*用于屏蔽起始列的数值*/
	xdata unsigned char flag_end;                 /*用于屏蔽结束列的数值*/ 
	
	xdata union {unsigned int add;
	struct {unsigned char addhi;unsigned char addlo;}addhalf;
	}stradd,endadd;
	
	
	if(fill==0){fill=0;}                           /*根据要写1或者写1*/
	else{fill=0XFF;}
	
	stradd.add=strvnum*(APL)+strhnum/8+sad;        /*计算出水平起始点的地址*/
	endadd.add=strvnum*(APL)+endhnum/8+sad;        /*计算出水平结束点的地址*/
	
	stroffset=strhnum-(strhnum/8)*8;               /*计算出水平起始点字符内的偏移量*/
	endoffset=endhnum-(endhnum/8)*8;               /*计算出水平结束点字符内的偏移量*/ 
	
	flag_str=0XFF<<(8-stroffset);               
	flag_end=0XFF>>(endoffset+1);    
	
	if(stradd.add==endadd.add)                     /*如果水平的起始点的地址和结束点的地址相同*/
	{
		flag_str=flag_str|flag_end;
	}                /*起始结束在同一字节内,头部尾部不能改写*/
	
	
	/*+++++++++++++++读写起始列的屏幕数据+++++++++++++++*/
	LCDORDER=0X46;                                 /*设定光标地址*/
	LCDDATA=stradd.addhalf.addlo;
	LCDDATA=stradd.addhalf.addhi;                  /*确定光标地址*/
	
	
	LCDORDER=0X4F;                                 /*确定光标移动方向为向下*/
	
	LCDORDER=0X43;                                 /*准备读*/
	for(count1=0;count1<=(endvnum-strvnum);count1++)
    {LCD_BUFF[count1]=LCDORDER;} 
	
	/*+++++++++++++++处理起始列的屏幕数据+++++++++++++++*/ 
	for(count1=0;count1<=(endvnum-strvnum);count1++) 
    {LCD_BUFF[count1]=( LCD_BUFF[count1] & flag_str ) | ( fill & (~flag_str) );}  
	/*++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
	
	
	/*+++++++++++++++返回起始列的屏幕数据+++++++++++++++*/
	LCDORDER=0X46;                                 /*设定光标地址*/
	LCDDATA=stradd.addhalf.addlo;
	LCDDATA=stradd.addhalf.addhi;                  /*确定光标地址*/
	
	
	LCDORDER=0X4F;                                 /*确定光标移动方向为向下*/
	
	LCDORDER=0X42;                                 /*准备写*/
	for(count1=0;count1<=(endvnum-strvnum);count1++) 
    {LCDDATA=LCD_BUFF[count1];} 
	/*+++++++++++++++结束列的屏幕数据改写+++++++++++++++*/
	
	if(stradd.add<endadd.add)                      /*如果水平的起始点的地址和结束点的地址不相同*/ 
	{
		/*+++++++++++++++读写结束列的屏幕数据+++++++++++++++*/
		LCDORDER=0X46;                             /*设定光标地址*/
		LCDDATA=endadd.addhalf.addlo;
		LCDDATA=endadd.addhalf.addhi;              /*确定光标地址*/
		
		
		LCDORDER=0X4F;                             /*确定光标移动方向为向下*/
		
		LCDORDER=0X43;                             /*准备读*/
		for(count1=0;count1<=(endvnum-strvnum);count1++)
		{LCD_BUFF[count1]=LCDORDER;} 
		
		/*+++++++++++++++处理结束列的屏幕数据+++++++++++++++*/ 
		for(count1=0;count1<=(endvnum-strvnum);count1++)
		{LCD_BUFF[count1]=( LCD_BUFF[count1] & flag_end ) | ( fill & (~flag_end) );}  
		
		/*+++++++++++++++返回结束列的屏幕数据+++++++++++++++*/
		LCDORDER=0X46;                               /*设定光标地址*/
		LCDDATA=endadd.addhalf.addlo;
		LCDDATA=endadd.addhalf.addhi;                /*确定光标地址*/
		
		
		LCDORDER=0X4F;                               /*确定光标移动方向为向下*/
		
		LCDORDER=0X42;                               /*准备写*/
		for(count1=0;count1<=(endvnum-strvnum);count1++)
		{LCDDATA=LCD_BUFF[count1];}    	   
		
	}
	
	/*+++++++++++++++中间列的屏幕数据改写+++++++++++++++*/
	if((endadd.add-stradd.add)>=2 )               /*结束地址大于起始地址2个以上,说明有中间列*/ 
	{
		stradd.add=stradd.add+1;                    /*水平起始地址加1*/
		
		for(count2=( (strhnum/8)+1);count2<=((endhnum/8)-1);count2++)
		{
			/*+++++++++++++++处理中间列的屏幕数据+++++++++++++++*/ 
			for(count1=0;count1<=(endvnum-strvnum);count1++)
			{LCD_BUFF[count1]=fill;}   
			
			/*+++++++++++++++返回中间列的屏幕数据+++++++++++++++*/
			LCDORDER=0X46;                           /*设定光标地址*/
			LCDDATA=stradd.addhalf.addlo;
			LCDDATA=stradd.addhalf.addhi;            /*确定光标地址*/
			
			LCDORDER=0X4F;                           /*确定光标移动方向为向下*/
			
			LCDORDER=0X42;                           /*准备写*/
			for(count1=0;count1<=(endvnum-strvnum);count1++)
			{
				LCDDATA=LCD_BUFF[count1];
			}
			stradd.add=stradd.add+1;                 /*水平起始地址加1*/
		}   
	}   
}  
//////////////////////////////ENDSED1330////////////// 

⌨️ 快捷键说明

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