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

📄 edit.c

📁 C51源码.其内文件包含spi
💻 C
字号:


void dishz168(uchar x,uchar y,uint hzcode,bit convert)
{
	u_int locate;
       
    uchar  ch,i,j;
    uchar  color[4];

    i = cPen.bcolor << 4;
    j = cPen.fcolor << 4;
    color[0] = i | cPen.bcolor;
    color[2] = i | cPen.fcolor;
    color[1] = j | cPen.bcolor;
    color[3] = j | cPen.fcolor;

	SELECT_YD501

    locate.byt[0] = y + 0x10;
    locate.byt[1] = x;
    hzcode = hzcode << 4;

    for (i = 0; i < 16; i++)
    {
		ch = numfont[hzcode + i];
        if (convert) ch = ~ch;
        for (j = 3; j != 0xff; j--)
		{
			*((uchar xdata *)(locate.integer + j)) = color[ch & 0x3];
            ch=ch>>2;
		}
        locate.byt[0]++;
	}

    SELECT_P62256
}
/*
uint pnum(EDIT xdata *ppa)
{
	
	uchar fdot,bdot;
	uchar rfdot,rbdot;
	uchar temp;
	uchar xdata dat[8];
	uchar i;

	fdot = ppa->fdot;
	bdot = ppa->bdot;
	
	///////////////////////////////////////////////////////////
	///用户输入的小数点前实际
	for (i = 0; i < 6; i++)
	{
		if(ppa->buf[i] >= 10)
		{
			rfdot=i;
			break;
		}
	}

	////////////////////////////////////////////////////////////
	//用户输入的小数点后实际
    rbdot = 0;
    temp = 0;
	for (i = 0; i < 6; i++)
	{
		if (ppa->buf[i] == 10)
			temp = 1;
		if (temp && (ppa->buf[i] < 10)) 
			rbdot++;
	}
	
	if (rbdot > bdot) rbdot = bdot;
	if (rfdot > fdot) rfdot = fdot;
	

	for(i = 0; i < 6; i++)
	{
		if(i < fdot + bdot) dat[i] = 0;
		else dat[i] = 0xff;
	}


	for (i = 0; i <  rfdot; i++)
	{  
		dat[fdot - i - 1] = ppa->buf[rfdot - i -1];
	}


	for (i = 0; i < rbdot; i++)
	{
		dat[fdot + i] = ppa->buf[rfdot + i + 1];
	}

	for (i = 0; i < 6; i++)
	{
		if (dat[i] < 10) dat[i] = dat[i] + '0';
	}

	return(atoi(dat));
}
*/
/***************************************************/
/***************************************************/
/*显示16*16点阵的汉字 x:0--159 y:0--233*************/
/***************************************************/
/*
void dishz(uchar x,uchar y,uint hzcode, bit convert)
{
	uchar ch,i,j;
	uchar color[4];
	u_int locate1,locate;

	SELECT_YD501;	
	i = cPen.bcolor << 4;
    j = cPen.fcolor << 4;
    color[0] = i | cPen.bcolor;
    color[2] = i | cPen.fcolor;
    color[1] = j | cPen.bcolor;
    color[3] = j | cPen.fcolor;

	locate1.byt[0] = y + 0x10;
	locate1.byt[1] = x;
	locate.integer = locate1.integer;

	hzcode = hzcode << 5;
	
	for (i = 0; i < 32; i++)
	{
		ch = hzfont[hzcode + i];
		if (convert) ch =~ ch;
		
		for (j = 3; j != 0xff; j--)
		{
			*((uchar xdata *)(locate.integer + j)) = color[ch & 3];
			ch=ch>>2;
		}
		
		locate.byt[0]++;
		if (i == 15) 
			locate.integer = locate1.integer + 4;	
	}
	SELECT_P62256;
}

*/
void showcursor(uchar x,uchar y,bit convert)
{
	if(convert)		dishz168(x,y,21,0);
	else			dishz168(x,y,11,0);
}

EDITBUF xdata edit_buf;

void DisEdit(EDIT *edit);

uchar GetCurPos(EDIT *edit)
{
	uchar i;
	for (i = 0; i < 10; i++)
	{
		if (edit->buf[i] == 0xff) return(i);
	}
	return 0;
}

uchar EditItem(uchar ch, EDIT *edit)
{
	uchar i,fresh,retval,dot,cur_x,pre_x;

	fresh = 0;
	retval = 0;

	dot = 0;
	for (i = 0; i < 10; i++)
	{
		if (edit->buf[i] == 10) 
		{
			dot = 1;
			break;
		}
	}
 
    cur_x = GetCurPos(edit);
    pre_x = cur_x;

	switch(ch)
    {
	case BACK:
		if (cur_x == 0) 
			retval = EDIT_HEAD;
		else
		{
            cur_x--;
			edit->buf[cur_x] = 0xff;
		    fresh = 1;
            
            showcursor(edit->x + pre_x * CHAR_WIDTH, edit->y, 0);
		}
		break;

	case DOT:
		if ((edit->bdot == 0) || cur_x == 0) break;
		if (dot) break;
        
		edit->buf[cur_x] = 10;
        cur_x++;

		fresh = 1;
		break;

	case ZERO:
    case ONE:
	case TWO:
	case THREE:
	case FOUR:
	case FIVE:
	case SIX:
	case SEVEN:
	case EIGHT:
	case NINE:
        
		if ((cur_x >= edit->fdot) && (!dot))
		{
			if (edit->bdot == 0) 
				retval = EDIT_END;

			break;
		}
		if ((dot) && (cur_x > (edit->bdot + edit->fdot)))
		{
			retval = EDIT_END;
			break;
		}

		edit->buf[cur_x] = ch;
        cur_x++;
		fresh = 1;
		break;

	}

	if (fresh)
	{
        DisEdit(edit);
	}

    showcursor(edit->x + cur_x * CHAR_WIDTH, edit->y, CURSOR);
	return (retval);
}


#define PRE_EDIT  edit_buf->pre_edit
#define CUR_EDIT  edit_buf->cur_edit
#define EDIT_NUM  edit_buf->edit_num
#define EDIT      edit_buf->edit
/*
void EditNum(uchar ch, EDITBUF *edit_buf)
{
	uchar ret;

	ret = EditItem(ch, &EDIT[CUR_EDIT]);
  
	if (ret == EDIT_HEAD)  		ch = UP;
	else if (ret == EDIT_END)   ch = DOWN;
	else ch = ch;

	switch(ch)
	{
	case DOWN:
		PRE_EDIT = CUR_EDIT;
		CUR_EDIT++;
		if (CUR_EDIT >= EDIT_NUM)
			CUR_EDIT = 0;
		break;

    case UP:
		PRE_EDIT = CUR_EDIT;
		CUR_EDIT--;
		if (CUR_EDIT == 0xff)
			CUR_EDIT = EDIT_NUM - 1;
		break;

	default:
		break;
	}

   if (ch == UP || ch == DOWN)
   {
       	showcursor(EDIT[PRE_EDIT].x + GetCurPos(&EDIT[PRE_EDIT]) * CHAR_WIDTH,
 	    		   EDIT[PRE_EDIT].y, 0);
   }

}
*/

#undef PRE_EDIT  
#undef CUR_EDIT  
#undef EDIT_NUM  
#undef EDIT 
static void DisEdit(EDIT *edit)
{
     uchar i;
      
     for (i = 0; i < 10; i++)
     {
         if (edit->buf[i] == 0xff) break;
         else  dishz168(edit->x + i * 4, edit->y, edit->buf[i], 0);
     } 
}

/**************12864 display code****************************************/

void prl0(uchar com)
{
	uchar m1,m,i;
	D_I	=	0;
	P4  = 	PP4;
	for(i=0;i<250;i++)
	{
		m1 = K0;
		m=m1&0x80;
		if(m==0)
			break;
	}
	K0 = com;
}
void prr0(uchar com)
{
	uchar m1,m,i;
    
	D_I	=	0;
	P4  = 	PP4;

	for(i=0;i<200;i++)
	{
		m1=K1;
		m=m1&0x80;
		if(m==0)
			break;
	}
	K1=com;
}
void prl1(uchar dat)
{
	uchar m1,m,i;
	
	D_I	=	0;
	P4  = 	PP4;

	for(i=0;i<250;i++)
	{
		m1	=	K0;
		m	=	m1&0x80;

		if(m==0x0)
			break;
	}
	D_I	=	1;
	P4  = 	PP4;
	K0	=	dat;
}
void prr1(uchar dat)
{
	uchar m1,m,i;	
	
	D_I	=	0;
	P4  = 	PP4;

	for(i=0;i<250;i++)
	{
		m1	=	K1;
		m	=	m1&0x80;

		if(m==0)
			break;
	}
	D_I	=	1;
	P4  = 	PP4;
	K1	=	dat;
}
void IniLcd()
{
	byte com;

	com=0x3f;

	prl0(com);
	prr0(com);

	com=0xc0;

	prl0(com);
	prr0(com);
}
void clearlcd(void)
{
	uchar m1,com,dat;
	uchar i,j;
	m1=0;

	for(i=0;i<8;i++)
	{
    	com=i|0xb8;
    	prl0(com);
    	prr0(com);
    	com=0x40;
    	prl0(com);
    	prr0(com);
		for(j=0;j<0x40;j++)
		{
			dat=0;
			prl1(dat);
			prr1(dat);
		}
	}
}
void dishzXX(uchar x,uchar y,uchar z,bit cpls)
{
	uchar ch,com,dat,j;
	uint hznum,i;
	hznum=z*0x20;
	for(i=0;i<2;i++)
	{
    	com=y|0xb8;
    	prl0(com);
    	prr0(com);
    	if(x<0x40)
		{
    		com=x|0x40;
	    	prl0(com);
			for(j=0;j<16;j++)
			{
         		dat=TAB[hznum];
		    	if(cpls)
			    	dat=~dat;
	        	prl1(dat);
	         	hznum+=1;
			}
		}
        else
		{
			ch=x-0x40;
			com=ch|0x40;
    		prr0(com);
			for(j=0;j<16;j++)
			{
        		dat=TAB[hznum];
		    	if(cpls)
			    	dat=~dat;
	        	prr1(dat);
	         	hznum+=1;
			}
		}
		y=y+1;
	}
}

void dishz168XX(uchar x,uchar y,uchar z,bit cpls)
{
	uchar ch,com,dat,j;
	int hznum,i;
	hznum=z*0x10;
	for(i=0;i<2;i++)
	{
    	com=y|0xb8;
        prl0(com);
        prr0(com);
        if(x<0x40)
		{
        	com=x|0x40;
        	prl0(com);
    		for(j=0;j<8;j++)
			{
            	dat=CCTAB[hznum];
		    	if(cpls)  dat=~dat;
	        	prl1(dat);
	    		hznum++;
			}
		}
        else
		{
    		ch=x-0x40;
        	com=ch|0x40;
	   	    prr0(com);
		    for(j=0;j<8;j++)
			{
    	    	dat=CCTAB[hznum];
			    if(cpls)  dat=~dat;
	         	prr1(dat);
			    hznum++;
			}
		}
	    y++;
	}
}
void dvint(uint y, uint k, uchar xdata *str)
{
	uchar i;
	uint x,yu;	
	
	if (k == 0)
	{
		for (i = 0; i < 4; i++) 
			str[i] = '0';
		return;
	}
	for (i = 0; i < 4; i++)
	{
		x = (y / k) % 10;
		str[i] = x + '0';
		yu = y - x * k;
		if (yu > 6500)
		{
			yu = yu / 2;
			k = k / 2;
		}
		y = yu * 10;
	}
	str[4] = 0xff;
}
void dis_int_numXX(uchar xx,uchar y,uchar dout_no,uint  num1)
{
	uchar  i,j,k,x;
	uchar  dout1;
	uint   num;
	bit    g_bb=0;
	uchar  xdata  aa[5]={0,0,0,0,0xff};

	num=num1;
	x=xx;

	if(num&0x8000)
	{
		dishz168XX(x,y,0x11,0);
		num&=0x7fff;
	}
	else
	{
		dishz168XX(x,y,0x12,0);
	}
	x+=8;
	dvint(num%10000,1000,aa);
	dout1=4-dout_no;
    j=0;
	k=0;	
	for(i=0;i<5;i++)
	{
		if(i==dout1)
		{
			if(i==4)continue;
			dishz168XX(x+k*8,y,0x14,0);
		}
		else
		{
			if((aa[j]-'0')==0)
			{
				if(!g_bb)
				{
					if(i<(dout1-1))
					{
						j++;
						continue;
					}
				}
			}
			dishz168XX(x+k*8,y,aa[j]-'0',0);
			j++;
			g_bb=1;
		}
		k++;
	}
	if(dout_no==0)j=4;
	else          j=5;
	if(k<j)
	{
		for(i=k;i<j;i++)
			dishz168XX(x+i*8,y,0x12,0);
	}
}
/************************************************************************/

⌨️ 快捷键说明

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