📄 numkeyp.cpp
字号:
#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include "keydef.h"
#include "global.h"
#include "g_func.h"
#include "keyproce.h"
#include "numkeyp.h"
#include "cursor.h"
#include "marker.h"
#include "display.h"
#include "updown.h"
#include "freqkey.h"
#include "powerkey.h"
#include "scale.h"
extern char AboveBelow;
extern char*marker_7[];
/******************************************************
* 2004-2-19 14:00, LingYi
* set_freq(), it set the extern variables of frequancy
* according to the array number_keys and num_unit
*****************************************************/
void set_freq()
{
int i_dot=0;
int ii;
int j;
char i;
long set_value;
if(index==0)
return;
while(i_dot<index){ //search the position of dot
if(number_keys[i_dot] == NDOT)
break;
i_dot++;
}
if( (num_unit==KHZ)||(num_unit==0&&_freq[ch_sel].resolve==KHZ) )
for(ii=0;ii<3;ii++){
number_keys[i_dot]=number_keys[i_dot+1];
i_dot+=1;
}
else if( (num_unit==MHZ)||(num_unit==0&&_freq[ch_sel].resolve==MHZ) )
for(ii=0;ii<6;ii++){
number_keys[i_dot]=number_keys[i_dot+1];
i_dot+=1;
}
ii=i_dot;
j=0;
set_value=0;
while(--ii>=0) //calculate the value of integer
set_value+=number_keys[ii]*pow(10,j++);
switch(_softkeyid)
{
case 1:
if(set_value<=_freq[ch_sel].end_freq-_status[ch_sel].sweep_points
&&set_value>=100000){
_freq[ch_sel].start_freq=set_value;
stat_xch=1;
update_cs_f();
refr_frq_f1();
_freq[ch_sel].is_dot_freq=FALSE;
// set9852(_freq[ch_sel].start_freq);
}
else if(set_value<100000)
{
_freq[ch_sel].start_freq=100000;
stat_xch=1;
update_cs_f();
refr_frq_f1();
_freq[ch_sel].is_dot_freq=FALSE;
}
else if(set_value>_freq[ch_sel].end_freq-_status[ch_sel].sweep_points)
{
_freq[ch_sel].start_freq=_freq[ch_sel].end_freq-_status[ch_sel].sweep_points;
stat_xch=1;
update_cs_f();
refr_frq_f1();
_freq[ch_sel].is_dot_freq=FALSE;
}
break;
case 2:
if(set_value>=_freq[ch_sel].start_freq+_status[ch_sel].sweep_points&&
set_value<=50000000){
_freq[ch_sel].end_freq=set_value;
stat_xch=1;
update_cs_f();
_freq[ch_sel].is_dot_freq=FALSE;
}
else if(set_value>50000000){
_freq[ch_sel].end_freq=50000000;
stat_xch=1;
update_cs_f();
_freq[ch_sel].is_dot_freq=FALSE;
}
else if(set_value<_freq[ch_sel].start_freq+_status[ch_sel].sweep_points
&&_freq[ch_sel].start_freq<50000000-_status[ch_sel].sweep_points)
{
_freq[ch_sel].end_freq=_freq[ch_sel].start_freq+_status[ch_sel].sweep_points;
stat_xch=1;
update_cs_f();
refr_frq_f1();
_freq[ch_sel].is_dot_freq=FALSE;
}
break;
case 3:
if(_freq[ch_sel].is_dot_freq==FALSE){
if( (set_value+_freq[ch_sel].freq_width/2)<=50000000\
&&(set_value-_freq[ch_sel].freq_width/2)>=100000)
{
_freq[ch_sel].center_freq=set_value;
stat_xch=1;
update_ss_f();
}
else if(set_value+_freq[ch_sel].freq_width/2>50000000&&set_value<50000000)
{
_freq[ch_sel].center_freq=set_value;
_freq[ch_sel].freq_width = 2*(50000000 - set_value);
// _freq[ch_sel].end_freq=50000000;
stat_xch=1;
update_ss_f();
// update_cs_f();
}
else if(set_value-_freq[ch_sel].freq_width/2<100000&&set_value>100000)
{
_freq[ch_sel].center_freq=set_value;
_freq[ch_sel].freq_width = 2*(set_value - 100000);
// _freq[ch_sel].start_freq=100000;
stat_xch=1;
update_ss_f();
}
}
break;
case 4:
if(set_value < _status[ch_sel].sweep_points)
{}
else if((_freq[ch_sel].center_freq+set_value/2)<=50000000&&
(_freq[ch_sel].center_freq-set_value/2)>=100000)
{
_freq[ch_sel].freq_width=set_value;
stat_xch=1;
update_ss_f();
_freq[ch_sel].is_dot_freq=FALSE;
}
else if(_freq[ch_sel].center_freq+set_value/2>50000000)
{
_freq[ch_sel].end_freq=50000000;
stat_xch=1;
update_cs_f();
_freq[ch_sel].is_dot_freq=FALSE;
}
else if(_freq[ch_sel].center_freq-set_value/2<100000)
{
_freq[ch_sel].start_freq=100000;
stat_xch=1;
update_cs_f();
_freq[ch_sel].is_dot_freq=FALSE;
}
break;
case 5:
if(set_value<=50000000&&set_value>=100000){
_freq[ch_sel].dot_freq=set_value;
_freq[ch_sel].start_freq=_freq[ch_sel].end_freq=_freq[ch_sel].dot_freq;
for(i=1;i<=8;i++)
if(_marker[ch_sel].mark[i].on_off==ON)
_marker[ch_sel].mark[i].freq=_freq[ch_sel].dot_freq;
stat_xch=1;
update_cs_f();
}
else if(set_value>50000000){
_freq[ch_sel].dot_freq=50000000;
_freq[ch_sel].start_freq=_freq[ch_sel].end_freq=_freq[ch_sel].dot_freq;
for(i=1;i<=8;i++)
if(_marker[ch_sel].mark[i].on_off==ON)
_marker[ch_sel].mark[i].freq=_freq[ch_sel].dot_freq;
stat_xch=1;
update_cs_f();
}
else if(set_value<100000){
_freq[ch_sel].dot_freq=100000;
_freq[ch_sel].start_freq=_freq[ch_sel].end_freq=_freq[ch_sel].dot_freq;
for(i=1;i<=8;i++)
if(_marker[ch_sel].mark[i].on_off==ON)
_marker[ch_sel].mark[i].freq=_freq[ch_sel].dot_freq;
stat_xch=1;
update_cs_f();
}
default:
break;
}
// stat_xch=1;
curs_flag=1;
digital_en=1;
rst_num_mem();
refresh_updown_f();
}
/********************************************************
* 2004-3-1 10:20, LingYi
* set_power(), it set the extern variables of power
* according to the array number_keys, num_unit and sign
*******************************************************/
void set_power()
{
int i_dot=0;
int ii;
int j;
double set_value;
if(index==0)
return;
while(i_dot<index){ //search the position of dot
if(number_keys[i_dot] == NDOT)
break;
i_dot++;
}
ii=i_dot; //calculate the value of numbers in number_keys[]
j=0;
set_value=0;
while(--ii>=0) //calculate the value of integer
set_value+=number_keys[ii]*pow(10,j++);
ii=i_dot;
j=0;
while(ii++<index)
set_value+=number_keys[ii]*pow(10,-(++j));
if(num_unit==MV)
set_value=10*log10(pow(set_value,2)*2*0.00001)-0.015;
if(sign==0)
set_value=0-set_value;
// if(set_value<-70||set_value>13) //out of boundary, exit, keep old value
// goto exit_sp;
if(set_value<-70)
set_value = -70;
else if(set_value>13)
set_value = 13;
if(_softkeyid==1){
_power[ch_sel].output_power=set_value;
/* if(_power[ch_sel].output_power>-0.001){
outportb(0x35c,0);
}
else if(_power[ch_sel].output_power>-10.001){
outportb(0x35c,0x1);
}
else if(_power[ch_sel].output_power>-20.001){
outportb(0x35c,0x2);
}
else if(_power[ch_sel].output_power>-30.001){
outportb(0x35c,0x3);
}
else if(_power[ch_sel].output_power>-40.001){
outportb(0x35c,0x6);
}
else if(_power[ch_sel].output_power>-50.001){
outportb(0x35c,0x7);
}
else if(_power[ch_sel].output_power>-60.001){
outportb(0x35c,0x0e);
}
else if(_power[ch_sel].output_power>-70.001){
outportb(0x35c,0x0f);
}*/
set_relay(_power[ch_sel].output_power);
refresh_up();
}
else if(_softkeyid1==21&&set_value<=_power[ch_sel].end_power){
_power[ch_sel].start_power=set_value;
}
else if(_softkeyid1==22&&set_value>=_power[ch_sel].start_power)
_power[ch_sel].end_power=set_value;
exit_sp:
stat_xch=1;
digital_en=1;
curs_flag=1;
rst_num_mem();
refresh_down_p();
}
/********************************************************
* 2004-3-1 10:40, LingYi
* set_sweep_time(), it set the extern variables of sweep
* time according to the array number_keys and num_unit
*******************************************************/
void set_sweep_time()
{
int i_dot=0;
int ii;
int j;
char msg[3];
msg[1]='\0';
msg[2]='\0';
long set_val;
if(index==0)
return;
while(i_dot<index){ //search the position of dot
if(number_keys[i_dot] == NDOT)
break;
i_dot++;
}
if(_softkeyid1==12)
for(ii=0;ii<3;ii++){
number_keys[i_dot]=number_keys[i_dot+1];
i_dot+=1;
}
ii=i_dot;
j=0;
set_val=0;
while(--ii>=0) //calculate the value of integer
set_val+=number_keys[ii]*pow(10,j++);
// if(set_val<50||set_val>100000)
// goto exit_sst;
if(set_val<50)
set_val = 50;
else if(set_val>100000)
set_val = 100000;
stat_xch=1;
_sweep[ch_sel].sweep_time=set_val;
init_cur_swp(_sweep[ch_sel].sweep_time);
exit_sst:
rst_num_mem();
curs_flag=1;
digital_en=1;
}
/*
int scl_err()
{
int i,j;
float curr;
char msg[10];
for(i=0;i<=10-_scale[ch_sel].ref_pos;i++){
curr=_scale[ch_sel].ref_vol+i*_scale[ch_sel].scale_unit;
if(curr>99.99){
sprintf(msg,"%.1f",curr);
for(j=0;;j++)
if(msg[j]=='.')
break;
if(msg[j+1]!='0'||_scale[ch_sel].scale_unit<1)
goto err;
}
}
for(i=0;i<=_scale[ch_sel].ref_pos;i++){
curr=_scale[ch_sel].ref_vol-i*_scale[ch_sel].scale_unit;
if(curr<-9.99){
sprintf(msg,"%.1f",curr);
for(j=0;;j++)
if(msg[j]=='.')
break;
if(msg[j+1]!='0'||_scale[ch_sel].scale_unit<1)
goto err;
}
}
return 1;
err:
clear_rect(105,462,449,475);
clear_rect(105,462,449,475);
rst_num_mem();
Outchar12(105,462,"本仪器无法分辨此刻度,请重新设置!",RED);
clear_rect(0,A_LY,30,A_RY+5);
clear_rect(0,A_LY,30,A_RY+5);
return 0;
}
*/
void set_scale()
{
int i_dot=0;
int ii;
int j;
// float set_val,old_v;
int set_val,old_v;
int set_val1,old_pos;
if(index==0)
return;
while(i_dot<index){ //search the position of dot
if(number_keys[i_dot] == NDOT)
break;
i_dot++;
}
set_val=0;
set_val1=0;
ii=i_dot;
j=0;
while(--ii>=0) //calculate the value of integer
set_val+=number_keys[ii]*pow(10,j++);
// ii=i_dot; //参考电平只能是整型,不考虑浮点
// j=0;
// while(ii++<index)
// set_val+=number_keys[ii]*pow(10,-(++j));
if(sign==0)
set_val=0-set_val;
if(_softkeyid==3){
if(num_unit==MV)
set_val=10*log10(pow(set_val,2)*2*0.00001);
old_v=(int)_scale[ch_sel].ref_vol;
_scale[ch_sel].ref_vol=set_val;
// if(set_val<-69.99||set_val>99.99||!scl_err())
if(set_val<-99||set_val>99)
{
_scale[ch_sel].ref_vol=old_v;
return;
}
scl_xch = TRUE;
init_cur_vol(_scale[ch_sel].ref_vol);
}
else if(_softkeyid==4){
set_val1=(int)set_val;
old_pos=_scale[ch_sel].ref_pos;
_scale[ch_sel].ref_pos=set_val1;
// if(set_val1<0||set_val1>10||!scl_err())
if(set_val1<0||set_val1>10)
{
_scale[ch_sel].ref_pos=old_pos;
return;
}
scl_xch = TRUE;
init_cur_pos();
}
curs_flag=1;
rst_num_mem();
refresh_up();
refresh_updown_scale();
vision();
cursor();
}
float max(float a,float b)
{
return a>b?a:b;
}
void set_marker()
{
int i_dot=0;
int ii,j;
float set_v,max_min;
if(_softkeyid>=1&&_softkeyid<=4)
{
long set_v;
if(index==0)
return;
while(i_dot<index){ //search the position of dot
if(number_keys[i_dot] == NDOT)
break;
i_dot++;
}
if( (num_unit==KHZ)||(num_unit==0&&_freq[ch_sel].resolve==KHZ) )
for(ii=0;ii<3;ii++){
number_keys[i_dot]=number_keys[i_dot+1];
i_dot+=1;
}
else if( (num_unit==MHZ)||(num_unit==0&&_freq[ch_sel].resolve==MHZ) )
for(ii=0;ii<6;ii++){
number_keys[i_dot]=number_keys[i_dot+1];
i_dot+=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -