⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numkeyp.cpp

📁 串口可交换程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -