📄 bank1.c.svn-base
字号:
return(KEYESC);
}
break;
case KEYENTER:
if (properties_point->SelectNum == 5) {
return(KEYENTER);
}
break;
default:
break;
}
//properties_point->SelectNum == 1 设置日期
//properties_point->SelectNum == 0 设置时间
//=========================================================================
//设置日期
if (properties_point->SelectNum == 1) {
CursorEnable = 1; // 0 disable,1 enable
properties_point->date_input.cur_flash_flag = 0; //00--有光标,01--无光标
switch (key) {
case KEYESC:
CursorEnable = 0; // 0 disable,1 enable
properties_point->date_input.cur_flash_flag = 0; //01--有光标,00--无光标
return(KEYBCAKAGAIBN);
case KEYENTER:
TimerType = 0x0; //关闭时钟刷新
//更新RTC的年月日时分秒
if (Edit_Ctrl(&properties_point->date_input,KEYENTER) == KEYENTER){
CursorEnable = 0; // 0 disable,1 enable
properties_point->date_input.cur_flash_flag = 0; //01--有光标,00--无光标
properties_point->SelectNum = 5;
Edit_Ctrl(&properties_point->date_input,NewKEYREFRSH);
for (i = 0; i < 4; i++) {
properties_point->date_input.chr[i+8] =
properties_point->time_input.chr[i];
}
for (i = 0; i < 6; i++) {
rtcA[i] = (((properties_point->date_input.chr[2*i]-0x30)*16)+(properties_point->date_input.chr[2*i+1]-0x30));
}
rtcA[3] = GetDayNumPosition(rtcA[0],rtcA[1],rtcA[2]);
rtcA[6] = 0;
WriteRTclock(0x26,&rtcA[0]);
TimerVar = 10;
TimerType = TimerKeyOff;
CursorEnable = 0;
return(KEYBCAKAGAIBN);
}
break;
case KEYSELECT:
properties_point->date_input.cur_flash_flag = 1; //01--有光标,00--无光标
Edit_Ctrl(&properties_point->date_input, NewKEYREFRSH);
return(KEYSELECT);
default:
properties_point->date_input.cur_flash_flag = 1; //01--有光标,00--无光标
Edit_Ctrl(&properties_point->date_input, InputKey);
return(NOKEY);
}
}
//设置时间
if (properties_point->SelectNum == 0) {
CursorEnable = 1; // 0 disable,1 enable
properties_point->time_input.cur_flash_flag=1; //01--有光标,00--无光标
switch (key) {
case KEYESC:
CursorEnable = 0; // 0 disable,1 enable
properties_point->time_input.cur_flash_flag = 0; //01--有光标,00--无光标
return(KEYBCAKAGAIBN);
case KEYENTER: //更新RTC的时分秒
TimerType = 0x0; //关闭时钟刷新
if (Edit_Ctrl(&properties_point->time_input,KEYENTER) == KEYENTER) {
CursorEnable = 0; // 0 disable,1 enable
properties_point->date_input.cur_flash_flag = 0; //01--有光标,00--无光标
properties_point->SelectNum = 5;
Edit_Ctrl(&properties_point->time_input,NewKEYREFRSH);
for (i = 0; i < 4; i++) {
properties_point->date_input.chr[i+8] =
properties_point->time_input.chr[i];
}
for (i = 0; i < 6; i++) {
rtcA[i] = (((properties_point->date_input.chr[2*i]-0x30)*16)+(properties_point->date_input.chr[2*i+1]-0x30));
}
rtcA[3] = GetDayNumPosition(rtcA[0],rtcA[1],rtcA[2]);
rtcA[6] = 0;
WriteRTclock(0x26,&rtcA[0]);
TimerType = TimerKeyOff;
CursorEnable = 0;
return(KEYBCAKAGAIBN);
}
break;
case KEYSELECT:
properties_point->date_input.cur_flash_flag=1; //01--有光标,00--无光标
Edit_Ctrl(&properties_point->time_input,NewKEYREFRSH);
return(KEYSELECT);
default:
properties_point->date_input.cur_flash_flag=1; //01--有光标,00--无光标
Edit_Ctrl(&properties_point->time_input,InputKey);
return(InputKey);
}
}
return(NOKEY);
}
uchar CtrlMText(StrcMTextx * p, uchar crtKey)
{
//first: key process
switch(crtKey) { //judge current key
case KEYREFRSH: //keyrefresh(fresh)
MTxstvinit(p); //init
break;
case KEYUP: //up
TimerType = TimerKeyOn; //for repeat enable, 20021210
if (p->crtpbglnsn != 1) {
p->crtpbglnsn--;
}
else {
return NOKEY;
}
break;
case KEYDOWN: //down
TimerType = TimerKeyOn; //for repeat enable, 20021210
if (p->crtpbglnsn + p->crtplnnumber <= p->totallnnumber) {
p->crtpbglnsn++;
}
else {
return NOKEY;
}
break;
case KEYPAGEUP: //page up
TimerType = TimerKeyOn; //for repeat enable, 20021210
if(p->crtpbglnsn == 1) { //for avoid refresh
return NOKEY;
}
if (p->crtpbglnsn > (uint)(p->crtplnnumber)) {
p->crtpbglnsn -= p->crtplnnumber;
}
else {
p->crtpbglnsn = 1;
}
break;
case KEYPAGEDOWN: //page down
TimerType = TimerKeyOn; //for repeat enable, 20021210
if (p->crtpbglnsn + p->crtplnnumber <= p->totallnnumber) {
p->crtpbglnsn += p->crtplnnumber;
}
else {
return NOKEY;
}
break;
case KEYESC:
return KEYESC;
break;
case KEYENTER:
return KEYENTER;
break;
default:
return NOKEY;
break;
}
MTxFnDisplay(p);
return NOKEY;
}
void MTxstvinit(StrcMTextx * p)//multi text struct value init
{
uint i;
uint crtcharaddress; //current character address
crtcharaddress = p->textaddress_h * 0x0100 + p->textaddress_l;
for (i = 1; i < 255; i ++) { //for the max line number is 255
if ((i % 10) == 1) {
p->adhistory[(uchar)(i / 10)] = crtcharaddress;
}
crtcharaddress = MTxFnScan1line(p, crtcharaddress, 0xff);
if (crtcharaddress == 0) { //"EOF"
break;
}
}
p->crtpbglnsn = 1; //current page begining line sn
p->crtplnnumber = (uchar)((p->psty2 - p->psty1 - 1) / (12 + (p->charset >> 3)));
p->totallnnumber = i; //total line number
}
//multi text function display
void MTxFnDisplay(StrcMTextx * p)
{
uchar i;
uint crtcharaddress; //current char address
uchar skiplnnumber; //skip line number
uchar ystep, crty;
//first: frame and rollbar
YJHDrawRectangle(p->pstx1, p->psty1, p->pstx2, p->psty2, p->frameset);
//display frame
DrawRollbar(p->pstx2 - 7, p->psty1 + 1, p->psty2 - 1, (uchar)(p->crtpbglnsn), p->crtplnnumber, (uchar)(p->totallnnumber));
//display rollbar
//sencond: process
crtcharaddress = p->adhistory[(uchar)((p->crtpbglnsn - 1) / 10)];
skiplnnumber = (p->crtpbglnsn - 1) % 10;
// xstep = 6 + (p->charset & 0x03); //process xstep
ystep = 12 + (p->charset >> 3); //process ystep
//third: skip
for (i = 0; i < skiplnnumber; i ++) {
crtcharaddress = MTxFnScan1line(p, crtcharaddress, 0xff);
}
// p->crtpbglnsn += skiplnnumber;
//last: display (1 page)
YJHClearWindow(p->pstx1 + 1, p->psty1 + 1, p->pstx2 - 8, p->psty2 - 1, 0);
//clear window
for (crty = p->psty1 + 1; crty + ystep < p->psty2; crty += ystep) {
crtcharaddress = MTxFnScan1line(p, crtcharaddress, crty);
if (crtcharaddress == 0) { //EOF
break;
}
// p->crtpbglnsn ++;
}
}
//-------------------------------------------------------------------------------------
//multi text function scan 1 line
uint MTxFnScan1line(StrcMTextx * p, uint charaddress, uchar crty)
{
uchar crtx/*, charlib*/;
ucharx crtchar[2];
uchar xstep = 6 + (p->charset & 0x03); //process xstep
uchar charmode = ((p->charset << 5) & 0xe0) | BLACK;//character mode
for (crtx = p->pstx1 + 1; ; crtx += xstep) {
YJHReadFlashToExterMem(p->textpage, 2,
(uchar *)(charaddress), crtchar);
//get current character
if (crtchar[0] == 0xff) { //"EOF"
return 0;
}
if (crtchar[0] == 0x0d) { //"return"
return (charaddress + 2);
}
if (crtchar[0] < 0x80) { //SBC
if (crtx + xstep < p->pstx2 - 8) {
if(crty != 0xff) {
YJHStringDisplay(crtx, crty, LIB12x12, charmode, crtchar, 1);
}
charaddress ++;
}
else {
return charaddress;
}
}
if (crtchar[0] >= 0xa0) { //DBC
if (crtx + 6 + xstep < p->pstx2 - 8) {
if(crty != 0xff) { //display?
YJHStringDisplay(crtx, crty, LIB12x12, charmode, crtchar, 1);
}
crtx += 6; //adjust current char x
charaddress += 2;
}
else {
return charaddress;
}
}
}
}
void SetupOperate(calcux *p_ctrl,asmcalcux *p_math,dspbufflinex *p_caldsp)
{
uchar i,k,j=0;
uchar m=0;
uchar f_dot=0; //有无小数点标志 =1 有
uchar n_int=0; //整数位数
uchar n_dec=0; //小数位数
uchar count=0;
dspbufflinex *p0;
m=p_ctrl->opats;
p0=p_caldsp; //显示缓冲区入口指针保存
p_caldsp=p_caldsp+p_ctrl->buffpointer; //指向当前行
if(m==0||m==1||m==3)
{
if(m!=0)
{
for(i=0;i<17;i++) //编辑总长17字节
{
k=p_ctrl->optext.chr[i];
if(k=='.') f_dot=1;
if((k>='0')&&(k<='9'))
{
if(f_dot==0) n_int++;
else n_dec++;
}
}
// p_caldsp=p_caldsp+p_ctrl->buffpointer; //指向当前行
p_caldsp->intnum=n_int;
p_caldsp->decnum=n_dec; //整数位数和小数位数写入显缓
if((n_int+n_dec)!=0)
{
k=n_int+n_dec-1;
if(f_dot==1)
k++;
for(i=0;i<k+1;i++) //输入字符存放到显示缓冲区(总长17位=1符号+15数字窜+1小数点)
{
p_caldsp->caltext[16-k+i]=p_ctrl->optext.chr[i];
}
}
if(m==1)
{
p_math->d1num=n_dec; //设置计算区第一操作数小数位长
i=(p_math->arithflag)&0x01;
if(i==1)
p_caldsp->caltext[16-k-1]='-'; //第一操作数的符号写入显示缓冲
}
else //m==3
{
p_math->d2num=n_dec; //设置计算区第二操作数小数位长
}
}
else //m=0 设置计算区第一操作数
{
p_caldsp->caltext[16]='0';
p_math->d1num=0x0;
}
p_ctrl->buffpointer++; //显示缓冲指针加1
p_ctrl->p_lastline++; //显示窗口末行行号加1
dspbufmov_up(p_ctrl,p0);
}
// if(m==1||m==2||m==3) //显示缓冲区运算符写入
// {
if(m==0||m==1) //m=0为默认第一操作数为0的情况
p_caldsp=p0+p_ctrl->buffpointer; //指针加一
switch(p_ctrl->opator)
{
case 0: //KEYADD:
p_caldsp->opator='+';
break;
case 1: //KEYSUB:
p_caldsp->opator='-';
break;
case 2: //KEYMUL:
p_caldsp->opator='*';
break;
case 3: //KEYDIV:
p_caldsp->opator='/';
break;
default :
break;
}
// }
if(m==1||m==3)
{
count=0;
for(i=n_int;i!=0;i--) //设置计算区整数部分
{
k=(p_ctrl->optext.chr[i-1])&0x0f;
if(count%2==1)
k=k<<4;
if(m==1)
p_math->bcdd1buf[j+8]=(p_math->bcdd1buf[j+8])|k;
else if(m==3)
p_math->bcdd2buf[j+8]=(p_math->bcdd2buf[j+8])|k;
else
{ //m=0 进入该程序,必为非法
}
if(count%2==1)
{
j++;
}
count++;
if(count==n_int) break;
}
if(f_dot==1) //设置计算区小数部分
{
count=0;
j=7;
for(i=n_int;i<18;i++)
{
k=(p_ctrl->optext.chr[i+1])&0x0f;
if(count%2==0)
k=k<<4;
if(m==1)
p_math->bcdd1buf[j]=(p_math->bcdd1buf[j])|k;
else if(m==3)
p_math->bcdd2buf[j]=(p_math->bcdd2buf[j])|k;
else
{ //m=0 进入该程序,必为非法
}
if(count%2==1)
{
j--;
}
count++;
if(count==n_dec) break;
}
}
if(m==3) //设置计算区最大值 0999999999999999.0000000000000000
{
for(i=0;i<16;i++)
{
p_math->maxnum[i]=MaxnumTable[i];
}
}
}
else if(m==0)
{
p_math->bcdd1buf[8]=0x00;
}
else
{
}
}
//函数说明:将计算结果(压缩BCD码)取出解压缩为ASCII码并放入显示缓冲区
void DspResult(calcux *p_ctrl,asmcalcux *p_math,dspbufflinex *p_caldsp)
{
uchar i,j,k,m,count=0;
uchar n_int=0; //整数BCD码个数
uchar n_dec=0; //小数BCD码个数
uchar firstno;
uchar intnums;
uchar cy=0;
ucharc texterr[]={"-溢出-"};
p_caldsp=p_caldsp+p_ctrl->buffpointer; //显缓指向当前行
i=(p_math->arithflag)&0x10; //判断结果是否溢出
if(i!=0)
{
for(i=0;i<sizeof(texterr)-1;i++)
p_caldsp->caltext[11+i]=texterr[i];
p_ctrl->f_result=1; //溢出结果不能作为连续计算的第一操作数
}
else
{
for(i=0;i<8;i++) //计算区之计算结果从整数最高字节起扫描整数BCD码个数
{
k=p_math->bcdd3buf[15-i];
if(k!=0) break;
}
n_int=(8-i)*2; //此处可能多计一个
intnums=n_int;
firstno=i;
k=k&0xf0;
if(k==0&&n_int!=0)
n_int--;
if(n_int==0)
n_int=1; //如果整数为全零,应显示成"0."的格式,因此 "=1"
for(i=0;i<8;i++) //计算区之计算结果从小数最低字节起扫描小数BCD码个数
{
k=p_math->bcdd3buf[i];
if(k!=0) break;
}
n_dec=(8-i)*2; //此处可能多计一个
k=k&0x0f;
if(k==0&&n_dec!=0)
n_dec--; //即使小数为全零,也无须显示成".0"的格式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -