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

📄 wondercb.c

📁 该软件用于抄表器 实现多功能表自动抄表! 只需将其下载到9800型 抄表器即可运行!
💻 C
📖 第 1 页 / 共 4 页
字号:
  sendmsg[9]=0x02;
  sendmsg[10]=0x43;
  sendmsg[11]=0xc3;

  for(i=0;i<12;i++)
   cs+=sendmsg[i];

  sendmsg[12]=cs;
  sendmsg[13]=0x16;

  for( i= 0; i < 3; i++ )
    {
     ir_sport(0xfe);
     delay_ms(delaytime);
    }
 ir_trans(sendmsg,14,delaytime);

  length=ir_receive(rec);
  if ( length )
   {
    if(flag)
     return 3;
    else
    return mode;
   }

  if( mode < 0 &&flag==1)
   {
   OutPut_Fand_Failed( bdz );
   delay_ms(DELAY_TIME3S);
   return -1;
   }
  else
   {
   mode--;
   goto nextmode;
   }
} //





//画向上乡下三角形
void Draw_UP_DOWN( int flag )
{
 int x,y;
 int left,right;
 int xStart,yStart;

 switch(flag)
     {
      case  UP : //Out_Put_UP
                xStart=64;
                yStart=114;
                for(left=0,right=0,y=0;y<=5&&left>=-5&&right<=5;y++,left--,right++)
                 {
                  for(x=left;x<=right;x++)
                  setdot(xStart+x,yStart+y);//点亮屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
                yStart=122;
                xStart=64;
                for(left=-5,right=5,y=0 ; y<=5&&left<=0&&right>=0;y++,left++,right--)
                 {
                  for(x=left;x<=right;x++)
                  clrdot(xStart+x,yStart+y);//清除屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
                break;
      case  DOWN : //Out_Put_DOWN();
                xStart=64;
                yStart=114;
                for(left=0,right=0,y=0;y<=5&&left>=-5&&right<=5;y++,left--,right++)
                 {
                  for(x=left;x<=right;x++)
                  clrdot(xStart+x,yStart+y);//清除屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
                yStart=122;
                xStart=64;
                for(left=-5,right=5,y=0 ; y<=5&&left<=0&&right>=0;y++,left++,right--)
                 {
                  for(x=left;x<=right;x++)
                  setdot(xStart+x,yStart+y);//点亮屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
                break;
      case  UP_DOWN :
                xStart=64;
                yStart=114;
                for(left=0,right=0,y=0;y<=5&&left>=-5&&right<=5;y++,left--,right++)
                 {
                  for(x=left;x<=right;x++)
                  setdot(xStart+x,yStart+y);//点亮屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
                yStart=122;
                xStart=64;
                for(left=-5,right=5,y=0 ; y<=5&&left<=0&&right>=0;y++,left++,right--)
                 {
                  for(x=left;x<=right;x++)
                  setdot(xStart+x,yStart+y);//点亮屏幕上某一点.行坐标(0-127)列坐标(0-127)
                 }
              break;
    }
}



// 存储机械表信息// char strings[][DLARRAY_MAX
U8 Store_jjb (char strings[][50])
{
  int  Search_Resault;
  int  sign;
  int  Number;
  int  sum,all;
  char str[50]="",back_date_time[50]="";

  Search_Resault = Search_jjb_Record(strings[0]);
     use("");
  use(dbfname);
  sum=Get_Record_Number();

  all=libsumr();

  if(Search_Resault==-1&&sum==all)
   {
     sign=libappend();
     if(sign!=1)
        {
         return FALSE;
        }
     Number = libsumr();
     Number--;
   }
  else if(Search_Resault!=-1)
   {
     Number = Search_Resault;
   }
  else if(sum<all)
   {
    Number = sum;
   }


 libset (Number,START2);   //读读数2
   libread(str);

   libset (Number,START1);
   libwrit(str);

   libset (Number,START2);   //写读数2
   libwrit(strings[1]);

   libset (Number,B_W);    //存储表位
   libwrit(strings[0]);

   libset (Number,DATA_TIME2);  //读日期时间
   libread(back_date_time);

   libset (Number,DATA_TIME1);  //写1的日期时间
   libwrit(back_date_time);

   Get_Datetime(back_date_time);
   libset (Number,DATA_TIME2); //写2的日期时间
   libwrit(back_date_time);

   return TRUE;
}


//计算电量
double Get_Dl(char strings0[],char strings1[],char strings2[])
 {
   double dd,dqz,dl;
   dd =atof(strings0);
   dqz=atof(strings1);
   dl =dqz-dd;
   sprintf(strings2,"%.1f",dl);//把电量转换成字符串
   return dl;
 }


//查找纪录,找到返回记录号,否者返回 -1
int  Search_jjb_Record(char string[])
{
 int  bz,bz2,sign=0;
 int num;
 char str2[50]="";
 char str[50]="";
 Record_Number = Get_Record_Number();
  use("");
 use(dbfname);
 if ( Record_Number == 0 )
  {
  return -1;
  }

 for( num = 0 ; num < Record_Number ; num++ )
  {
   libset(num,B_W);
   libread(str2);
   libset(num,B_DZ);
   libread(str);
   bz = strcmp ( string,str2 ); //查询并定位到相应记录.

   bz2=strlen(str);
   if( bz == 0 && bz2 ==0)
    {
    return num;
    }
  }
  if ( num == Record_Number )
    {
    return -1;
    }

}


//输出错误提示信息
void Put_Input_ErrorMsg( void )
{
 cls();
 MiddlePutStr("输入错误!",4);
 MiddlePutStr("电量不可为负!",7);
 MiddlePutStr("请重新输入!",9);
 delay_ms( DELAY_TIME3S ); //延时 time_ms     延时时间(单位毫秒)
}


//输出提示信息
void OutPut_Message(char message[])
{
 cls();
 Clear_123();
 MiddlePutStr(message,MiddleY);
 delay_ms(DELAY_TIME1S);
}


//处理翻页键,返回记录号
int PageUpDown(int Number,U16 direction)
{
         use("");
         use(dbfname);
         Record_Number=Get_Record_Number();
         if(direction==DOWN )//如果是DOWN 则往下翻页
                {
                        Number++;
                        if(Number>=Record_Number)
                        {
                                cls();
                                draw_border(2,5,15,10);
                                Clear_123();
                                moveto(4,7);
                                putstr(" 已到尾部 ");
                                bell(7);
                                delay_ms(DELAY_TIME1S);
                                Number--;
                        }
                }
           else  if ( direction == UP )  //如果是UP往上翻页
                {
                        Number--;
                        if( Number<0)
                        {
                                cls();
                                draw_border(2,5,15,10);
                                Clear_123();
                                moveto(4,7);
                                putstr(" 已到头部 ");
                                bell(7);
                                delay_ms(DELAY_TIME1S);
                                Number++;
                        }
                }
       return Number;

}


//在第line 中间输出以行字符或汉字
void MiddlePutStr(char * str,int line)
{
  int length=0;
  int StartX,StartY;
  int left,right,top,bottom;
  StartY=line > MaxY ? MaxY /2 :line ;
  length=strlen(str);
  StartX=( MaxX-length )/2 + 1 ;
  moveto( StartX , StartY );
  putstr(str);
}

//输出用户输入提示
void OutPut_Face(void)
{
        char Date_Time[50]="";
        cls();
        Clear_123();
        drawrect(0,0,127,127);        //画一个方框  [0,0]~[127,127]

        MiddlePutStr ( "抄机械表" , 2 );

        moveto(2,5);
        putstr("表位:");

        moveto(2,7);
        putstr("当前值:");

        moveto(2,9);
        putstr("时间:");
        Show_Date(7,9);
        Show_Time(7,11);
        MiddlePutStr ( "[退出]    [存储]" ,15 );

        Draw_UP_DOWN(UP_DOWN);
        drawrect(0,0,127,127);        //画一个方框  [0,0]~[127,127]
}


//获得当前日期和时间
void  Get_Datetime(char Date_Time[])
{
       int i;
        U8 date[20]="";
        U8 time[20]="";
       getdate(date);          //取系统日期,存放在date串中,格式为yyyy/mm/dd
       strcpy(Date_Time,date);
       strcat(Date_Time," ");
       gettime(time);//取时间 hh:mm:ss(时:分:秒)形式的字符串,8个字符。
       strcat(Date_Time,time);
}


//显示日期
void Show_Date(int x,int y)
{
        char date[30] = "";
        getdate(date);          //取系统日期,存放在date串中,格式为yyyy/mm/dd
        moveto(x,y);
        putstr(date);
}
//显示时间
void Show_Time(int x,int y)
{
    char time[20]="";
    gettime(time);//取时间 hh:mm:ss(时:分:秒)形式的字符串,8个字符。
    moveto ( x,y );
    putstr(time);
}

//打开数据库文件
U8  Open_library( void )
{
   U8 lib;
   keyswitchset(0);
   use ("");
   lib = use(dbfname);                    //关闭数据库文件
   if(lib!=OK  )         //打开数据库文件,如果不等于ok,即1,则显示错误如下
        {
                cls();
                Clear_123();
                moveto(1,1); putstr("错误:");
                moveto(1,5); putstr("    找不到");
                moveto(1,7);
                printf("数据库:%s",dbfname);
                moveto(3,15);putstr("按任意键退出");
                key(0);
                return FALSE;
        } //endif
   use ("");
   use (dbfname);
   Record_Number= Get_Record_Number();
                 return TRUE;
}

//输入
U8 Input(char strings[],int x , int y,int length)
{
 int Key;
 int i;
 char str[50]="";

 l1:    moveto(x,y);
        for(i=0;i<length;i++)
        putstr(" ");
        moveto(x,y);
        Key=keysn(str,length);
    if( Key )
       {
         switch ( *(unsigned char *)sys_keyreturn )
           {     case  ENTER:
                 case  DOWN : strcpy(strings,str);return TRUE;
                 case  UP   :
                                moveto(x,y);
                               for(i=0;i<length;i++)
                                putstr(" ");
                                 return UP;
                 case  ESC  : return FALSE;
                 default    :  goto l1;
           }
       }
   else
       {
         switch ( *(unsigned char *)sys_keyreturn )
           {
                 case  ESC  : return FALSE;
                 case  UP   :
                                moveto(x,y);
                             for(i=0;i<length;i++)
                              putstr(" ");
                            return UP;
                 default    : goto l1;
           }
       }

}   //end Input()


//清除123
void Clear_123( void )
{
 moveto(14,16);
 putstr("    ");
}


//获取按键值
U8 Get_Key(void)
{
  U8  k;
  do{
     k=key(0);
    }while(k!=CLEAR&&k!=ENTER&&k!=ESC&&k!=FUNCTION&&k!=UP&&k!=DOWN);

   switch(k){
       case UP       : return       UP;
       case ESC      : return      ESC;
       case DOWN     : return     DOWN;
       case CLEAR    : return    CLEAR;
       case ENTER    : return    ENTER;
       case FUNCTION : return FUNCTION;
            }
} // END Get_Key()


//表类型
U8 biao_type(int Number)
{
 char str[50]="";
 int i;
 int length;
 for( i=0; i<50; i++)
   str[i]=0;

 use ( "" );
 use ( dbfname );

 libset ( Number , B_DZ );
 libread( str );              //读出表地址
 if( !strlen(str) )          //如果表地址为空,即机械表
   return JJB_TYPE;
 else
   return DGN_TYPE;

}

// 获得记录的总数
int Get_Record_Number()
{
 int i;
 int sum=0;
 int leng=0;
 char string[50]="";
 use("");
 use(dbfname);

 Record_Number=libsumr();
 for(i=0;i<Record_Number;i++)
  {
   libset(i,B_W);
   libread(string);
   leng=strlen(string);
   if(leng)
    sum++;
  }
  return sum;
}





//输入
int InputStr(char strings[],int x , int y,int length)
{
  char backstring[50]="";
  int Key;
  strcpy(backstring,strings);

R:    moveto(x,y);
  keyss(backstring,strings,length,1);
    Key = *(unsigned char *)sys_keyreturn ;

    switch ( Key )
            {
                 case  ENTER:
                             return ENTER;
                 case  DOWN : return DOWN;
                 case  UP   : return UP;
                 case  ESC  : return ESC;
                 default    :
                             strcpy(backstring,strings);
                             goto R;
             }
}   //end Input()

int  Sort2(int Number,int Record_Number)
{
 int i,j;
 char str[50];
 for(i=Number+1;i<Record_Number;i++)
  {
   for(j=START;j<=END;j++)
    {
     libset(i,j);
     libread(str);
     libset(i-1,j);
     libwrit(str);
    }
  }
 for(j=START;j<=END;j++)
 {
 libset(Record_Number-1,j);
 libwrit("");
 }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -