📄 fourchannel.c
字号:
}print(0xd0);print(0xcd); //型
print(0x0a); //打印空行
}
void pout5(uchar printrev) //打印转速printrev<0-6>:'转速'<0:300r/min;1:400r/min......6:1000r/min>
{ print(0x1b);print(0x40);print(0x1b);print(0x31);print(0x03);print(0x1b);print(0x20); print(0x00); //打印初始化,行间距3点
print(0x1b);print(0x38);print(0x04); //设定12*12点阵
print(0xd7);print(0xaa);print(0xcb);print(0xd9);print(0x3a); //转速:
print(0x1b);print(0x36); //选用字符集1 //选择字符集1:
switch(printrev)
{ case 2:printrev=3;break;
case 3:printrev=4;break;
case 4:printrev=5;break;
case 5:printrev=6;break;
case 6:printrev=7;break;
case 7:printrev=8;break;
case 8:print(0x31);printrev=0;break;
//default:print(0x31);printrev=0;break;
}
print(0x30+printrev); //300-1000
print(0x30);print(0x30);print(0x72);print(0x2f);print(0x6d);print(0x69);print(0x6e);print(0x0d); //r/min
print(0x1b);print(0x38);print(0x04); //设定12*12点阵
}
void dout(uchar jindu) //显示进度条<jindu:屏幕0x89-0x8e被划分了12个区域,送入区域值,则显示>
{ uchar i;
setxy(0x89);
for(i=0;i<jindu;i++)dispen(0x08);
dispen(0x10);
}
void printall(uchar dispgroup) //打印全部|dispgroup<1,3>:1:打印一组通道,3:打印三组通道(300,500,1000)>
{ init(); wrcommand(0x0c);
setxy(0x80); dispen(0x07); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); //显示花纹
dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04);dispen(0x04);
dispen(0x04); dispen(0x04); dispen(0x04);setxy(0x90); dispen(0x04);setxy(0x97); dispen(0x20);
dispen(0x04); setxy(0x88); dispen(0x04); setxy(0x8f); dispen(0x20); dispen(0x04); setxy(0x98);
dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04);
dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x04); dispen(0x07);
setxy(0x91);disphz(0xc8,0xab);disphz(0xb2,0xbf);disphz(0xb4,0xf2);disphz(0xd3,0xa1);
disphz(0xd6,0xd0);setxy(0x89); //全部打印中。。。
if(dispgroup==3)
{ if(channeltype==2){ dout(0);pout4();dout(1);pout3(0,2);dout(2);pout2(1,2);dout(3);pout2(0,2);dout(4);pout5(8);
dout(5);pout3(0,1);dout(6);pout2(1,1);dout(7);pout2(0,1);pout5(4);dout(8);pout3(0,0);
dout(9);pout2(1,0);pout2(0,0);dout(10);pout5(2);dout(11);pout1();} //打印三组全部双通道
else { dout(0);pout4();pout3(2,2);dout(1);pout2(3,2);pout2(2,2);dout(2);pout3(0,2);pout2(1,2);dout(3);pout2(0,2);pout5(8);dout(4);
pout3(2,1);pout2(3,1);dout(5);pout2(2,1);pout3(0,1);dout(6);pout2(1,1);pout2(0,1);dout(7);pout5(4);
pout3(2,0);dout(8);pout2(3,0);pout2(2,0);dout(9);pout3(0,0);pout2(1,0);dout(10);pout2(0,0);pout5(2);pout1();dout(11);
} //打印三组全部四通道
}
else
{ if(channeltype==2){dout(0);pout4();dout(2);pout3(0,0);dout(4);pout2(1,0);dout(6);pout2(0,0);dout(8);pout5(rev);dout(10);pout1();dout(12);} //打印全部双通道
else {dout(0);pout4();dout(1);pout3(2,0);dout(3);pout2(3,0);dout(4);pout2(2,0);dout(6);pout3(0,0);dout(7);pout2(1,0);dout(8);pout2(0,0);
dout(9);pout5(rev);dout(10);pout1();dout(11);} //打印全部四通道
}
}
void starovertime(void) //测量超时错误
{ overtimeflag=1;overtime=10;IE|=0x82; //初始化超时标志overtimeflag<0:超时错误标志;1:正常使用>
IPL=0X40;IPH=0X40;TMOD=0x01;TH0=0X00;TL0=0X00;TR0=1;
}
void stopovertime(void) //停止测量超时错误
{ IE&=0x7d;TR0=0;
}
void dispmenu_0() //显示开始菜单
{ init();wrcommand(0x0c);
//按1234显示ABCD通道,789显示自动测量的三个转速
init();wrcommand(0x0c);
if(channeltype==2) //单/双通道结果显示
{ setxy(0x80);dispen(0x31);dispen(0x04);dispen(0x1A);dispen(0x41);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[0]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//a通道正常/错误
setxy(0x90);dispen(0x32);dispen(0x04);dispen(0x1A);dispen(0x42);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[1]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//b通道正常/错误
}
else
{ setxy(0x80);dispen(0x31);dispen(0x04);dispen(0x1A);dispen(0x41);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[0]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//a通道正常/错误
setxy(0x90);dispen(0x32);dispen(0x04);dispen(0x1A);dispen(0x42);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[1]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//b通道正常/错误
setxy(0x88);dispen(0x33);dispen(0x04);dispen(0x1A);dispen(0x43);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[2]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//c通道正常/错误
setxy(0x98);dispen(0x34);dispen(0x04);dispen(0x1A);dispen(0x44);disphz(0xcd,0xa8);disphz(0xb5,0xc0);
if(DError[3]==0){disphz(0xd5,0xfd);disphz(0xb3,0xa3);}else {disphz(0xb4,0xed);disphz(0xce,0xf3);}//d通道正常/错误
}
}
void dispmenu_1(uchar ee,uchar group) //显示第一层菜单ee<0-3>:"显示的通道"<ABCD>group<0-2>:"显示的组"
{ init();wrcommand(0x0c); //整体显示on;游标off ;游标闪烁off
setxy(0x80);disphz(0xd7,0xee);disphz(0xb5,0xcd);disphz(0xb8,0xdf);disphz(0xb5,0xe7);disphz(0xc6,0xbd);dispen(0x3a); //最低高电平:
if(Disp[group][ee].DHLevel[0]==0) dispen(0x20);else dispen(Disp[group][ee].DHLevel[0]+0x30); //首位为0,隐藏0.
dispen(Disp[group][ee].DHLevel[1]+0x30);dispen(0x2e);dispen(Disp[group][ee].DHLevel[2]+0x30);dispen(0x56); //xx.xV
setxy(0x90);disphz(0xd7,0xee);disphz(0xb8,0xdf);disphz(0xb5,0xcd);disphz(0xb5,0xe7);disphz(0xc6,0xbd);dispen(0x3a); //最高低电平:
dispen(Disp[group][ee].DLLevel[0]+0x30);dispen(0x2e);dispen(Disp[group][ee].DLLevel[1]+0x30);
dispen(Disp[group][ee].DLLevel[2]+0x30);dispen(0x56); //_x.xxV
setxy(0x88);disphz(0xd7,0xee);disphz(0xb4,0xf3);disphz(0xd5,0xbc);disphz(0xbf,0xd5);disphz(0xb1,0xc8);dispen(0x3a); //最大占空比:
dispen(0x20);dispen(Disp[group][ee].DHDutyRatio[0]+0x30);dispen(Disp[group][ee].DHDutyRatio[1]+0x30);dispen(0x25); //xx%
setxy(0x98);disphz(0xd7,0xee);disphz(0xd0,0xa1);disphz(0xd5,0xbc);disphz(0xbf,0xd5);disphz(0xb1,0xc8);dispen(0x3a); //最小占空比:
dispen(0x20);dispen(Disp[group][ee].DLDutyRatio[0]+0x30);dispen(Disp[group][ee].DLDutyRatio[1]+0x30);dispen(0x25); //xx%
setxy(0x80);dispen(0x41+ee);dispen(0x20);disphz(0xcd,0xa8);disphz(0xb5,0xc0); //A通道
setxy(0x90);
if(rev==1)
{ switch(group)
{ case 0:dispen(0x33);dispen(0x30);dispen(0x30);dispen(0x72);break; //300r
case 1:dispen(0x35);dispen(0x30);dispen(0x30);dispen(0x72);break; //500r
case 2:dispen(0x31);dispen(0x30);dispen(0x30);dispen(0x30);dispen(0x72);dispen(0x20);break; //1000r_
}delay();smalldelay();smalldelay();smalldelay();smalldelay();
setxy(0x80);disphz(0xd7,0xee);disphz(0xb5,0xcd);disphz(0xb8,0xdf); //最低高
setxy(0x90);disphz(0xd7,0xee);disphz(0xb8,0xdf);disphz(0xb5,0xcd); //最高低
}
else
switch(rev)
{ case 8:dispen(0x31);dispen(0x30);dispen(0x30);dispen(0x30);dispen(0x72);dispen(0x20);break; //1000r_
case 2:dispen(0x33);dispen(0x30);dispen(0x30);dispen(0x72);break; //300r
case 3:dispen(0x34);dispen(0x30);dispen(0x30);dispen(0x72);break; //400r
case 4:dispen(0x35);dispen(0x30);dispen(0x30);dispen(0x72);break;
case 5:dispen(0x36);dispen(0x30);dispen(0x30);dispen(0x72);break;
case 6:dispen(0x37);dispen(0x30);dispen(0x30);dispen(0x72);break;
case 7:dispen(0x38);dispen(0x30);dispen(0x30);dispen(0x72);break;
}delay();smalldelay();smalldelay();smalldelay();smalldelay();
setxy(0x80);disphz(0xd7,0xee);disphz(0xb5,0xcd);disphz(0xb8,0xdf); //最低高
setxy(0x90);disphz(0xd7,0xee);disphz(0xb8,0xdf);disphz(0xb5,0xcd); //最高低
}
void dispmenu_2(uchar ee,uchar group) //显示第二层菜单
{ init();wrcommand(0x0c); //整体显示on;游标off ;游标闪烁off
if(ee<3){setxy(0x80);dispen(0x41);dispen(0x42);disphz(0xd7,0xee);disphz(0xb4,0xf3);disphz(0xcf,0xe0);disphz(0xb2,0xee);dispen(0x3a); //最大相差:
if(Disp[group][ee].DHPhaseDiff[0]==0) dispen(0x20); else dispen(Disp[group][ee].DHPhaseDiff[0]+0x30);
dispen(Disp[group][ee].DHPhaseDiff[1]+0x30);dispen(Disp[group][ee].DHPhaseDiff[2]+0x30);disphz(0xb6,0xc8); //xx度
setxy(0x90);dispen(0x41);dispen(0x42);disphz(0xd7,0xee);disphz(0xd0,0xa1);disphz(0xcf,0xe0);disphz(0xb2,0xee);dispen(0x3a); //最小相差:
if(Disp[group][ee].DLPhaseDiff[0]==0) dispen(0x20); else dispen(Disp[group][ee].DLPhaseDiff[0]+0x30);
dispen(Disp[group][ee].DLPhaseDiff[1]+0x30);dispen(Disp[group][ee].DLPhaseDiff[2]+0x30);disphz(0xb6,0xc8); //xx度
setxy(0x88);dispen(0x20);dispen(0x41);disphz(0xcd,0xa8);disphz(0xb5,0xc0);disphz(0xc2,0xf6);disphz(0xb3,0xe5);dispen(0x3a);dispen(0x20);//A通道脉冲:
dispen(Disp[group][ee].PlusCount[0]+0x30);dispen(Disp[group][ee].PlusCount[1]+0x30);dispen(Disp[group][ee].PlusCount[2]+0x30); //200
setxy(0x98);dispen(0x20);dispen(0x42);disphz(0xcd,0xa8);disphz(0xb5,0xc0);disphz(0xc2,0xf6);disphz(0xb3,0xe5);dispen(0x3a);dispen(0x20);//B通道脉冲:
dispen(Disp[group][ee].PlusCount[0]+0x30);dispen(Disp[group][ee].PlusCount[1]+0x30);dispen(Disp[group][ee].PlusCount[2]+0x30);} //200
else{ setxy(0x80);dispen(0x43);dispen(0x44);disphz(0xd7,0xee);disphz(0xb4,0xf3);disphz(0xcf,0xe0);disphz(0xb2,0xee);dispen(0x3a); //最大相差:
if(Disp[group][ee].DHPhaseDiff[0]==0) dispen(0x20); else dispen(Disp[group][ee].DHPhaseDiff[0]+0x30);
dispen(Disp[group][ee].DHPhaseDiff[1]+0x30);dispen(Disp[group][ee].DHPhaseDiff[2]+0x30);disphz(0xb6,0xc8); //xx度
setxy(0x90);dispen(0x43);dispen(0x44);disphz(0xd7,0xee);disphz(0xd0,0xa1);disphz(0xcf,0xe0);disphz(0xb2,0xee);dispen(0x3a); //最小相差:
if(Disp[group][ee].DLPhaseDiff[0]==0) dispen(0x20); else dispen(Disp[group][ee].DLPhaseDiff[0]+0x30);
dispen(Disp[group][ee].DLPhaseDiff[1]+0x30);dispen(Disp[group][ee].DLPhaseDiff[2]+0x30);disphz(0xb6,0xc8); //xx度
setxy(0x88);dispen(0x20);dispen(0x43);disphz(0xcd,0xa8);disphz(0xb5,0xc0);disphz(0xc2,0xf6);disphz(0xb3,0xe5);dispen(0x3a);dispen(0x20);//C通道脉冲:
dispen(Disp[group][ee].PlusCount[0]+0x30);dispen(Disp[group][ee].PlusCount[1]+0x30);dispen(Disp[group][ee].PlusCount[2]+0x30); //200
setxy(0x98);dispen(0x20);dispen(0x44);disphz(0xcd,0xa8);disphz(0xb5,0xc0);disphz(0xc2,0xf6);disphz(0xb3,0xe5);dispen(0x3a);dispen(0x20);//D通道脉冲:
dispen(Disp[group][ee].PlusCount[0]+0x30);dispen(Disp[group][ee].PlusCount[1]+0x30);dispen(Disp[group][ee].PlusCount[2]+0x30);} //200
}
void menu_main1(uchar dispgroup) //主显示函数|dispgroup<1,3>:"自动测量(三组通道)/手动测量(一组通道)"1:一组通道;3:三组通道
{ uchar data displayer=0; //displayer<0-2>:"显示菜单"共有三层菜单dispmenu_0-2,<0:显示开始菜单1:显示第一层菜单2:显示第二层菜单>
uchar idata ee=0; //ee<0-3>:"显示通道"共有四个通道A,B,C,D
uchar printtop=0; //printtop<0,1>:"打印信息头,尾"
uchar printrev; //printrev<1-8>:"当前要打印的转速"1自动;2:300r/min...8:1000r/min
uchar data group=0; //group<0-2>:"自动测量的三组通道"0:300r/min;1:500r/min;2:1000r/min
uchar idata ps; //ps<0-15>:"键盘缓存"
uchar remeasure=1; //remeasure<0,1>:"重测标记"0:回到开始菜单;1:继续menu_main1的菜单
uchar printexitflag=1; //printexit<0,1>退出打印菜单1:菜单内循环0:退出打印菜单
dispmenu_0(); //显示开始菜单
if(dispgroup==3) {group=0;printrev=2;} else {group=0;printrev=rev;}
while(remeasure)
{ smalldelay();smalldelay();smalldelay();smalldelay();
while((ps=key())==15){;} //等待用户输入将用显示的通道号(0,1,2,3)
switch(ps)
{ case 1: ee=0; displayer=1; break; //显示通道
case 2: ee=1; displayer=1; break;
case 3: if(channeltype==4){ee=2; displayer=1;} break;
case 4: if(channeltype==4){ee=3; displayer=1;} break;
case 7: if(dispgroup==3) {group=0;printrev=2;} else {group=0;printrev=rev;} break; //自动测量中300转显示
case 8: if(dispgroup==3) {group=1;printrev=4;} else {group=0;printrev=rev;} break; //自动测量中500转显示
case 9: if(dispgroup==3) {group=2;printrev=8;} else {group=0;printrev=rev;} break; //自动测量中1000转显示
case 10:break;
case 11:switch(displayer) //下一层显示
{ case 0:displayer=1; break; //现在处在0层,将显示第一层
case 1:if(ee==0||ee==2){displayer=1; ++ee;} else displayer=2; break;//显示第二层
case 2:if(++ee>=channeltype) ee=0; displayer=1; break; //循环显示下一通道的第一层
}break;
case 12:switch(displayer) //下一层显示
{ case 0:displayer=1;break; //现在处在0层,将显示第一层
case 1:if(ee==0||ee==2){displayer=1; ++ee;}else displayer=2; break; //显示第二层
case 2:if(++ee>=channeltype) ee=0; displayer=1; break; //循环显示下一通道的第一层
}break;
case 13:init();wrcommand(0x0c); //确定:重测 其他:取消
setxy(0x80); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); //显示花纹
dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07);dispen(0x07);
dispen(0x07); dispen(0x07); dispen(0x07);setxy(0x90); dispen(0x07);setxy(0x97); dispen(0x20);
dispen(0x07); setxy(0x88); dispen(0x07); setxy(0x8f); dispen(0x20); dispen(0x07); setxy(0x98);
dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07);
dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07); dispen(0x07);
setxy(0x91);disphz(0xc8,0xb7);disphz(0xb6,0xa8);dispen(0x0a);dispen(0x20);disphz(0xd6,0xd8);disphz(0xb2,0xe2); //确定:重测
setxy(0x89);disphz(0xc6,0xe4);disphz(0xcb,0xfc);disphz(0xbc,0xfc);disphz(0xc8,0xa1);disphz(0xcf,0xfb); //其他键取消
smalldelay();smalldelay();smalldelay();smalldelay();smalldelay();smalldelay();
while((ps=key())==15){;}
switch(ps)
{ case 12:remeasure=0;break; //按下取消进入此项,再按确认返回开始界面
case 13:break;
default:break;
}break;
case 14:printexitflag=1; //设定打印菜单循环条件
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -