📄 edit.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 + -