📄 scale.cpp
字号:
#include <graphics.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "cursor.h"
#include "keydef.h"
#include "g_func.h"
#include "global.h"
#include "numkeyp.h"
#include "scale.h"
#include "updown.h"
const char *scale[]={"刻 度","自动刻度","单位/格>>","参考电平","参考位置","","",""};
const char *scale2[]={"单位/格","0.1/格","0.2/格","0.5/格"," 1/格"," 2/格"," 5/格"," 10/格"};
void scale_hardkey()
{
_keyid=SCALE;
refresh_up();
if(_lst_sclkey[ch_sel][0]==0)
_softkeyid=1;
else
_softkeyid=_lst_sclkey[ch_sel][0];
rst_num_mem();
disp_menu12((char **)scale,7);
border_scale();
_softkeyid1=0;
refresh_updown_scale();
if(_softkeyid==1||_softkeyid==2){
digital_en=0;
curs_flag=0;
}
else {
digital_en=1;
curs_flag=1;
if(_softkeyid==3){
init_cur_vol(_scale[ch_sel].ref_vol);
}
else if(_softkeyid==4){
init_cur_pos();
}
}
}
void scale_softkey(KEY key)
{
// float old_unit;
switch (key)
{
case F1:
if(_softkeyid==2&&_softkeyid1!=0)
{
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=0.1;
_lst_sclkey[ch_sel][1]=1;
disp_menu12((char **)scale,7);
_softkeyid1=0;
border_scale();
refresh_updown_scale();
refresh_up();
scl_xch = TRUE;
}
else
{ _softkeyid=1;
_lst_sclkey[ch_sel][0]=1;
_softkeyid1=0;
curs_flag=0;
border_scale();
AutoScale();
scl_xch = TRUE;
refresh_up();
refresh_updown_scale();
}
digital_en=0;
break;
case F2:
if(_softkeyid==2&&_softkeyid1!=0)
{
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=0.2;
_lst_sclkey[ch_sel][1]=2;
disp_menu12((char **)scale,7);
_softkeyid1=0;
border_scale();
refresh_updown_scale();
refresh_up();
scl_xch = TRUE;
}
else
{ _softkeyid=2;
_lst_sclkey[ch_sel][0]=2;
// if(_lst_sclkey[ch_sel][1]==0){
if(fabs(_scale[ch_sel].scale_unit - 0.1) < 0.01)
_softkeyid1=21;
else if(fabs(_scale[ch_sel].scale_unit - 0.2) < 0.01)
_softkeyid1=22;
else if(fabs(_scale[ch_sel].scale_unit - 0.5) < 0.01)
_softkeyid1=23;
else if(fabs(_scale[ch_sel].scale_unit - 1) < 0.01)
_softkeyid1=24;
else if(fabs(_scale[ch_sel].scale_unit - 2) < 0.01)
_softkeyid1=25;
else if(fabs(_scale[ch_sel].scale_unit - 5) < 0.01)
_softkeyid1=26;
else if(fabs(_scale[ch_sel].scale_unit - 10) < 0.01)
_softkeyid1=27;
else {
_scale[ch_sel].scale_unit = 10;
_softkeyid1=27;
}
// }
// else
// _softkeyid1=20+_lst_sclkey[ch_sel][1];
curs_flag=0;
refresh_updown_scale();
disp_menu12((char **)scale2,7);
}
border_scale();
digital_en=0;
break;
case F3:
if(_softkeyid==2&&_softkeyid1!=0)
{
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=0.5;
_lst_sclkey[ch_sel][1]=3;
digital_en=0;
disp_menu12((char **)scale,7);
_softkeyid1=0;border_scale();
refresh_updown_scale();
refresh_up();
scl_xch = TRUE;
}
else
{
_softkeyid=3;
_softkeyid1=0;
_lst_sclkey[ch_sel][0]=3;
rst_num_mem();
digital_en=1;
refresh_updown_scale();
init_cur_vol(_scale[ch_sel].ref_vol);
curs_flag=1;
border_scale();
}
break;
case F4:
if(_softkeyid==2&&_softkeyid1!=0)
{
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=1;
_lst_sclkey[ch_sel][1]=4;
digital_en=0;
disp_menu12((char **)scale,7);
_softkeyid1=0;border_scale();
refresh_updown_scale();
refresh_up();
scl_xch = TRUE;
}
else
{
_softkeyid=4;
_softkeyid1=0;
_lst_sclkey[ch_sel][0]=4;
rst_num_mem();
digital_en=1;
refresh_updown_scale();
init_cur_pos();
curs_flag=0;
border_scale();
}
break;
case F5:
if(_softkeyid==2)
{
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=2;
_lst_sclkey[ch_sel][1]=5;
digital_en=0;
disp_menu12((char **)scale,7);
_softkeyid1=0;border_scale();
refresh_up();refresh_updown_scale();
scl_xch = TRUE;
}
break;
case F6:
if(_softkeyid==2)
{ _softkeyid1=26;
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=5;
_lst_sclkey[ch_sel][1]=6;
digital_en=0;
disp_menu12((char **)scale,7);
_softkeyid1=0;border_scale();
refresh_up();refresh_updown_scale();
scl_xch = TRUE;
}
break;
case F7:
if(_softkeyid==2)
{ _softkeyid1=27;
// old_unit=_scale[ch_sel].scale_unit;
_scale[ch_sel].scale_unit=10;
_lst_sclkey[ch_sel][1]=7;
digital_en=0;
disp_menu12((char **)scale,7);
_softkeyid1=0;border_scale();
refresh_up();
refresh_updown_scale();
scl_xch = TRUE;
_softkeyid=0;
}
default:
break;
}
vision();
}
void refresh_updown_scale()
{
char msg[20];
int i;
CLR_LN4;
if(_softkeyid==1){
Outchar12(35,462,"自动刻度",TEXTFURLN);
}
else if(_softkeyid==2){
Outchar12(35,462,"单位/格:",TEXTFURLN);
refr_scl_f2();
}
else if(_softkeyid==3){
Outchar12(35,462,"参考电平:",TEXTFURLN);
refr_scl_f3();
}
else if(_softkeyid==4){
Outchar12(35,462,"参考位置:",TEXTFURLN);
refr_scl_f4();
}
vision();
}
void border_scale()
{
erase_smal_border(1);
for(int i=1;i<=7;i++)
erase_smal_border(i);
if(_softkeyid1==0)
draw_smal_border(_softkeyid);
else
draw_smal_border(_softkeyid1-10*_softkeyid);
}
void vision()
{
int i;
// char is_under=0;
char msg[6];
clear_rect(0,A_LY-5,32,A_RY+15);
clear_rect(0,A_LY-5,32,A_RY+15);
//从最上面开始向下写
// float cur_scl=_scale[ch_sel].ref_vol+_scale[ch_sel].scale_unit*(10-_scale[ch_sel].ref_pos);
int cur_ch_sel=ch_sel;
char second=0;
again:
float cur_scl=_scale[cur_ch_sel].ref_vol+
_scale[cur_ch_sel].scale_unit*(10-_scale[cur_ch_sel].ref_pos);
for(i=0;i<=10;i++){
if(i==10-_scale[cur_ch_sel].ref_pos){
// is_under=1;
cur_scl-=_scale[cur_ch_sel].scale_unit;
continue;
}
int int_part=(int)cur_scl;
float f_part=cur_scl-int_part;
if(f_part<-0.95){
int_part-=1;
f_part=0.0;
}
// if(int_part>=100)
if(cur_scl>=100)
sprintf(msg,"%d",int_part);
// else if(int_part<100&&int_part>-10)
else if(cur_scl<100&&cur_scl>-10+1e-2)
sprintf(msg,"%.1f",cur_scl);
else if(f_part>-0.05)// print integer
sprintf(msg,"%d",int_part);
else{ //print xiaoshu
sprintf(msg,"%.1f",f_part);
msg[0]=msg[2];
msg[1]=msg[3];
msg[2]='\0';
}
if(cur_ch_sel==0)
setcolor(_system.colora);
else
setcolor(_system.colorb);
// int i;
if(strlen(msg)==1){
msg[4]='\0';
msg[3]=msg[0];
msg[2]=' ';
msg[1]=' ';
msg[0]=' ';
}
else if(strlen(msg)==2){
msg[4]='\0';
msg[3]=msg[1];
msg[2]=msg[0];
msg[1]=' ';
msg[0]=' ';
}
else if(strlen(msg)==3){
msg[4]='\0';
msg[3]=msg[2];
msg[2]=msg[1];
msg[1]=msg[0];
msg[0]=' ';
}
disable();
if(second==1){
if(_disp.disp_way==0)
outtextxy(0,A_LY+40*i+10,msg);
else if(_disp.disp_way==2)
outtextxy(0,A_LY+32*i+10,msg);
}
else{
if(_disp.disp_way==0)
outtextxy(0,A_LY+40*i,msg);
else if(_disp.disp_way==2)
outtextxy(0,A_LY+32*i,msg);
}
cur_scl-=_scale[cur_ch_sel].scale_unit;
}
draw_triangle(_scale[cur_ch_sel].ref_pos,second);
if(alternative==ON&&second==0){
cur_ch_sel=1-cur_ch_sel;
second=1;
goto again;
}
}
BOOL StoreScale()
{
disable();
FILE* fp;
if((fp = fopen("Scale.dat","wb"))==NULL){
return FALSE;
}
fwrite(_scale,sizeof(_SCALE),2,fp);
fclose(fp);
delay(500);
return TRUE;
}
void AutoScale()
{
float max = _marker[ch_sel].max_mkr.power;
float min = _marker[ch_sel].min_mkr.power;
float diff = max - min;
if(diff/10 >= 5)
_scale[ch_sel].scale_unit = 10;
else if(diff/10 >= 2)
_scale[ch_sel].scale_unit = 5;
else if(diff/10 >= 1)
_scale[ch_sel].scale_unit = 2;
else if(diff/10 >= 0.5)
_scale[ch_sel].scale_unit = 1;
else if(diff/10 >= 0.2)
_scale[ch_sel].scale_unit = 0.5;
else if(diff/10 >= 0.1)
_scale[ch_sel].scale_unit = 0.2;
else
_scale[ch_sel].scale_unit = 0.1;
float cen = (max + min)/2;
// printf("%.2f %.2f %.2f\n",max,min,cen);
// if(_chab[ch_sel].flag==0)
// cen -= _power[ch_sel].output_power;
_scale[ch_sel].ref_pos = 5;
_scale[ch_sel].ref_vol = (int)cen;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -