📄 hzmmimain18.c
字号:
poll_clr();
dlyms(100);
com_snd((byte*)&clz_old,2);//向cpu板发命令取对应的零漂,刻度
poll_timer_t=poll_timer;
poll_timer_f=FALSE;
poll_seq=((clz_old&0x00e0)>>5)-1;
clz_order=TRUE;//废除第一次的报文因为此次报文可能是上一回的
return;
}
if((STATUS_WORD==0)&&(CYCLE_FLAG==FALSE))
{//桌面循环显示暂停10秒
if(key==KEY_UP)
desk_pause=10;
else
desk_pause=0;
return;
}
if((STATUS_WORD==0)&&(CYCLE_FLAG!=FALSE))
{//报告显示翻屏,并暂停10秒
if(key==KEY_UP)
{
if(cycle_ptr==0)
cycle_ptr=ram_ptr-1;
else
cycle_ptr--;//第一次减一回到当前位置
if(cycle_ptr==0)
cycle_ptr=ram_ptr-1;
else
cycle_ptr--;//第二次减一到向前翻一屏的位置
if(cycle_ptr!=0)
{
cycle_ptr--;//第三次减一到向前翻二屏的位置
cycle_timer_routine();
}//得到前二屏占用前一屏的字节数,并回到向前翻一屏的位置
}
cycle_timer_routine();
cycle_timer_t=10;
cycle_timer_f=FALSE;
return;
}
}
else
if((key==KEY_LEFT)||(key==KEY_RIGHT))
{//处理左右键
if(S_EEP==0)
return;
eep_ptr=head_line;
if(key==KEY_LEFT) //在eeprom中从后往前寻找所存的上一个报告
i=pointer3(1);
else
if(key==KEY_RIGHT) //在eeprom中从前往后寻找所存的下一个报告
i=pointer3(0);
if(i==FALSE)
{
cstrcpy(disp_buffer,"无其他报告!");
cls();
mediacy_hz(2*16,disp_buffer);
if(get_key());
return;
}
head_line=eep_ptr;
if(key==KEY_LEFT)
{//顺序编号前移
S_EEP--;
if(S_EEP==0)
S_EEP=-1;
}
else
if(key==KEY_RIGHT)
{//顺序编号后移
S_EEP++;
if(S_EEP==0)
S_EEP=1;
}
if(frist_line==head_line)
S_EEP=1;//最新报告处顺序编号是1
eep_ram();
return;
}
else
if(key==KEY_SET)
{ //对set键处理
if(STATUS_WORD==3)
STATUS_WORD=0;
if((STATUS_WORD!=0)||(CYCLE_FLAG!=FALSE)||(PC_QUIT==0xa5))
return;
desk_pause=0;
menu_in=TRUE;
select_menu(MENU[1].str);//进入主菜单
if((STATUS_WORD==0)&&(PC_QUIT!=0xa5))
init_disp();
menu_in=FALSE;
}
}
//显示菜单
byte display_menu(const byte *menu_str)
{
char DzStrBuf[16];
byte k,maxmenus,beginline;
if(cstrlen(menu_str)==0)
return 0;
cstrcpy(disp_buffer,menu_str);
cls();
maxmenus=(strlen(disp_buffer)-11+7)/9; //菜单数
if(maxmenus>6)
beginline=14;
else
if(maxmenus>4)
beginline=22;
else
beginline=30;
memcpy(DzStrBuf,&disp_buffer[1],10);
DzStrBuf[10]=0;
if(maxmenus>6)
k=0;
else
if(maxmenus>4)
k=4;
else
k=8;
str_hz(k,5,DzStrBuf);
for(k=0;k<maxmenus;k++)
{//列出各菜单选项
memcpy(DzStrBuf,&disp_buffer[10+2+k*9],8);
DzStrBuf[8]=0;
str_hz(((k/2)*16)+beginline,(k%2)*10+2,DzStrBuf);
}
return maxmenus;
}
//选择菜单子程序
byte select_menu(const byte *menu_str)
{
byte menu_idx,key;
byte beginline;
byte total_menu;
re_select:
total_menu=display_menu(menu_str);
if(total_menu==0)
return 0;
total_menu--;
menu_idx=0;
for(;;)
{
if(total_menu>=6)
beginline=14;
else
if(total_menu>=4)
beginline=22;
else
beginline=30;
set_cursor_position((menu_idx/2)*16+beginline,(menu_idx&1)*10,menucursor);
key=get_key();
if(key==KEY_SET)
{
key=menu_str[10+1+menu_idx*9];
if(key<=32)
{//指向子菜单
if(select_menu(MENU[key].str)==0)
return 0;
}
else
{//选项处理
if(fun_key_idx(key)==0)
return 0;
}
goto re_select;
}
else
if(key==KEY_NULL)
return 0;
else
if(key==KEY_QUIT)
return 0xff;
else
if(key==KEY_UP) //向上移动光标
{
if(menu_idx>1)
menu_idx-=2;
else
if(total_menu&1)
menu_idx=total_menu+menu_idx-1;
else
menu_idx=total_menu-menu_idx;
}
else
if(key==KEY_DOWN) //向下移动光标
{
if((menu_idx+2)<=total_menu)
menu_idx+=2;
else
menu_idx&=1;
}
else
if(key==KEY_RIGHT) //向右移动光标
value_inc(menu_idx,0,total_menu)
else
if(key==KEY_LEFT) //向左移动光标
value_dec(menu_idx,0,total_menu)
else
continue;
}
}
//选择cpu板号子程序
byte cpu_nmb(void)
{
byte i;
cstrcpy(disp_buffer,"请选择CPU板号:1");
cls();
mediacy_hz(16*1+8,disp_buffer);
i=(strlen(disp_buffer)+1)/2+9;
set_quit_key();
poll_seq=sel_idx2(16*1+8,i,TOTAL_CPU_NUMBER,1);
if(poll_seq==0)
return 0;
if(EEPROMread(eep_CPU_NUB+poll_seq)==0)
return 0;
cpu_name=poll_seq;
CPU_ID=cpu_name<<5;
return 1;
}
//对选择的菜单项做处理
byte fun_key_idx(byte key_type)
{
byte i,j,key,temp;
// byte code;
byte *p;
byte *com_bak;
word rcv_cntt;
const byte *cpp;
byte CPU_ON[10];
// byte str[8];
temp=0x0b;
switch(key_type)
{
case 'Z': //调阻抗,0x0d
temp++;
case 'C': //调零漂,0x0c
temp++;
case 'L': //调刻度,0x0b
{
if(EEPROMread(eep_CPU_NUB+0)==0)
if(cpu_nmb()==0)
return 0xff;
poll_clr();
for(j=6;j!=0;j--)
{//尝试6次调取选项
rcv_cnt=com_rcv(temp | CPU_ID);
if(rcv_cnt>1)
if(chk_sum(rcv_cnt)==0)
break;
}
if(j==0)
return 0xff;
com_bak=rpt_ram_buf+MAX_REPORT_RAM-256;
memcpy(com_bak,commu_buf,rcv_cnt);
com_bak[rcv_cnt]=0;
if((i=anx_menu(com_bak,rcv_cnt,key_type))==0)
return 0xff;
poll_seq=cpu_name;
CPU_ID=poll_seq<<5;
STATUS_WORD=1;
Q_KEY[cpu_name]=0;
clz_order=TRUE;
CPU_ON[0]=(temp+5) | CPU_ID;
CPU_ON[1]=(byte) (i-1) | CPU_ID;
clz_old=CPU_ON[0]+CPU_ON[1]*256;//对发出的命令留底
clz_total=(clz_old&0xe0ff)+clz_total_num*256;//最后一个选项的位置
clz_bzd=(clz_old&0xe0ff)+0x1f00;//半自动对点的位置
clz_prt=(clz_old&0xe0ff)+0x1f00;//打印命令的位置
clz_di =(clz_old&0xe0ff)+0x1f00;//开入命令的位置
poll_clr();
com_snd(CPU_ON,2);
cstrcpy(CPU_ON,"all");//查找打印命令的位置
p=strstr(com_bak+1,CPU_ON);
if(p==0)
{
cstrcpy(CPU_ON,"ALL");//查找打印命令的位置
p=strstr(com_bak+1,CPU_ON);
if(p==0)
{
cstrcpy(CPU_ON,"IV9");//查找打印命令的位置
p=strstr(com_bak+1,CPU_ON);
}
}
if(p!=0)
{//找到打印命令的位置,留存
p=(byte*)((word)p-(word)(com_bak+1));
j=(byte)((word)p/4);
clz_prt=(clz_old&0xe0ff)+j*256;
if(j==(i-1))
{
clz_order=FALSE;
cstrcpy(disp_buffer,"正在打印..");
disp_prt(1*16+8);
/*
keep_timer=0;
for(i=1;i<=TOTAL_CPU_NUMBER;i++)
{
if(EEPROMread(eep_CPU_NUB+i))
keep_timer++;
}
keep_timer*=6;
sampleCPU=0;
*/
poll_seq--;
poll_timer_t=poll_timer;
poll_timer_f=FALSE;
STATUS_WORD=1;
return 0;
}
}
cstrcpy(CPU_ON,"BZD");//查找半自动对点命令的位置
p=strstr(com_bak+1,CPU_ON);
if(p!=0)
{//找到半自动对点命令的位置,留存
p=(byte*)((word)p-(word)(com_bak+1));
j=(byte)((word)p/4);
clz_bzd=(clz_old&0xe0ff)+j*256;
if(j==(i-1))
{
STATUS_WORD=2;
clz_order=FALSE;
}
}
cstrcpy(CPU_ON,"di");//查找开入命令的位置
p=strstr(com_bak+1,CPU_ON);
if(p==0)
{
cstrcpy(CPU_ON,"DI");//查找开入命令的位置
p=strstr(com_bak+1,CPU_ON);
}
if(p!=0)
{//找到开入命令的位置,留存
p=(byte*)((word)p-(word)(com_bak+1));
j=(byte)((word)p/4);
clz_di=(clz_old&0xe0ff)+j*256;
}
csprintf(disp_buffer," 正在调取零漂第%d项, ",i);
if(key_type=='C')
cpp="零漂";
else
if(key_type=='L')
cpp="刻度";
else
if(key_type=='Z')
cpp="阻抗";
cstrcpy(disp_buffer+9,cpp);
disp_buffer[13]='第';
disp_wait(1*16+8);
dlyms(300);
break;
}
case 'M': //设置分对时
temp++;
case 'V': //设置秒对时
temp++;
case 'J': //置网络对时
{
const byte *p;
if((GPS_en&0x0f)==0)
p="当前状态:网络对时";
else
if((GPS_en&0x0f)==1)
p="当前状态:秒脉对时";
else
if((GPS_en&0x0f)==2)
p="当前状态:分脉对时";
else
p="当前状态: 未知";
cstrcpy(disp_buffer,p);
LCD_display(8,0);
temp-=0x0b;
if(temp==0)
p="设置为网络对时:";
else
if(temp==1)
p="设置为秒对时:";
else
if(temp==2)
p="设置为分对时:";
else
return 0xff;
cstrcpy(disp_buffer,p);
str_hz(16*1+12,0,disp_buffer);
set_quit_key();
for(;;)
{
key=get_key();
if(key==KEY_SET)
{
if(hidden_code()==FALSE)
break;
EEPROMwrite(eep_GPS,temp);
GPS_en=temp;
cstrcpy(disp_buffer,"设置成功!");
cls();
mediacy_hz(2*16,disp_buffer);
if(get_key());
if((temp==0)&&(time_str[5]==0)&&
(time_str[4]==0x12)&&(time_str[3]<10))
{//当时间是2000年12月1-9日时,设定网络脉对时,可输入密码进入测试程序
if(ts_hidden_code()!=FALSE)
test_face();
}
return 0xff;
}
else
if(key==KEY_QUIT)
break;
else
if(key==KEY_NULL)
return 0;
}
}
return 0xff;
case 'f':
disp_face();
return 0xff;
break;
case 't':
if(ts_hidden_code()!=FALSE)
test_face();
return 0xff;
break;
case 'A': //打印采样值
if(EEPROMread(eep_CPU_NUB+0)!=1)
{
if(cpu_nmb()==0)
return 0xff;
}
poll_clr();
com_byte(CPU_ID | 0x07);
cstrcpy(disp_buffer,"正在打印采样值");
disp_prt(1*16+8);
keep_timer=0;
for(i=1;i<=TOTAL_CPU_NUMBER;i++)
{
if(EEPROMread(eep_CPU_NUB+i))
keep_timer++;
}
keep_timer*=6;
sampleCPU=0;
poll_seq--;
poll_timer_t=poll_timer;
poll_timer_f=FALSE;
STATUS_WORD=5;
break;
case 'K': //设置时间
set_time();
return 0xff;
case 'W': //切至与pc机通讯状态
ctl_data&=~COM_SEL;
cstrcpy(disp_buffer,"计算机<---->装置");
cls();
mediacy_hz(16*2,disp_buffer);
cstrcpy(disp_buffer,"按QUIT键退出");
mediacy_hz(16*3+8,disp_buffer);
PC_QUIT=0xa5;
detect_timer=PC_DETECT;
break;
case '.':
cstrcpy(disp_buffer," 暂无此功能!\r\r按任意键退出...");
goto disp_help;
case ',':
cstrcpy(disp_buffer," 菜单配置有错!\r\r按任意键退出...");
goto disp_help;
case 'T':
cstrcpy(disp_buffer,ABOUT_STR);
goto disp_help;
case 'Q':
cstrcpy(disp_buffer,MENU_STR);
goto disp_help;
case 'Y':
cstrcpy(disp_buffer,SETTING_STR);
goto disp_help;
case 'a':
cstrcpy(disp_buffer,LOOP_STR);
goto disp_help;
case 'b':
cstrcpy(disp_buffer,REPORT_STR);
goto disp_help;
case 'c':
cstrcpy(disp_buffer,LBMENU_STR);
disp_help:
LCD_display(0,0);
if(get_key());
return 0xff;
case 'I': //调MMI版本
cls();
cstrcpy(disp_buffer,"MMI的版本号为:");
str_hz(0*16,0,disp_buffer);
key=net_send(1,strlen(disp_buffer),0x01,0x32,2|0x80,0,disp_buffer);
csprintf(disp_buffer,VERSION2,TYPE_CODE);
str_hz(1*16,0,disp_buffer);
strcpy(disp_buffer1,disp_buffer);
csprintf(CPU_ON,"000%X",chk_prg_sum());
i=strlen(CPU_ON)-4;
csprintf(disp_buffer,VERSION3,&CPU_ON[i]);//显示校验版本号
mediacy_hz(2*16,disp_buffer+8);
strcat(disp_buffer1,disp_buffer+7);
if(key==0x02)
key=net_send(1,strlen(disp_buffer1),0x01,0x32,2|0x80,0,disp_buffer1);
cstrcpy(disp_buffer,"当前选型:");
cstrcpy(disp_buffer+strlen(disp_buffer),sbxh[EEPROMread(eep_sbxh)].AscCod
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -