📄 niuju1.c
字号:
*p use 10 units
results in p1 all only 2 data
*/
void sub_get_parameter(void)
{
data uchar *p1;
p1=str2;
get_buff(p1,1);
time_delta=(*p1&0x0f)*10+(*(p1+1)&0x0f); //存数的时间间隔
get_buff(p1,2);
k_current=(*p1&0x0f)*10+(*(p1+1)&0x0f); //电流互感系数75:5
get_buff(p1,3);
k_torque=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
get_buff(p1,5);
k2_va=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
get_buff(p1,6);
k2_vb=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
get_buff(p1,7);
k2_vc=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
get_buff(p1,8);
k2_current=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
get_buff(p1,9);
k2_power=(*p1&0x0f)*100+(*(p1+1)&0x0f)*10+(*(p1+2)&0x0f);
}
/*----------------------------------------------------*/
/*---------------------------------------*/
void dis_str(uchar x, uchar y, uchar *str) ;
/*---------------------------------------*/
void disp_chk1(char *p,uchar n1)
{
static data uchar csor;
data uchar *p1;
data char *p2,n;
//code uchar wei[10]={0,1,2,4,6,7,8,10,0,0};
p2=p; n=n1;
//*(p2+2)=0; *(p2+5)=0; *(p2+8)=0;
csor=*(p2+n); //str[wei[n]];
if(flag_cursor){
flag_cursor=0;
//p1=&str[0];
*(p2+n)=csor;
if(*p2&0x80){
*p2&=0x7f; *p2='-'; //为err=-2--+2而设计
}
dis_str(2,8,p2);
dis_str(4,16," ");
}else{
flag_cursor=1;
p1=p2; //&str[0];
*(p1+n)=' ';
if(*p1&0x80){
*p1&=0x7f; *p1='-'; //为err=-2--+2而设计
}
dis_str(2,8,p1);
dis_str(4,16," ");
}
*(p2+n)=csor; //恢复闪烁位数据
}
/*---------------------------------------------------------*/
void itoa(int x,unsigned char *str);
/*---------------------------------------*/
/*---------------------------------------*/
/*----------------------------------------------------*/
uchar is_left_right_key(uchar n1)
{
data uchar n;
n=n1;
if(key_right)n++;
else n--;
while(key_sfr!=0xff)getkey();
key_sfr0=0;
return n;
}
/*----------------------------------------------------*/
void is_up_down_key(char *buff,uchar n)
{
data char *p1;
//n=n1;
p1=buff;
if(key_up){
*(p1+n)+=1;
if(speed==1) *(p1+n)+=10;
}else{
*(p1+n)-=1;
if(speed==1) *(p1+n)-=10;
}
while(key_sfr!=0xff)getkey();
key_sfr0=0;
}
/*----------------------------------------------------*/
/*---------------------------------------------------------*/
void disp_set_static_panel(uchar n1)
{
data uchar n;
n=n1;
//idata uchar str2[6];
//dis_hz_str(1,3,"设定\0"); str2[0]=n+'0'; str2[1]=0; str2[2]=0;
//dis_str(1,10,str2);
dis_str(1,1," \0");
dis_hz_str(1,1,set_hz[n].name1);
dis_str(2,1," \0");
dis_hz_str(2,1,set_hz[n].name2);
dis_str(2,8," \0");
dis_str(4,16," "); //将光标调到右下角
}
/*-----------------------------------------------------------------*/
/*---------------------------------------*/
void sub_set(uchar n1) /*n=1---7*/ //?
{
data uint count;
data char edit_buff[16];
data uchar i,n;
bit bt=0,bl; // s I M 2 a b c I P
code uchar lth[10]={2,2,2,3,4,3,3,3,3,3}; /*set value lest to 99*/
data unsigned char trap_set=0,trap_set1=0;
n=n1;
get_buff(edit_buff,n);
for(i=lth[n];i<14;i++)edit_buff[i]=0;
edit_buff[15]=0x55;
trap_set1=edit_buff[14];
if(trap_set1>lth[n])trap_set1=0;
trap_set=trap_set1; //iptr[trap_set1];
disp_set_static_panel(n);
disp_chk1(edit_buff,trap_set);
key_sfr=0;flag_key=0;
while(trap_set1!=13){
getkey();
/*
count=T_50ms=0;
while(T_50ms<5){
if(T_50ms!=count){count=T_50ms; getkey(); }
}
T_50ms=0; while(T_50ms<2);
*/
if(minuter>1)return ;
if(key_left || key_right){
bl=key_left;
trap_set1=is_left_right_key(trap_set1);
if(trap_set1==0xff)trap_set1=lth[n];
if(trap_set1>=lth[n])trap_set1=0;
trap_set=trap_set1; //iptr[trap_set1];
}
if( key_up | key_down){
bt=1; /*the data have edited*/ //trap_set=1;
is_up_down_key(edit_buff,trap_set);
if((edit_buff[trap_set]&0x7f)>'9')edit_buff[trap_set]='0';
if(edit_buff[trap_set]<'0')edit_buff[trap_set]='9';
/*
if(n==5){
if(edit_buff[2]>'1')edit_buff[2]='0';
if(edit_buff[2]=='1'){
if(edit_buff[3]>'2')edit_buff[3]='0';
}
if(edit_buff[4]>'3')edit_buff[4]='0';
}
if(n==6){
if(edit_buff[0]>'2')edit_buff[0]='0';
if(edit_buff[0]=='2'){
if(edit_buff[1]>'3')edit_buff[1]='0';
}
if(edit_buff[2]>'5')edit_buff[2]='0';
if(edit_buff[4]>'5')edit_buff[4]='0';
}
*/
}
if(key_ok){
if((n==3)&&(trap_set1<8)){
for(i=8;i<11;i++)edit_buff[i]=0;
}
edit_buff[14]=trap_set1; //trap_set1 从buff[12]进入
if(bt) save_buff(edit_buff,n); //trap_set1,n);
trap_set1=13;
}
rst_wdog(); //dis_7219(6,n,0);
count++; if(count>3500)count=0;
if(count==0){
disp_chk1(edit_buff,trap_set);
}
}
rst_wdog();
while(key_sfr!=0xff){getkey();flag_key=0;}
key_sfr0=key_sfr=0;
return ;
}
/*********************************************************/
//void disp_cut_panel(void);
void disp_static_panel(void)
{
dis_hz_str(1,1,"扭矩\0"); // 10.0 KN.m
dis_str(1,6," N.m\0");
dis_str(2,1," r/min KW\0");
dis_str(3,1," V A\0");
dis_str(4,1," : : \0");
}
/*----------------------------------------------------*/
/*
chl=1,2,3 select display the LED view window
void display_set_data(int x,uchar n,uchar chl)
{
dis_str(chl,10,set.dat1);
dis_str(chl,10,set.dat1);
} */
void display_run_data(char locx1,char locy1,int x1)
{
data uchar str2[6],i,L,locx,locy;
data int x;
bit flag_neg;
x=x1; locx=locx1; locy=locy1;
//p=str;
i=1;
if(x<0){flag_neg=1; x=-x;}else flag_neg=0;
if(x>50000)x=50000;
itoa(x,str2);
L=strlen(str2);
switch(L){
case 1:
str2[4]=str2[0]; str2[3]='.';str2[2]='0'; str2[1]=' '; str2[0]=' ';
break;
case 2:
str2[4]=str2[1]; str2[3]='.';str2[2]=str2[0]; str2[1]=' '; str2[0]=' ';
break;
case 3:
str2[4]=str2[2]; str2[3]='.';str2[2]=str2[1]; str2[1]=str2[0]; str2[0]=' ';
break;
case 4:
str2[4]=str2[3]; str2[3]='.';
break;
}
if(flag_neg){ //负数处理
switch(L){
case 1:
case 2:
str2[1]='-';
break;
case 3:
str2[0]='-';
break;
case 4:
case 5:
for(i=4;i>0;i--)str2[i]=str2[i-1]; str2[0]='-';
break;
}
}
str2[5]=0; //字符串结束
dis_str(locx,locy," ");
dis_str(locx,locy,str2);
}
/*---------------------------------------------------------*/
void disp_data(void)
{
//display_run_data(1,6,DA.torque);
itoa(DA.torque,str2);
dis_str(1,6," ");
dis_str(1,6,str2);
if(DA.n_value>999)DA.n_value=999;
itoa(DA.n_value,str2);
dis_str(2,1," ");
dis_str(2,1,str2);
display_run_data(2,10,DA.power); //power
display_run_data(3,1,v380);
display_run_data(3,11,DA.current); //current
itoa(hour,str2);
dis_str(4,1," ");
dis_str(4,1,str2);
itoa(minute,str2);
dis_str(4,5," ");
dis_str(4,5,str2);
itoa(second,str2);
dis_str(4,9," ");
dis_str(4,9,str2);
DA.T[0]=second;
DA.T[1]=minute;
DA.T[2]=hour;
dis_str(4,16," ");
}
/*----------------------------------------------------*/
/*---------------------------------------------------------*/
void disp_v_data(void)
{
dis_str(1,1,"Va=\0");
dis_str(2,1,"Vb=\0");
dis_str(3,1,"Vc=\0");
dis_str(4,1,"I=\0");
display_run_data(1,4,DA.V[0]); //current
display_run_data(2,4,DA.V[1]);
display_run_data(3,4,DA.V[2]);
display_run_data(4,4,DA.current);
}
/*---------------------------------------*/
void main(void)
{
data uchar i,ad_j,n_ptr,ch,crect,work,old_second,count_key; //,*ptr;
data uint xch,max3,xch1;
//bit flag_err24,flag_store_data,flag_err_GPS;
for(xch=0;xch<0x500;xch++){ ch=0; rst_wdog(); }
//for(xch=0;xch<0xfff0;xch++) { i=0; rst_wdog(); }
//getkey();
P0=0xff; P1=0xff; P2=0xff;
i=0;
P_RS=0;
SP=0xef;
initial();
init_t2();
initial_screen();
instruct(0x0c); //关闭
//AD_2543(3);
//xch=AD_2543(3);
/*
strcpy(str2,"扭矩测量系统\0");
dis_hz_str(1,1,str2);
dis_str(4,16," ");
*/
sub_get_parameter();
ch=byte_read(0x20); //get time_ptr
xch=ch;
minute=byte_read(xch); //get minute from eeprom
hour=byte_read(xch|0x0010); //get hour from eeprom
ch=0;
ES=0;
EA=1;
flag_COM=1;
P_RS=0;
work=ms_timing;
instruct(clear);
//sub_set(3);
disp_static_panel(); //
//disp_data();
for(i=0;i<10;i++) str2[i]=0;
EA=1; ET0=1; TR0=1; //flag_store_data=0; flag_err_GPS=0;
count_key=0; //set key time delay
while(1){
while(work==ms_timing){ //second){
getkey();
rst_wdog();
}
EA=1; ET0=1; TR0=1;
work=ms_timing; //second;
T_50ms=0;
while(T_50ms)T_50ms=0;
AD_2543(0);
while(!T_50ms){
max3=AD_2543(0);
if(max2<max3)max2=max3;
}
Collect_Handle(ad_j);
ad_j++; if(ad_j>=5)ad_j=0;
if(flag_n){
flag_n=0;
n_filt[n_ptr++]=n_v; //每10秒存储一个数据,共有6个数据n_v是在T0中断时赋值
if(n_ptr>=6)n_ptr=0; xch1=0;
for(i=0;i<6;i++)xch1=xch1+n_filt[i];
if(time_n==1){xch=n_v*6;DA.n_value=xch; }
else if(time_n==2){xch=n_v*6;DA.n_value=xch; }
else if(time_n>=6){DA.n_value=xch1; }
//DA.n_value=xch; //扭矩
//disp_static_panel(); //
}
if(old_second!=second){
old_second=second;
disp_data();
}
if(old_minute!=minute){
old_minute=minute;
count_key=0;
ch=byte_read(0x20);
ch&=0x0f;
xch=ch;
byte_write(xch,minute); //write into 20h--2fh
//定时清屏幕
instruct(clear);
disp_static_panel(); //
disp_data();
}
if(old_hour!=hour){
old_hour=hour;
ch=byte_read(0x20);
ch&=0x0f;
xch=ch;
byte_write(xch|0x10,hour); //write into 30--3fh
}
if(second3>=time_delta){ //通信
second3=0;
TI=1; ch=0; crect=0;
ptr=&DA;
for(i=0;i<17;i++){
while(!TI);
ch=*ptr++; SBUF=ch; crect+=ch;
TI=0;
rst_wdog();
}
while(!TI);
SBUF=crect; //send correct code
TI=0;
}
ch=0xff;
// if(flag_COM)ch=receive_GPS();
getkey();
if(key_set){
count_key++;
count_key&=0x07;
if(count_key==0x07){
count_key=0;
instruct(clear);
key_sfr0=0;
while(key_sfr!=0xff){getkey();flag_key=0; rst_wdog();}
minuter=0;
for(i=1;i<5;i++){
sub_set(i);
if(minuter>1)break;
}
get_buff(str2,4);
if(str2[0]=='1'&&str2[1]=='2'&&str2[2]=='3'&&str2[3]=='4'){
for(i=5;i<=9;i++){
sub_set(i);
if(minuter>1)break;
}
}
sub_get_parameter();
instruct(clear);
disp_static_panel(); //
disp_data();
while(key_sfr!=0xff){getkey();flag_key=0;}
}
key_sfr0=0;
key_sfr=0x1f;
rst_wdog();
}
if(key_chk){ //chk key==right key + set key //ok key==up key+ set key
hour=minute=second=0; count_key=0;
ch=byte_read(0x20);
ch++;
ch&=0x0f;
xch=ch;
byte_write(0x20,xch);
byte_write(xch,minute); //write into 20h--2fh
byte_write(xch|0x10,hour); //write into 30--3fh
}
if(key_up){ //查看三相电压和电流
key_chk=0; while(key_sfr!=0xff){getkey();flag_key=0;}
count_key=0;
instruct(clear);
second2=0;;
while(second2<5){
getkey();
disp_v_data();
if(key_chk) break;
key_sfr0=0;
rst_wdog();
}
instruct(clear);
disp_static_panel(); //
disp_data();
while(key_sfr!=0xff){getkey();}
flag_key=0; key_sfr0=0;
}
rst_wdog();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -